논리적 모델링 - 키
논리적 모델링 - 키
키 종류
기본 키(Primary Key - PK)
- 테이블의 모든 행을 유일하게 식별하는 대표 키
- 기본 키가 반드시 지켜야 하는 3가지 규칙
- NULL 값을 가질 수 없다.(
NOT NULL) - 반드시 유일해야 한다.(
UNIQUE) - 값이 변하지 않아야 한다.(
불변성)
- NULL 값을 가질 수 없다.(
후보 키(Candidate Key)
- 기본 키가 될 수 있는 후보 키
- 기본 키가 될 수 있는 자격
- 유일성(
UNIQUE): 모든 행을 서로 구분할 수 있어야 함 - 최소성(
Minimality): 행을 유일하게 식별하는 데 꼭 필요한 최소한의 컬럼만 포함해야 함
- 유일성(
대체 키(Alternate Key)
- 후보 키 중에서 기본 키로 선택되지 않은 나머지 키
외래 키
- 테이블 간의 관계를 연결하는 역할
- 한 테이블의 컬럼이 다른 테이블의 기본 키를 참조하는 것
자연 키
- 자연 키(Natural Key)는 주민등록번호, 이메일 처럼 비즈니스 로직에서 자연스럽게 발생하는 의미 있는 데이터를 기본 키로 사용하는 것
- 자연 키의 치명적 약점은 변경 가능성
- 자연 키를 기본 키로 사용하면 해당 값이 변경 될 때 참조 무결성 제약조건 위반, 연쇄 업데이트로 인한 시스템 부하, 데이터 역사성 훼손, 외부 시스템 연동 문제 등의 심각한 문제가 발생할 수 있음
대리 키
- 대리 키(Surrogate Key)는 비즈니스 로직과 무관한, 오직 데이터 식별을 위해 시스템이 자동 생성하는 값을 기본 키로 사용하는 것 (
Auto Increment,UUID등) - 대리 키는 절대 변하지 않으므로, 비즈니스 로직이 변경되어도 데이터 구조의 안정성이 유지 됨
- 현대 DB 설계의 표준 패턴
- 대리 키를 기본키
- 자연 키는
UNIQUE제약조건을 적용
자연 키 vs 대리 키 - 성능 트레이드 오프
- 자연 키는 일부 상황에
JOIN없이 조회가 가능해 단순 조히에 유리할 수 있지만, 이래 키의 크기가 커져 공간을 낭비하고 인덱스 단편화로 쓰기 성능을 저하시키는 단점이 있음 - 대리 키는 추가적인
JOIN이 발생할 수 있으나, 외래 키 크기가 작아 효율적이고 순차적으로 값이 증가하여 쓰기 성능이 매우 뛰어남 - 성능 관점에서도 데이터 모델의 안정성, 유연성, 쓰기 성능의 이점이 더 크기 때문에 대부분 대리 키를 기본 키로 선택
현대 적인 설계
- 대리 키 사용을 강력하게 권장
- 데이터 식별자를 비즈니스 로직으로부터 완전히 분리하여 느슨한 결합을 유지하기 위함
복합 키 설계
- 복합 키(Composite Key)는 두 개 이상의 컬럼을 묶어서 하나의 기본 키로 사용하는 것
- 자연 키를 복합키로 사용하면 변경 가능성, 외래 키 참조의 복잡성 및 크기 증가, ORM 사용의 어려움 등 여러 문제가 발생
- 대리 키를 기본 키로 사용하고, 비즈니스적 유일성이 필요한 복합 컬럼들에는
UNIQUE제약조건을 설정하는 것이 좋음
다대다 관계와 복합키
- M:N 관계는 두 테이블을 직접 연결할 수 없어, 중간에 연결 테이블을 만들어 해소함
- 두 테이블의 외래 키를 묶은 복합 키로 사용하면 복합 키의 단점을 그대로 가짐
- 권장되는 방식은 연결 테이블에도 별도의 대리 키를 만들고, 두 외래 키의 조합에는 복합
UNIQUE제약조건을 설정하는 것
💡 간단 요약
- 대리 키:
PK- 자연 키:
UNIQUE사실 상 표준
참고
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.