sqld
본질식별자 vs 인조식별자 정의
자격증원톱
2026. 2. 21. 12:49
반응형
본질식별자 vs 인조식별자 정의
반응형

1) 본질식별자 vs 인조식별자 한 줄 정의
- 본질식별자(자연키): 업무에서 원래 존재하는 “의미 있는” 고유값
예) 학번, 사번, 사업자등록번호(업무 식별용), 과목코드 - 인조식별자(대리키): 시스템이 새로 만들어 붙이는 “의미 없는” 번호
예) 회원ID(자동증가), 주문행ID(SEQ), 등록ID
2) 예시로 바로 이해(학생)
본질식별자 예
- 학생 엔티티에서 학번은 입학 시 부여되는 고유값
→ 학번만으로 학생 1명을 구분 가능
그래서 학번은 본질식별자(PK로 쓰기 좋음)
인조식별자 예
- “학기별 성적/수강내역” 같은 테이블은 학번만으로는 행이 유일하지 않음
- 같은 학생이 여러 학기, 여러 과목을 가지니까요.
- 이럴 때 등록ID 같은 인조식별자를 PK로 만들 수 있습니다.
3) 인조식별자가 필요한 대표 상황(이미지 핵심: 주문상세)
문제 상황(복합키/순번 관리가 번거로움)
주문상세가 이렇게 생겼다고 해봅시다.
| 주문번호 | 주문순번 | 상품번호 | 배송지 |
| 110001 | 1 | 1234 | 마포구 |
| 110001 | 2 | 1234 | 광진구 |
| 110001 | 3 | 1234 | 동대문구 |
- 주문번호만으로는 행이 구분되지 않아서 주문순번을 관리해야 함
- “순번”은 사람이 계산/관리해야 해서 실수 가능성이 큼
해결(인조식별자 도입)
| 주문행ID(PK) | 주문번호 | 상품번호 | 배송지 |
| 1 | 110001 | 1234 | 마포구 |
| 2 | 110001 | 1234 | 광진구 |
| 3 | 110001 | 1234 | 동대문구 |
- DB가 주문행ID를 자동 생성(SEQ 등)
행을 구분하기 훨씬 쉬워지고, 순번 관리도 필요 없어짐
4) 인조식별자의 장점(이미지 요약)
- 고유성 보장 쉬움
- 시스템이 자동으로 유일값을 만들어 줌
- 조회/수정/삭제가 단순해짐
- PK가 하나의 컬럼이라 SQL 조건이 깔끔
- 성능/인덱싱에 유리한 경우가 많음
- 짧고 단순한 키는 인덱스/조인에서 유리
- 관계(조인) 설정이 쉬워짐
- 여러 테이블에서 복합키를 끌고 다닐 필요가 줄어듦
5) 인조식별자 사용 시 주의점/단점(이미지 핵심)
① “중복 데이터”를 막아주진 않는다
인조식별자는 행을 구분하는 번호일 뿐,
“같은 사람이 중복 등록되는 문제”를 자동으로 막지 못합니다.
예) 고객 테이블에서
| 고객ID(PK) | 이름 | 주소 |
| 1 | 홍길동 | 서울 강남 |
| 2 | 홍길동 | 서울 강남 |
- 서로 다른 고객ID가 붙었지만 실제로는 같은 사람일 수 있음
그래서 업무적으로 유일해야 하는 값(예: 이메일, 주민번호 대체값 등)은
별도로 UNIQUE 제약 등을 걸어 중복을 막아야 합니다.
② 불필요한 인덱스가 늘어날 수 있음
- 인조식별자를 PK로 쓰면 자동으로 인덱스가 생기는 경우가 많고,
- 테이블이 많아질수록 인덱스 관리 비용이 커질 수 있음
→ “무조건 인조식별자”가 아니라 필요한 곳에만 쓰는 게 중요
초간단 결론
- 본질식별자: 업무에 원래 있는 고유값(의미 있음) → 가능하면 활용
- 인조식별자: 시스템이 만든 번호(의미 없음) → 복합키가 복잡하거나 관리가 어려울 때 유용
- 인조식별자를 써도 중복 데이터 방지 규칙(UNIQUE 등)은 따로 설계해야 함
반응형