생활코딩 - 관계형 데이터 모델링 - 4.6. 식별자 지정

Kkd·2024년 11월 26일

코딩 영상 후기

목록 보기
10/34

movie

식별자(Identifier)는 엔터티 내에서 각 인스턴스를 고유하게 구분하기 위한 속성이며, 이는 데이터베이스 테이블의 기본 키(Primary Key)로 구현됩니다.


1.기본 키(Primary Key)

기본 키(Primary Key)의 역할

  • 엔터티 내 각 인스턴스를 유일하게 식별합니다.
  • 기본 키를 통해 엔터티의 모든 데이터가 특정 데이터와 중복되지 않음을 보장합니다.
  • 관계형 데이터베이스에서는 기본 키를 기반으로 참조 무결성을 유지합니다.

기본 키의 특징

  1. 고유성 (Uniqueness)

    • 기본 키는 같은 값을 가질 수 없습니다.
    • 예: 학생 테이블에서 학번은 모든 학생마다 고유해야 함.
  2. Not Null

    • 기본 키 값은 반드시 존재해야 합니다.
    • Null 값은 허용되지 않습니다.
  3. 변경 불가 (Immutable)

    • 기본 키는 한 번 설정되면 변경하지 않는 것이 원칙입니다.
    • 데이터 안정성과 참조 무결성을 유지하기 위함입니다.
  4. 최소성 (Minimality)

    • 기본 키는 가능한 한 최소한의 속성으로 구성되어야 합니다.
    • 복합 키(Composite Key)의 경우에도 최소한의 필드로 구성해야 효율적입니다.

기본 키의 설계 시 고려사항

  1. 단일 키 vs 복합 키

    • 단일 키(Single Key): 하나의 속성으로 구성된 기본 키.
      • 예: 주민등록번호, 주문 번호 등.
    • 복합 키(Composite Key): 여러 속성을 결합해 구성된 기본 키.
      • 예: 강의 테이블에서 학생 ID + 과목 코드.
  2. 자연 키(Natural Key) vs 대체 키(Surrogate Key)

    • 자연 키: 실제 데이터 속성 중 고유성을 가진 것을 기본 키로 사용.
      • 예: 주민등록번호, 학번.
    • 대체 키: 데이터 속성 대신 인위적으로 생성한 식별자를 기본 키로 사용.
      • 예: Auto Increment로 생성한 ID 값.

    최근에는 대체 키를 선호하는 경우가 많습니다. 자연 키를 기본 키로 사용할 경우, 값 변경으로 인한 문제가 발생할 가능성이 있기 때문입니다.

  3. 중복 방지

    • 기본 키는 데이터 중복을 방지하므로, 테이블의 무결성을 보장하는 중요한 요소입니다.

예시

학생 테이블

학번 (Primary Key)이름전공
20240001홍길동컴퓨터공학
20240002이순신전자공학
  • 여기서 학번이 기본 키입니다. 학번은 학생마다 고유하며, Null 값을 가질 수 없습니다.

수강 테이블

학번 (FK)과목 코드 (FK)점수
20240001CS10195
20240001CS10288
  • 이 경우, 학번 + 과목 코드를 복합 키로 설정해 수강 정보를 고유하게 식별할 수 있습니다.

결론

식별자는 기본 키로 설계되며, 데이터베이스에서 중복을 방지하고 무결성을 보장하는 핵심 요소입니다. 기본 키를 적절히 설계하면 데이터 모델이 더 견고하고 확장 가능해집니다.


2.복합 키(Composite Key)

복합 키(Composite Key)란?

복합 키는 두 개 이상의 컬럼(column)을 조합하여 하나의 기본 키(Primary Key)를 구성하는 것을 의미합니다. 복합 키는 단일 컬럼으로는 유일성을 보장할 수 없는 경우, 해당 컬럼들을 조합해 테이블 내에서 각 행(row)을 고유하게 식별할 수 있도록 사용합니다.


복합 키의 특징

  1. 컬럼의 조합으로 유일성 보장

    • 각 컬럼은 개별적으로는 고유하지 않지만, 여러 컬럼의 값을 조합하면 고유성을 가질 수 있습니다.
  2. 식별자 역할

    • 복합 키는 단일 키처럼 테이블 내 각 레코드(row)를 고유하게 식별합니다.
  3. 기본 키 또는 고유 키로 사용

    • 복합 키는 기본 키(Primary Key)로도 설정될 수 있고, 고유 키(Unique Key)로도 설정될 수 있습니다.

복합 키의 예시

1. 수강 테이블 예시

학생이 여러 과목을 수강하는 경우, 학번과목 코드를 조합하여 유일성을 보장합니다.

학번(Student ID)과목 코드(Course Code)점수(Score)
20240001CS10195
20240001CS10288
20240002CS10190
  • 단일 컬럼으로는 유일성을 보장할 수 없음:
    • 학번: 한 학생이 여러 과목을 수강할 수 있음.
    • 과목 코드: 한 과목을 여러 학생이 수강할 수 있음.
  • 복합 키: 학번 + 과목 코드를 조합하여 유일성을 보장.

2. 주문 상세 테이블 예시

한 주문(Order)이 여러 상품(Item)을 포함하는 경우, 주문 번호(Order ID)상품 코드(Item Code)를 조합하여 유일성을 보장합니다.

주문 번호(Order ID)상품 코드(Item Code)수량(Quantity)
1001A0012
1001A0021
1002A0013
  • 복합 키: 주문 번호 + 상품 코드.

복합 키의 장단점

장점

  1. 유일성 보장

    • 단일 컬럼으로는 유일성을 보장할 수 없는 경우, 여러 컬럼을 조합하여 고유성을 보장할 수 있습니다.
  2. 정규화 지원

    • 데이터의 중복을 줄이고 테이블 구조를 정규화하는 데 유용합니다.

단점

  1. 인덱스 크기 증가

    • 여러 컬럼을 조합하므로, 인덱스의 크기가 커질 수 있고 성능에 영향을 줄 수 있습니다.
  2. 참조 복잡성 증가

    • 복합 키를 외래 키(Foreign Key)로 참조하는 경우, 조합된 모든 컬럼을 참조해야 하므로 복잡성이 증가할 수 있습니다.
  3. 변경 및 관리 어려움

    • 복합 키를 구성하는 컬럼 중 하나라도 변경되면, 관련 데이터의 무결성을 유지하기 어렵습니다.

복합 키 대신 대체 키(Surrogate Key)를 사용하는 경우

복합 키의 단점을 극복하기 위해, 대체 키를 사용할 수도 있습니다.
대체 키(Surrogate Key)는 복합 키 대신 단일 컬럼(예: Auto Increment ID)을 기본 키로 사용하고, 복합 키에 해당하는 컬럼은 고유 키(Unique Key)로 관리하는 방법입니다.

예시: 수강 테이블 리팩토링

수강 ID (Surrogate Key)학번(Student ID)과목 코드(Course Code)점수(Score)
120240001CS10195
220240001CS10288
320240002CS10190
  • 수강 ID를 기본 키로 설정.
  • 학번 + 과목 코드는 고유 키(Unique Key)로 설정.

복합 키를 사용할지 여부 결정 기준

  1. 컬럼 조합이 의미를 가질 경우: 복합 키 사용.
  2. 성능 최적화와 단순성을 중시할 경우: 대체 키 사용.

복합 키는 설계의 목적과 데이터 특성에 따라 선택적으로 사용해야 합니다. 경우에 따라 복합 키와 대체 키를 혼합하여 활용하는 것도 좋은 접근법입니다! 😊

추가 학습 자료
kkd0059.log-생활코딩 - 관계형 데이터 모델링 - 4.3. ERD의 구성요소

profile
🌱

0개의 댓글