식별자(Identifier) 완벽 정리
식별자 정의·특징·분류·식별관계 vs 비식별관계·본질 vs 인조까지 한눈에 정리
1. 식별자의 정의
식별자란?
하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표하는 속성으로, 각 인스턴스를 유일하게 구분할 수 있는 속성 또는 속성의 조합이다.
식별자의 4가지 특징
- • 유일성 — 각 인스턴스를 고유하게 구분할 수 있어야 함
- • 최소성 — 최소한의 속성 수로 유일성을 만족
- • 불변성 — 자주 변하지 않는 값이어야 함
- • 존재성 — NULL이 아닌 값이 반드시 존재해야 함 (NOT NULL)
2. 식별자 분류 체계
4가지 분류 기준
| 분류 기준 | 유형 | 설명 |
|---|---|---|
| 대표성 여부 | 주식별자 | 엔터티를 대표, PK로 구현 |
| 보조식별자 | 유일성은 있지만 대표 아님, Unique Key로 구현 | |
| 생성 여부 | 본질식별자(내부) | 업무에 의해 자연 발생 |
| 인조식별자(외부) | 인위적으로 만든 식별자 | |
| 속성 수 | 단일식별자 | 하나의 속성으로 식별 |
| 복합식별자 | 두 개 이상 속성의 조합 | |
| 대체 여부 | 본질식별자 | 업무에서 직접 만들어진 식별자 |
| 대리식별자(대체) | 복합식별자 대신 인위적 단일 속성 부여 |
3. 주식별자 vs 보조식별자
주식별자와 보조식별자 비교
| 구분 | 주식별자 | 보조식별자 |
|---|---|---|
| 유일성 | O | O |
| 대표성 | O (엔터티 대표) | X |
| 물리 구현 | Primary Key | Unique Key(Index) |
| NULL 허용 | 불가 (NOT NULL) | 불가 (NOT NULL) |
| FK 참조 | 다른 엔터티에서 FK로 참조 | FK 참조 대상 아님 |
주식별자 선정 기준
- • 해당 업무에서 자주 이용되는 속성을 선정
- • 명칭이나 내역 등은 부적절 (이름은 변경 가능, 중복 가능)
- • 속성의 수가 적은 것을 우선 선정 (복합키보다 단일키 선호)
4. 본질식별자 vs 인조식별자
비교 테이블
| 구분 | 본질식별자 | 인조식별자 |
|---|---|---|
| 정의 | 업무에 의해 만들어진 식별자 | 인위적으로 만든 식별자 |
| 별칭 | 자연키(Natural Key) | 대리키(Surrogate Key) |
| 예시 | 주민등록번호, 사업자등록번호 | 순번(SEQ), 일련번호, 시스템ID |
| 장점 | 업무 의미 있음, 직관적 | 단순, 불변, 복합키 해소 |
| 단점 | 변경 가능성, 복합키 될 수 있음 | 업무 의미 없음, 중복 데이터 발생 가능 |
인조식별자 사용 시점
- • 본질식별자가 너무 길거나 복합키인 경우
- • 본질식별자가 변경 가능성이 있는 경우
- • 성능 향상을 위해 단일 컬럼 PK가 필요한 경우
인조식별자의 문제점
인조식별자를 남용하면 중복 데이터 발생 가능. 본질식별자를 PK로 사용했다면 자연스럽게 방지되는 중복이, 인조식별자에서는 별도 Unique 제약 없이 동일 데이터가 여러 행으로 입력될 수 있다.
5. 복합식별자
복합식별자란?
두 개 이상의 속성을 조합하여 인스턴스를 유일하게 식별하는 식별자이다.
예시:
수강(학번 + 과목코드) → 복합식별자
주문상세(주문번호 + 상품번호) → 복합식별자
복합식별자 해소 → 대리식별자
복합식별자의 속성이 많아지면 대리식별자(인조식별자)로 대체하는 것을 고려한다. 예: (주문번호 + 상품번호 + 옵션코드) → 주문상세번호(SEQ) 하나로 대체.
6. 식별관계 vs 비식별관계
핵심 비교 테이블
| 구분 | 식별관계 | 비식별관계 |
|---|---|---|
| 정의 | 부모 PK가 자식의 PK에 포함 | 부모 PK가 자식의 일반 속성(FK) |
| ERD 표기 | 실선 | 점선 |
| FK 위치 | 자식 PK 영역 | 자식 일반 속성 영역 |
| NULL 허용 | 불가 (PK이므로 NOT NULL) | 가능 (선택 참여 시 NULL) |
| 자식 독립성 | 부모 없이 존재 불가 | 부모 없이도 존재 가능 |
| 강한/약한 | 강한 관계 | 약한 관계 |
| 예시 | 주문 → 주문상세(주문번호가 PK 일부) | 부서 → 사원(부서코드가 FK) |
식별관계 상세
부모 엔터티의 식별자가 자식 엔터티의 주식별자의 구성요소가 되는 관계. 자식은 부모 없이 존재할 수 없다.
주문(주문번호) → 주문상세(주문번호 + 상품번호)
→ 주문상세의 PK에 주문번호가 포함 = 식별관계
비식별관계 상세
부모 엔터티의 식별자가 자식 엔터티의 일반 속성(FK)으로만 전이되는 관계. 자식은 부모와 독립적으로 존재 가능하다.
부서(부서코드) → 사원(사원번호, 부서코드(FK))
→ 사원의 PK는 사원번호이고, 부서코드는 일반 FK = 비식별관계
식별관계 vs 비식별관계 선택 기준
- • 자식이 부모 없이 존재 불가 → 식별관계 (주문상세는 주문 없이 존재 불가)
- • 자식이 독립적으로 존재 가능 → 비식별관계 (사원은 부서 배치 전에도 존재 가능)
- • 식별관계가 계속되면 PK 속성이 늘어남 → 비식별관계로 전환 고려
7. 대리식별자(Surrogate Key)
대리식별자란?
주식별자의 속성이 두 개 이상인 경우(복합식별자), 인위적으로 만든 단일 속성 식별자로 대체한 것이다. 순번(SEQ), 시스템 생성 ID 등이 해당된다.
대리식별자 사용 조건
- • 본질식별자가 복합키이고 속성이 많은 경우
- • 자식 엔터티로 PK 전이가 과다한 경우
- • 본질식별자의 데이터 길이가 긴 경우
8. 식별자의 물리 구현
논리 → 물리 매핑
| 논리 모델 | 물리 모델 | SQL 구현 |
|---|---|---|
| 주식별자 | Primary Key | PRIMARY KEY |
| 보조식별자 | Unique Key | UNIQUE |
| 식별관계 FK | PK + FK | PRIMARY KEY + FOREIGN KEY |
| 비식별관계 FK | FK | FOREIGN KEY |
9. 시험 빈출 포인트
자주 출제되는 유형
- • 식별관계 vs 비식별관계 구분 — ERD를 보고 실선/점선 구분, FK가 PK에 포함되는지 여부
- • 식별자 4가지 특징 — 유일성, 최소성, 불변성, 존재성(NOT NULL)
- • 본질식별자 vs 인조식별자 — 자연키 vs 대리키 개념과 장단점
- • 인조식별자 남용 문제 — 중복 데이터 발생 가능성
- • 주식별자 선정 기준 — 명칭·내역 부적절, 자주 이용되는 속성, 최소 속성 수
- • 식별관계 = 실선, 비식별관계 = 점선 — ERD 표기법 문제
함정 선지 주의
- • "보조식별자는 유일성이 없다" — 틀림. 보조식별자도 유일성이 있다 (대표성만 없음)
- • "식별관계에서 FK는 NULL 가능" — 틀림. PK에 포함되므로 NOT NULL
- • "인조식별자는 항상 사용해야 한다" — 틀림. 본질식별자가 적합하면 본질식별자를 사용
개념을 확인했다면 문제로 실력을 검증해보세요