[7장] 고급 매핑

7-1. 상속 관계 매핑

  • 관계형 DB에는 객체지향 언어의 "상속" 이라는 개념 X
  • 슈퍼타입/서브타입 관계가 객체 상속 개념과 유사
  • 각각의 테이블로 변환
    • 각각을 모두 테이블로 만들고, 조회시 JOIN 사용
    • JPA에서 조인 전략이라 부름
  • 통합 테이블로 변환
    • 테이블을 하나만 사용하여 통합
    • JPA에서 단일 테이블 전략이라 부름
  • 서브타입 테이블로 변환
    • 서브 타입마다 하나의 테이블을 만듬
    • JPA에서 구현 클래스마다 테이블 전략이라 부름

조인 전략

  • 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본키를 받아서 기본키 + 외래키로 사용하는 전략
  • 조회시 JOIN을 자주 사용
  • 객체는 타입으로 구분 가능 / 테이블은 타입의 개념이 X → 타입을 구분하는 칼럼 추가 필요
  • 테이블 정규화 / 저장공간 효율성의 장점
  • 조회시 JOIN 다수 사용으로 성능 저하 가능성 / 조회 쿼리의 복잡성 상승의 단점

단일 테이블  전략

  • 테이블 하나만 사용
  • 구분 컬럼으로 어떤 데이터가 저장되었는지 구분
  • 조회시 조인 미사용 → 일반적으로 가장 빠름
  • 자식 엔티티가 매핑한 칼럼은 모두 null을 허용해야함
  • 조회 쿼리가 단순
  • 구분 칼럼의 사용이 필수

구현 클래스마다 테이블 전략

  • 자식 엔티티 마다 테이블 생성
  • 일반적으로 추천 X
  • 서브 타입 구분 처리의 장점 / 조회시 UNION 사용으로 성능이 느린 단점

7-2. 복합 키와 식별 관계 매핑

식별 관계 vs 비식별 관계

  • 식별 관계: 부모 테이블의 기본 키를 자식 테이블의 기본키 + 외래키로 사용하는 관계
  • 비식별 관계: 부모 테이블의 기본키를 받아서 자식 테이블의 외래키로만 사용하는 관계
    • 외래키에 null 허용 여부에 따라 필수적 비식별과 선택적 비식별로 나뉨
      • 필수적 비식별 관계: 외래 키에 NULL 허용 X, 연관관계 필수
      • 선택적 비식별 관계: 외래 키에 NULL 허용, 연관관계를 맺을지 말지 선택 가능
    • 비식별 관계를 주로 사용/ 꼭 필요한 곳에만 식별 관계 사용

'책 스터디 정리 > JPA ORM 스터디' 카테고리의 다른 글

[6장] 다양한 연관관계 매핑  (0) 2023.05.02
[5장] 연관관계 매핑 기초  (0) 2023.04.25
[4장] 엔티티 매핑  (0) 2023.04.18
[3장] 영속성 관리  (0) 2023.04.11
[1장] JPA 소개  (0) 2023.04.04