RDB 의 상속관계
관계형 DB는 상속관계 개념이 없으며 대신 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.
RDB 의 상속관계를 물리 모델로 구현하는 방법
@Inheritance(strategy=InheritanceType.XXX)
- 각각 테이블로 변환 -> 조인 전략 [JOINED]
슈퍼타입의 속성을 서브타입들이 상속받고 각자의 속성을 가지고 있는다.
# 장점
- 테이블 정규화
- 외래키 참조 무결성 제약조건 활용가능 : 슈퍼타입의 PK를 통해서 모두 조회 가능하다.
- 저장 공간이 효율적이다 // 정규화 덕분
# 단점
- 조회시 많은 조인을 사용하여 쿼리가 복잡 - 통합 테이블로 변환 -> 단일 테이블 전략 [SINGLE_TABLE]
# 장점
- 통합 테이블을 사용해서 조인이 필요없고 조회 쿼리가 단순해지며 성능이 빨라진다.
# 단점
- 자식 엔티티가 매핑한 컬럼중 연관이 없는 컬럼들에 대한 NULL을 모두 허용해야 한다.
- 테이블이 커질수 있다. - 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 [TABLE_PER_CLASS]
상위 클래스를 제거하고 하위 클래스들에 속성을 부여하는 전략
@DiscriminatorColumn(name=“DTYPE”)
상속을 받는 서브타입의 객체들을 구분하기 위한 어노태이션
번외 ]
@MappedSuperclass
단순히 모든 엔티티들이 공통으로 사용하는 속성들을 모아서 뿌려주는 역활을 한다.
이렇게 생성한 객체를 필요한 객체들이 상속받게 되면 persist 시에 알아서 SQL 문으로 컬럼들을
생성해준다.
상속관계의 엔티티는 @Entity 혹은 @MappedSuperclass 만 가능하다.
'JPA with 김영한' 카테고리의 다른 글
즉시로딩 과 지연로딩 (0) | 2021.09.10 |
---|---|
프록시(Proxy) (0) | 2021.09.09 |
다양한 연관관계 매핑 (0) | 2021.09.05 |
연관관계 매핑 (0) | 2021.09.04 |
엔티티 매핑 (0) | 2021.08.31 |