티스토리 뷰
반응형
상속 관계 매핑
관계형 데이터베이스에는 객체지향 언어에서 다루는 상속
이라는 개념이 없다.
대신에 슈퍼타입 서타타입 관계
라는 모델링 기업이 객체의 상속 개념과 가장 유사하다.
슈-서 논리 모델 테이블 구현
슈퍼타입-서브타입 논리 모델을 실제 모델인 테이블로 구현할 때는 3가지 방법이 있다.
각각의 테이블로 변환 (조인 테이블 전략)
- 각각을 모두 테이블로 만들고 조회할 때 조인을 사용한다.
통합 테이블로 변환 (단일 테이블 전략)
- 테이블을 하나만 사용해서 통합한다.
서브타입 테이블로 변환 (구현 클래스 테이블 전략)
- 서브 타입마다 하나의 테이블을 만든다.
1. 조인 테이블 전략(InheritanceType.JOINED)
엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키
로 사용하는 전략이다.
이러한 방식의 문제점은 객체는 타입으로 구분할 수 있지만 테이블은 타입의 개념이 없다.
이러한 문제는 DTYPE
컬럼을 구분 컬럼으로 사용한다.
장점
- 테이블의 정규화
- 외래 키 참조 무결성 제약조건을 활용할 수 있다.
- 저장공간을 효율적으로 사용한다.
단점
- 조회할 때 조인이 많이 사용되므로 성능이 저하될 수 있다.
- 조회 쿼리가 복잡하다.
- 데이터를 등록할
INSERT SQL
을 두번 실행한다.
2. 단일 테이블 전략(InheritanceType.SINGLE_TABLE)
가장 빠른 데이터 처리를 가지는 전략으로 구분 컬럼(DTYPE)으로 어떤 자식 데이터가 저장되어있는지 구분한다.
때문에 @DiscriminatorColumn
을 꼭 설정해야 한다.
장점
- 조인이 필요 없어 조회가 가장 빠르다.
- 단순한 조회 쿼리
단점
- 자식 엔티티가 매핑한 컬럼은 모두 null을 허용해야한다.
- 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다. 즉, 성능이 나빠질 수 있다.
3. 구현 클래스마다 테이블 전략(InheritanceType.TABLE_PER_CLASS)
자식 엔티티마다 테이블을 만드는 방법이다.
장점
- 서브 타입을 구분해서 처리할 결우 효과적이다.
- not null 제약 조건을 사용할 수 있다.
단점
- 여러 자식 테이블을 함께 조회할 떼 성능이 느리다.
- 자식 테이블을 통합헤서 쿼리하기 어렵다.
반응형
'JPA' 카테고리의 다른 글
ORM에서의 객체 연관 매핑 (0) | 2022.06.26 |
---|---|
준영속 상태의 지연 로딩 문제를 해결 (0) | 2022.06.25 |
프록시 (0) | 2022.05.14 |
임베디드 타입, 엔티티 타입 (0) | 2022.05.13 |
JPA 에서의 식별과 비식별 (0) | 2022.05.12 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바
- C언어
- docker
- 백준
- JPA
- 매트랩
- OOP
- 그래프
- Matlab
- interview
- springboot
- 릿코드
- security
- java
- nginx
- 자격증
- Algorithm
- 수학
- ajax
- 디자인패턴
- 알고리즘
- 스프링부트
- CS
- 프로그래머스
- spring-cloud
- Solid
- 면접
- 스프링
- Spring
- kakao
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함