-
참고 - 권장하는 식별자 선택 전략스프링/스프링 DB 2편 - 데이터 접근 활용 기술 2024. 2. 13. 19:20
데이터베이스 기본 키는 다음 3가지 조건을 모두 만족해야 한다.
- null 값은 허용하지 않는다.
- 유일해야 한다.
- 변해선 안된다
테이블의 기본 키를 선택하는 전략은 크게 2가지가 있다.
자연 키(nature key)
- 비즈니스에 의미가 있는 키
- 예 : 주민등록번호, 이메일, 전화번호
대리 키(surrogate key)
- 비즈니스와 관련 없는 임의로 만들어진 키, 대체 키로도 불린다.
- 예: 오라클 시퀀스, auto_increment, identify, 키생성 테이블 사용
자연 키보다는 대리 키를 권장한다
자연 키와 대리 키는 일장 일단이 있지만 될 수 있으면 대리키의 사용을 권장한다.
예를 들어 자연 키인 전화번호를 기본 키로 선택한다면 그 번호가 유일할 수 있겠지만, 전화번호가 없을 수도 있고
전화번호가 변경될 수도 있어서, 기본 키로는 적합하지 않다.
문제는 주민등록번호같이 그럴듯하게 보이는 값이다.
이값은 null이 아니고 유일하며 변하지 않는다는 3가지의 조건을 모두 만족하는 것 같다.
하지만 현실과 비즈니스 규칙은 생각보다 쉽게 변해서 주민등록번호 조차도 여러 가지 이유로 변경될 수 있다.
비즈니스 환경은 언젠가 변한다.
회원 테이블에 주민등록번호가 기본 키로 잡혀있던 경우에 회원과 관련된 수많은 테이블에서 조인을 하기 위해
주민등록번호를 외래키로 가지고 있었고 심지어 자식의 자식 테이블까지 주민등록번호가 내려가 있었다.
문제는 정부정책의 변화로 법적으로 주민등록번호를 저장할 수 없게되면서 결국은 데이터베이스 테이블은 물론
수많은 어플리케이션 로직조차 수정했다.
만약 처음 설계할 때 부터 자연 키인 주민등록번호 대신 비즈니스와 관련이 없는 대리 키를 사용했다면 수정할 부분이 그렇게 많지는 않았을것이다.
기본 키의 조건을 현재는 물론이고 미래까지 충족시켜주는 자연 키를 찾기는 쉽지 않다.
대리 키는 비즈니스와 무관한 임의의 값이므로 요구사항이 변경되어도 기본 키가 변경되는 일은 드물다. 대리 키를 기본키로 사용하되 주민등록번호나 이 메일처럼 자연 키의 후보가 되는 컬럼들은 필요에 따라 유니크 인덱스를 설정해서 사용하는것을 권장한다.
참고로 JPA는 모든 엔티티에 일관된 방식으로 대리 키 사용을 권장한다.
'스프링 > 스프링 DB 2편 - 데이터 접근 활용 기술' 카테고리의 다른 글
데이터 접근 기술 - JPA (0) 2024.02.15 데이터 접근 기술 - 테스트 (1) 2024.02.14 데이터 접근 기술 - 스프링 JdbcTemplate (0) 2024.02.13