대리키란 기존에 있던 식별자들 대신 추가로 생성한 식별자를 말한다.
대리키의 개념은 인조키를 포함하는 개념이며 테이블 설계 시 대리키 사용여부는 많은 영향을 끼칠수 있는 주제다.
보통 우리는 다대다 연관관계 설계 시 중간에 피벗테이블을 만들어 관리한다.
이때 대리키를 사용하는 것이 좋을까 사용하지 않는 것이 좋을까?
대리키를 사용 안 하는 경우 위와 같이 외래키들로 이루어진 복합키가 기본키가 된다.
부모 테이블의 기본키가 존재해야 자식 테이블의 기본키가 존재하는 구조이며 기존의 데이터를 재활용하는 것이기 때문에 데이터 포맷 또한 같다.
따라서 대리키 사용을 하지 않는다면 데이터 무결성을 보장을 수 있다는 것이 가장 큰 장점이다.
마냥 장점이 존재하지만은 않는다.
위 구조는 테이블 확장 시 복합키들을 모두 상속받아야한다는 단점이 존재한다.
예시의 테이블 TARGET_AUTU의 기본키는 복합키들을 상속받았기에 3개나 존재하는데 한눈에 봐도 복잡하다.
이를 해결하기 위해선 대리키를 사용하면 된다. 대리키를 사용한다면 위 구조는 위와 같이 변경된다.
전자의 테이블과 달리 한눈에 봐도 심플해졌다.
그렇다고 무조건 대리키 사용이 정답인 것은 아니다. 대리키 사용의 문제점은 자식 테이블의 데이터가 존재해도 부모 테이블의 데이터가 존재하지 않을 수 있기에 데이터 무결성을 보장받지 못한다.
따라서 비지니스 로직을 만들 때 해당 부분을 항상 염두해야 한다.
또한 무조건적으로 대리키를 만든다면 비지니스적인 의미가 퇴색될 수 있기 때문에 다른 의미로 가독성을 해칠 수 있다.
대리키를 사용여부에 대한 부분은 과거로부터 수많은 논쟁이 있었다.
각자의 장단점이 존재하고 정답이 없기에 우리는 상황에 맞추어 최선의 전략을 선택해 사용해야 할 것이다.
참고
'DB > JPA' 카테고리의 다른 글
MapStruct 참고 자료와 관련 이슈 (0) | 2022.02.05 |
---|---|
@Entity와 @Builder (0) | 2022.01.30 |