개발 도서 읽기/자바 ORM 표준 JPA 프로그래밍
[7장] 7.3.6 식별, 비식별 관계의 장단점
nnhhmm
2024. 11. 19. 19:07
데이터베이스 설계 관점에서 보면 식별관계보다 비식별 관계를 선호한다.
- 식별관계는 부모테이블에서 자식테이블로 가면서 기본키 컬럼이 점점 늘어난다.
결국 조인할 때 SQL이 복잡해지고 기본 키 인덱스가 불필요하게 커질 수 있다. - 식별 관계는 2개 이상의 컬럼을 합해서 복합 기본 키를 만들어야 하는 경우가 많다.
- 식별관계를 사용할때 기본 키로 비즈니스 의미가 있는 자연 키 컬럼을 조합하는 경우가 많다.
반면 비식별 관계의 기본 키는 비즈니스와 전혀 상관없는 대리키를 주로 사용한다.
비즈니스 요구사항이 변하면 식별관계의 경우 변경하기 힘들어 진다. - 식별관계는 부모 테이블의 기본 키를 자식 테이블의 기본키로 사용하므로 테이블 구조가 유연하지 못하다.
객체 관계의 매핑 관점에서 비식별 관계를 선호하는 이유
- 일대일 관계를 제외하고 식별관계는 2개 이상의 컬럼을 묶은 복합 기본기를 사용한다
-> JPA에서 복합키는 별도의 복합 키 클래스를 만들어서 사용해야한다.
컬럼이 하나인 경우보다 많은 노력이 필요하다. - 비식별 관계의 기본 키는 주로 대리 키를 사용하는데 JPA는 @GeneratedValue처럼 대리키를
생성하기 위한 편리한 방법을 제공 한다.
ORM 신규 프로젝트 진행시 추천하는 방법은
비식별 관계를 사용하고 기본 키는 Long타입의 대리 키를 사용하는 것이다.
선택적 비식별관계보다는 필수적 비식별 관계를 사용하는 것이 좋은데, 선택적 비식별 관계는 NULL을 허용하므로 조인할 대에 외부 조인을 사용해야 한다. 반면에 필수적 관계는 NOT NULL로 항상 관계가 있다는 것을 보장하므로 내부조인만 사용해도 된다.