식별자(Identifier)는 엔터티 내에서 각 인스턴스를 고유하게 구분하기 위한 속성이며, 이는 데이터베이스 테이블의 기본 키(Primary Key)로 구현됩니다.
고유성 (Uniqueness)
학번은 모든 학생마다 고유해야 함.Not Null
변경 불가 (Immutable)
최소성 (Minimality)
단일 키 vs 복합 키
학생 ID + 과목 코드.자연 키(Natural Key) vs 대체 키(Surrogate Key)
최근에는 대체 키를 선호하는 경우가 많습니다. 자연 키를 기본 키로 사용할 경우, 값 변경으로 인한 문제가 발생할 가능성이 있기 때문입니다.
중복 방지
| 학번 (Primary Key) | 이름 | 전공 |
|---|---|---|
| 20240001 | 홍길동 | 컴퓨터공학 |
| 20240002 | 이순신 | 전자공학 |
학번이 기본 키입니다. 학번은 학생마다 고유하며, Null 값을 가질 수 없습니다.| 학번 (FK) | 과목 코드 (FK) | 점수 |
|---|---|---|
| 20240001 | CS101 | 95 |
| 20240001 | CS102 | 88 |
학번 + 과목 코드를 복합 키로 설정해 수강 정보를 고유하게 식별할 수 있습니다.식별자는 기본 키로 설계되며, 데이터베이스에서 중복을 방지하고 무결성을 보장하는 핵심 요소입니다. 기본 키를 적절히 설계하면 데이터 모델이 더 견고하고 확장 가능해집니다.
복합 키는 두 개 이상의 컬럼(column)을 조합하여 하나의 기본 키(Primary Key)를 구성하는 것을 의미합니다. 복합 키는 단일 컬럼으로는 유일성을 보장할 수 없는 경우, 해당 컬럼들을 조합해 테이블 내에서 각 행(row)을 고유하게 식별할 수 있도록 사용합니다.
컬럼의 조합으로 유일성 보장
식별자 역할
기본 키 또는 고유 키로 사용
학생이 여러 과목을 수강하는 경우, 학번과 과목 코드를 조합하여 유일성을 보장합니다.
| 학번(Student ID) | 과목 코드(Course Code) | 점수(Score) |
|---|---|---|
| 20240001 | CS101 | 95 |
| 20240001 | CS102 | 88 |
| 20240002 | CS101 | 90 |
학번: 한 학생이 여러 과목을 수강할 수 있음.과목 코드: 한 과목을 여러 학생이 수강할 수 있음.학번 + 과목 코드를 조합하여 유일성을 보장.한 주문(Order)이 여러 상품(Item)을 포함하는 경우, 주문 번호(Order ID)와 상품 코드(Item Code)를 조합하여 유일성을 보장합니다.
| 주문 번호(Order ID) | 상품 코드(Item Code) | 수량(Quantity) |
|---|---|---|
| 1001 | A001 | 2 |
| 1001 | A002 | 1 |
| 1002 | A001 | 3 |
주문 번호 + 상품 코드.유일성 보장
정규화 지원
인덱스 크기 증가
참조 복잡성 증가
변경 및 관리 어려움
복합 키의 단점을 극복하기 위해, 대체 키를 사용할 수도 있습니다.
대체 키(Surrogate Key)는 복합 키 대신 단일 컬럼(예: Auto Increment ID)을 기본 키로 사용하고, 복합 키에 해당하는 컬럼은 고유 키(Unique Key)로 관리하는 방법입니다.
| 수강 ID (Surrogate Key) | 학번(Student ID) | 과목 코드(Course Code) | 점수(Score) |
|---|---|---|---|
| 1 | 20240001 | CS101 | 95 |
| 2 | 20240001 | CS102 | 88 |
| 3 | 20240002 | CS101 | 90 |
수강 ID를 기본 키로 설정.학번 + 과목 코드는 고유 키(Unique Key)로 설정.복합 키는 설계의 목적과 데이터 특성에 따라 선택적으로 사용해야 합니다. 경우에 따라 복합 키와 대체 키를 혼합하여 활용하는 것도 좋은 접근법입니다! 😊
추가 학습 자료
kkd0059.log-생활코딩 - 관계형 데이터 모델링 - 4.3. ERD의 구성요소