Json:{ } 블로그
👩🏻‍💻
데이터베이스

[데이터베이스] JScode 스터디 1주차 (2)

2024.03.07

릴레이션 스키마와 릴레이션 인스턴스

릴레이션 스키마

릴레이션 스키마는 테이블의 구조를 정의하는 것입니다. 마치 건물의 청사진처럼, 릴레이션 스키마는 테이블이 어떤 형태를 갖고 있는지, 어떤 종류의 데이터를 저장할 수 있는지 설명합니다. 릴레이션 스키마에는 테이블의 이름과 함께 테이블의 각 열(속성)에 대한 정보(이름, 데이터 타입 등)가 포함됩니다.

예시: “학생”이라는 테이블의 릴레이션 스키마가 있다고 가정해 봅시다. 이 스키마는 학생의 학번, 이름, 전공 등의 정보를 저장하기 위한 구조를 정의합니다. 따라서 “학생” 테이블의 릴레이션 스키마는 다음과 같이 표현될 수 있습니다: 학생(학번, 이름, 전공)

릴레이션 인스턴스

릴레이션 인스턴스는 릴레이션 스키마에 따라 실제로 저장된 데이터의 집합입니다. 즉, 특정 시점에서 데이터베이스 테이블에 저장된 데이터의 상태를 나타냅니다. 릴레이션 인스턴스는 시간이 지나면서 데이터의 추가, 삭제, 수정에 따라 변경될 수 있습니다.

예시: “학생” 테이블의 릴레이션 인스턴스는 실제 학생 데이터를 포함하고 있습니다. 만약 세 명의 학생 정보가 테이블에 저장되어 있다면, 이 테이블의 릴레이션 인스턴스는 세 개의 행(레코드)으로 구성됩니다. 예를 들어:

  • 학번: 123, 이름: 홍길동, 전공: 컴퓨터공학
  • 학번: 456, 이름: 이순신, 전공: 기계공학
  • 학번: 789, 이름: 강감찬, 전공: 전자공학

요약

  • 릴레이션 스키마는 테이블의 구조를 정의합니다(테이블이 어떤 정보를 담을 수 있는지).
  • 릴레이션 인스턴스는 특정 시점에서 실제로 테이블에 저장된 데이터의 집합입니다(테이블에 실제로 어떤 데이터가 들어있는지).

릴레이션 스키마는 건물의 설계도와 같고, 릴레이션 인스턴스는 그 설계도에 따라 지어진 실제 건물과 그 건물의 현재 상태를 나타내는 것으로 이해할 수 있습니다.

릴레이션의 차수와 카니덜리티

차수(Degree)

  • 정의: 릴레이션(테이블)의 차수는 그 테이블이 가지고 있는 속성(열, 컬럼)의 수를 의미합니다.
  • 예시: 예를 들어, “학생” 테이블에 ‘학번’, ‘이름’, ‘전공’ 이렇게 3개의 컬럼이 있다면, 이 테이블의 차수는 3입니다. 마치 사람이 팔, 다리, 머리 등의 부위를 가지고 있는 것처럼, 테이블이 가지고 있는 “부위”의 수라고 할 수 있습니다.

카디널리티(Cardinality)

  • 정의: 릴레이션의 카디널리티는 그 테이블에 있는 튜플(행, 레코드)의 수를 의미합니다. 데이터베이스에서는 릴레이션 간의 관계에서도 카디널리티를 사용하여 릴레이션 사이의 관계를 설명하기도 합니다(예: 1대1, 1대다, 다대다 관계).
  • 예시: “학생” 테이블에 100명의 학생 정보가 저장되어 있다면, 이 테이블의 카디널리티는 100입니다. 학교에 다니는 학생의 수를 세는 것과 비슷하게, 테이블에 들어 있는 데이터의 “수”를 세는 것이라고 생각할 수 있습니다.

차이점

  • 차수는 테이블의 구조적 특성을 나타내는 것으로, 몇 개의 컬럼(또는 속성)으로 이루어져 있는지를 말합니다.
  • 카디널리티는 테이블의 데이터 양을 나타내는 것으로, 테이블에 실제로 몇 개의 레코드(또는 행)가 있는지를 말합니다.

이 두 개념은 데이터베이스 설계 및 최적화에 있어서 중요한 기준이 됩니다. 차수가 높은 테이블은 더 많은 종류의 정보를 저장할 수 있지만, 관리가 복잡해질 수 있습니다. 카디널리티는 테이블에 저장된 데이터의 양을 나타내므로, 데이터베이스의 성능과 직접적인 관련이 있습니다.

키(Key)에 대하여 (슈퍼키, 후보키, 기본키, 대리키, 외래키)

슈퍼키(Super Key)

  • 정의: 테이블 내의 각 레코드를 유일하게 식별할 수 있는 하나 이상의 속성(열)의 집합입니다. 슈퍼키는 불필요한 추가 정보를 포함할 수 있습니다. 예를 들어, ‘학생’ 테이블에서 학번과 조합할 수 있는 모든 속성들(학번+이름, 학번+주소 등)이 슈퍼키가 될 수 있습니다.

후보키(Candidate Key)

  • 정의: 레코드를 유일하게 식별할 수 있으면서, 최소한의 속성으로 구성된 슈퍼키입니다. 다시 말해, 불필요한 속성 없이 레코드를 유일하게 식별할 수 있는 키를 말합니다. 후보키는 여러 개일 수 있습니다.

기본키(Primary Key)

  • 정의: 후보키 중에서 선택된 메인 키로, 각 레코드를 유일하게 식별하는 데 사용됩니다. 기본키는 중복되거나 NULL 값을 가질 수 없습니다. 예를 들어, ‘학생’ 테이블에서 학번이 기본키로 선택될 수 있습니다.

대리키(Surrogate Key)

  • 정의: 비즈니스 의미가 없고 데이터베이스 내에서만 사용되는 인위적으로 생성된 키입니다. 주로 기본키로 사용되며, 연속된 번호나 UUID 같은 형식을 가질 수 있습니다. 대리키는 자연키(자연스럽게 데이터에서 파생된 키, 예: 학번) 대신 사용될 수 있습니다.

외래키(Foreign Key)

  • 정의: 한 테이블의 키가 다른 테이블의 기본키(또는 후보키)와 연결되어 있는 속성을 말합니다. 외래키는 두 테이블 간의 관계를 정의하는 데 사용되며, 참조 무결성을 유지하는 데 도움을 줍니다. 예를 들어, ‘수강신청’ 테이블에서 학번이 ‘학생’ 테이블의 학번을 참조하는 외래키일 수 있습니다.

무결성 제약조건

1. 개체 무결성(Entity Integrity)

  • 정의: 모든 테이블은 기본키를 가져야 하고, 이 기본키는 유일한 값을 가져야 합니다. 기본키를 통해 각 레코드(행)를 명확하게 식별할 수 있어야 하며, 기본키 값으로 NULL을 허용하지 않습니다. 예를 들어, 학생 테이블에서 학번이 기본키라면, 모든 학번은 고유해야 하고 빈 값이어서는 안 됩니다.

2. 참조 무결성(Referential Integrity)

  • 정의: 테이블 간에 관계가 설정될 때, 한 테이블의 외래키가 다른 테이블의 기본키를 정확하게 참조해야 합니다. 즉, 외래키 값은 참조하는 테이블의 기본키 값 중 하나거나 NULL이어야 합니다. 예를 들어, 수강신청 테이블에서 학생 테이블의 학번을 참조한다면, 수강신청 테이블의 학번 필드 값은 학생 테이블에 존재하는 학번이거나, 참조가 필요 없다면 NULL이어야 합니다.

3. 도메인 무결성(Domain Integrity)

  • 정의: 테이블의 모든 필드(열)는 선언된 도메인(유효한 값의 집합)에 속한 값만을 가져야 합니다. 이는 데이터 타입, 길이, 가능한 값 등에 대한 제약을 포함합니다. 예를 들어, 성적 테이블에서 성적 필드가 0에서 100 사이의 값만을 허용한다면, 이는 도메인 무결성을 보장하는 조건입니다.

4. 사용자 정의 무결성(User-Defined Integrity)

  • 정의: 애플리케이션의 특정 요구 사항에 맞춰 설정하는 무결성 조건입니다. 예를 들어, 회사의 정책상 직원의 나이가 특정 범위에 속해야 한다거나, 특정 부서에 속한 직원만 특정 작업을 할 수 있는 경우 등이 이에 해당합니다.
👇 도움이 되셨다면 👇

B

u

y

M

e

A

C

o

f

f

e

e

© Powered by danmin