CS
[SQLD] 식별자(Identifier)
2026년 02월 10일 04:59
SQLD 1과목 – 식별자(Identifier)
식별자(Identifier)란?
식별자란 하나의 엔터티 안에서 각 인스턴스를 유일하게 구분할 수 있게 하는 속성이다.
- 엔터티는 여러 인스턴스의 집합이므로 반드시 유일한 식별자 후보가 존재해야 함
- 여러 후보 중 엔터티를 대표하는 식별자 = 주식별자
- 논리 모델의 주식별자는 물리 모델에서 기본키(PK) 로 구현됨
예
- 학생 엔터티
- 논리 모델: 주식별자 = 학생번호
- 물리 모델: PK = 학생번호 컬럼
식별자의 분류
① 대표성 여부에 따른 분류
주식별자
- 인스턴스를 유일하게 식별
- 유일성 + 최소성 만족
- 다른 엔터티와 참조 관계 연결 기준
- 예: 학생(학번), 도서(ISBN)
보조식별자
- 유일성·최소성은 만족
- 대표성은 없음
- 참조 관계 연결에는 사용 ❌
- 예: 학생(주민번호), 고객(이메일)
② 생성 여부(발생 시점)에 따른 분류
내부식별자
- 다른 엔터티 참조 ❌
- 엔터티 내부에서 자체 생성
- 예: 주문번호, 상품번호
외부식별자
- 다른 엔터티의 식별자를 상속
- 외래키(FK) 형태로 구현
- 예: 주문(고객번호, 상품번호)
③ 속성 수에 따른 분류
단일식별자
- 하나의 속성으로 구성
- 예: 학생(학번)
복합식별자
- 두 개 이상의 속성 조합
- 예: 주문(주문번호 + 상품번호)
④ 대체 여부에 따른 분류
본질식별자 (원조식별자)
- 업무적으로 자연스럽게 존재
- 실제 업무에서 의미 있음
- 예: 학번, 주민번호, ISBN
인조식별자
- 업무적 의미 ❌
- 관리 편의를 위해 인위적으로 생성
- 주로 자동 증가 번호
- 예: 주문번호, 수강ID
주식별자의 특징 ⭐⭐⭐
① 유일성
- 모든 인스턴스를 유일하게 구분 가능
- 이름 ❌ / 학번 ⭕
② 최소성
- 유일성을 만족하는 최소한의 속성
- 사번만으로 되는데 사번+이름 ❌
③ 불변성
- 시간이 지나도 값이 변경되지 않음
- 고객번호 ⭕
④ 존재성
- NULL ❌
- 반드시 값 존재
주식별자 도출 기준 (PK 선정 기준)
① 업무에서 자주 사용되는 속성 우선
- 활용 빈도 높은 속성이 PK로 적합
- 학생: 학번 ⭕ / 주민번호 ❌
② 이름·설명 같은 텍스트 기반 속성 피하기
- 변경 가능성 큼
- 가능하면 코드형 속성 사용
③ 속성 수는 최소화
- PK가 너무 길면 조인 성능 저하
- 보통 7~8개 이상 필요하면 인조식별자 생성 고려
예
- 주문일자 + 고객번호 + 상품코드 ❌
- 주문번호 ⭕
식별 관계 vs 비식별 관계 ⭐⭐
① 식별 관계 (Identifying Relationship)
- 부모 PK가 자식 PK에 포함
- 자식 엔터티는 부모 없이는 식별 ❌
- 대부분 복합키
- 자식은 독립 존재 ❌
예
- 사원(사번)
- 교육이력(사번 + 교육일련번호)

② 비식별 관계 (Non-Identifying Relationship)
- 부모 PK는 자식의 일반 속성(FK) 로만 존재
- 자식 엔터티는 독립적인 PK 보유
예
- 부서(부서번호)
- 사원(사번, 부서번호(FK))

강한 개체 vs 약한 개체
강한 개체 (Strong Entity)
- 독립적으로 존재 가능
- 자체 PK로 식별
- 예: 고객, 사원, 상품
약한 개체 (Weak Entity)
- 식별 관계를 통해서만 정의
- 부모 PK 없이는 식별 ❌
- 대부분 복합키
- 예: 교육이력, 주문상세
Key 종류
| key | 설명 |
|---|---|
| PK | 테이블의 대표 식별자 (NULL ❌, 중복 ❌) |
| Candidate Key | PK가 될 수 있는 후보 키 |
| Super Key | 유일성은 만족, 최소성은 불필요 |
| Alternate Key | 후보키 중 PK로 선택되지 않은 키 |
| FK | 다른 테이블의 PK를 참조하는 키 |
식별자 표기법
| 구분 | IE표기법 | Baker 표기법 |
|---|---|---|
| 주식별자와 일반속성 | - 주식별자: 최상단에 배치 - 일반 속성: 그 아래에 배치 | - 주식별자: 속성명 앞에 # 기호 - 일반 속성: 속성명 앞에 •(점) 기호 붙임 |
| 식별/비식별 관계 | - 식별관계: 실선 - 비식별관계: 점선 | - 식별관계: 약한 개체 쪽에 |(바)표시 - 비식별관계: 표시 생략 |
인조식별자의 단점 ⚠️
- 업무 의미 상실
- 본질식별자 검증 소홀
- 중복 데이터 발생 가능
- 불필요한 인덱스 생성 가능
👉 따라서 본질식별자를 먼저 검토한 후 정말 필요할 때만 인조식별자 사용
