관계형 데이터베이스는 상속관계를 가지지 않는다.
다만, 슈퍼타입과 서브타입의 관계 모델링 기법은 객체의 상속관계와 유사하다. 이를 이용하여 객체의 상속 구조를 DB의 슈퍼타입과 서브타입으로 매핑하여 상속관계 이슈를 해결한다.
슈퍼타입과 서브타입 논리모델을 물리모델로 구현하는 방법
- 각각의 테이블로 변환하는 방법 → 조인전략
- 통합 테이블로 변환하는 방법 → 단일 테이블 전략
- 서브타입 테이블로 변환하는 방법 → 구현 클래스마다 테이블 전략
조인전략
- 조인전략은 다음과 같이 같은 PK를 두어 슈퍼타입과 서브타입을 구현한다. 다만, 이경우 DTYPE의 별도 컬럼을 두어 각 서브타입에 대한 구분자로 사용한다.
- 정규화 된 형태, 중복최소화
단일 테이블 전략
- 논리모델을 하나의 테이블에 합쳐 관리한다.
- 성능상으로 이점, 단순하다는 장점이있음.
구현 클래스마다 테이블을 생성하는 전략
JPA에서의 상속
- 주요 어노테이션
- @Inheritance(strategy=InheritanceType.XXX)
- JOINED : 조인 전략
- SINGLE_TABLE : 단일 테이블 전략
- TABLE_PER_CLASS : 클래스마다 테이블 생성 전략
- @DiscriminatorColumn(name="DTYPE")
- DTYPE default로 Entity명이 들어가게 된다.
- DTYPE을 설정하는 것이 좋다. 운영 시 어떤 부분에서 해당 쿼리가 적용되었는지 볼 수 있다.
- default값이 DTYPE이다.
- @DiscriminatorValue("XXX")
- 자식 엔티티에 선언하여, DTYPE에 들어갈 값을 지정할 수 있다.