연관관계 매핑 3
공부해 볼 내용
- 객체의 상속 관계를 어떻게 테이블에 매핑할 지! - 관계형 데이터베이스에는 상속관계가 존재하지 않아서
- 조인 전략
- 단일 테이블 전략
- 구현 클래스마다 테이블 전략
가정 상황
**Item 테이블을 상속받아야 하는 Movie테이블과 Clothes테이블이 있다고 가정 합니다.
주요 코드 및 Annotation
- @Inheritance(strategy=InheritanceType.XXX)
- XXX 부분에
- JOINED : 조인 전략
- SINGLE_TABLE : 단일 테이블 전략
- TABLE_PER_CLASS : 구현 클래스 마다 테이블
- XXX 부분에
- @DiscriminatorColumn(name=“DTYPE”)
Item 테이블에 DTYPE이라는 칼럼 생성- 생성 이유
DTYPE이라는 칼럼을 생성하는 이유는 Item테이블을 조회했을 때 어떤 테이블이 상속하였는지 확인하기 위해서 생성해놓는 것!
- 생성 이유
- @DiscriminatorValue(“XXX”)
Item 테이블의 DTYPE에 들어갈 value
즉 Book 테이블이면 "B", Clothes 테이블이면 "C"이런 식으로 지정해 놓고 확인 하는 용도 - 소스 코드
Item Entity
@Inheritence(strategy(InheritaceType.JOINED)
//@Inheritence(strategy(InheritaceType.SINGLE_TBLE)
//@Inheritence(strategy(InheritaceType.TABLE_PER_CLASS)
@DiscriminatorColumn(name=“DTYPE”)
public class Item{
@Id @GeneratedValue
@Column(name="item_id")
private Long id;
private int price;
}
Movie Entity
@DiscriminatorValue("M")
public class Movie extends Item{
private String movieName;
private String actor;
}
Clothes Entity
@DiscriminatorValue("C")
public class Clothes extends Item{
private String sorts;
}
조인 전략
상속받는 객체들을 각각 테이블로 만드는 전략. 상속 받는 객체들이 외래 키를 관리하게 되며 외래 키를 활용하여 서로 Join하며 참조 가능.
위 그림과 같은 테이블 형식!
- 장점
- 저장공간 효율화
- 외래 키 참조 무결성 제약조건 활용가능
즉, 자식 테이블의 값이 변경되면 부모 테이블도 제약이 따름
- 단점
- 조회시 조인을 많이 사용 -> 성능 저하!
- 데이터를 저장할 때 먼저 Item 테이블에 저장 후 상속받은 테이블에 저장 하여야 하므로 Insert SQL 을 2번 호출
- 정리 : 어느 정도 단점도 있지만 DB 설계상 봤을 때 가장 정규화된 전략!
단일 테이블 전략
상속 받는 객체들의 테이블을 따로 따로 만들지 말고 한 테이블에 모든 데이터를 몰아 넣는 전략.
위 그림과 같이 모든 데이터를 한 테이블이 갖게 됨.
- 장점
- 조인이 필요 없으므로 조회가 단순하며 성능이 더 좋음!
- 단점
- 자식 엔티티가매핑한 컬럼은 모두 null허용 : 테이블에 null이 많은 것은 좋지 않다.
- 단일 테이블에 모든 데이터를 몰아 넣으므로 테이블의 크기가 엄청나게 커질 수 도 있음. 이는 오히려 복잡해 질 수 있고 조회 성능도 join전략 때 보다 안좋아 질 수도 있음
- 정리 : Join전략과 장점과 단점이 바뀜. 가장 단순한 전략이지만 테이블이 너무 커질 수 도 있다는 단점을 가짐.
구현 클래스마다 테이블 전략
구현된 클래스 마다 전부 테이블을 만들어 관리
이 전략은 추천 X!!!
물론 한 클래스마다 하나의 테이블을 갖고 있으니 명확하게 처리 및 not null 제약 조건과 같은 것을 사용할 수 있습니다.
But, 외래 키가 없기 때문에 여러 자식 테이블을 함계 조회하기 어려움. 즉, 하나로 통합해서 사용하기 어렵다는 뜻.
이는 치명적인 단점!!
이상으로 포스팅을 마치겠습니다. 감사합니다 :)
이 글은 인프런 김영한님의 '자바 ORM 표준 JPA 프로그래밍 - 기본편'을 수강하고 작성합니다.
출처:https://www.inflearn.com/course/ORM-JPA-Basic
Author And Source
이 문제에 관하여(연관관계 매핑 3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sungjin0757/JPA-연관관계-매핑-3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)