식별자 대체여부에 따라서 본질식별자와 인조식별자로 구분할수 있다
외부식별자가 자식 엔터티의 주식별자의 일부로 쓰이면 식별관계,일반 속성으로 쓰이면 비식별관계이다
본질식별자와 인조식별자의 정의
본질식별자 → 업무에서 자연스럽게 생성되며,고유성을 갖는 속성으로 구성된 식별자
인조식별자 → 업무상 존재하지 않지만, 시스템구현이나 개발의 효율성을 위해 새롭게 생성된 식별자
예시) 증명서 발급이력 테이블 설계하기
요구사항 → 증명서 발급이력은 사용자별/증명서별 타입별로 하루에 한번만 발급할수있다
본질식별자 기준 설계
[증명서 발급이력] (주식별자: 발급자ID + 증명서타입코드+발급일자)
| 발급자ID | 증명서타입코드 | 발급일자 | 증명서내용 |
| tae123 | 재학증명서 | 2025-04-21 | tae123의 재학증명서 2025년 4월21일에 출력 |
발급자ID + 증명서타입코드+발급일자조합으로 유일한 값을 식별한다
장점 -> DBMS가 자동으로 중복여부를 판단해주고 중복이면 오류를 반환한다
단점-> 업무 변경에 유연하게 대응하기 어렵고,구현측면에서 관리가 복잡해질수있다
인조식별자 기준 설계
개발 측면에서 편의성을 위해 별도의 식별자(발급번호)를 만들어서 자동으로 증가하는 값을 입력 받도록 한다
[증명서 발급이력](주식별자:발급번호)
| 발급번호 | 발급자ID | 증명서타입코드 | 발급일자 | 증명서내용 |
| 1 | tae123 | 재학증명서 | 2025-04-21 | tae123의 재학증명서 2025년 4월21일에 출력 |
발급번호라는 단일 식별자를 새로 생성해서 자동 증가값으로 관리한다
장점-> 데이터 입력이 간편하다
단점-> 식별자가 중복되지 않아서 DBMS가 중복여부를 판단할수 없다 예를 들어 발급버튼을 여러번 눌렀다고 했을때 동일한 데이터가 중복으로 입력되기때문에 중복을 확인하는 로직을 직접만들어야한다
데이터 모델에서의 표현방법
정규화를 통해 회원 엔터티가 회원과 회원 연락처로 분리되었다고 했을때 회원연락처 엔터티는 회원의 회원ID를 받아올때 아래의 두가지 방법을 사용할수 있다
본질식별자기준 설계(식별관계,본질식별자 중심)
회원ID + 구분코드를 주식별자로 한다 외부에서 받은 식별자를 자식엔터티의 주식별자에 그대로 포함한다

인조식별자 기준 설계(비식별관계,인조식별자 중심)
연락처 순번이라는 새로운 식별자를 생성하거나 주식별자로 사용한다 외부식별자는 일반속성으로만 존재한다

'📘꼬부기의 성장서재 > 이기적SQLD 기출문제' 카테고리의 다른 글
| WHERE절 (0) | 2026.03.29 |
|---|---|
| 함수(Function) (0) | 2026.03.28 |
| 서브쿼리 (0) | 2026.03.06 |
| SELECT 문 (0) | 2026.03.05 |
| 정규화 (0) | 2026.03.04 |