inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

실전 예제 1 - 요구사항 분석과 기본 매핑

order_item 테이블 설계시 기본키

571

우럭아왜우럭

작성한 질문수 18

2

안녕하세요, 강사님.

모든 테이블에서 기본키값은 시퀸스를 사용하는 것을 추천 해 주셨었는데, order_item 같은 경우 order와 item이 있어야만 의미가 있는 테이블로 볼 수도 있을 것 같은데(약한 개체?), 그렇다면 order와 item에서 시퀀스로 생성된 id를 order_item 테이블의 기본키로 잡아도 문제가 없나요?

즉 약한개체? 가 될 수 있기때문에 order_item의 기본키를 (order_id, item_id) 이나 order_id 또는 item_id를 가져도 설계상 문제가 없는지, 없다면 그냥 편의상 모두 스퀀스를 사용해서 기본키를 잡는건가요?

java JPA

답변 1

1

김영한

안녕하세요. 우럭아왜우럭님

이 경우 2가지 설계 방법이 있습니다.

OrderItem 테이블의 PK는 다음 2가지 방법이 있습니다.

1. order_id, item_id를 PK로 가지고 간다.

2. id를 새로 만들고 order_id, item_id를 유니크 제약조건으로 함께 잡는다. UNI(order_id, item_id)

각각 장단점이 있는데, 데이터베이스 관점에서 보면 성능은 둘이 동일합니다. 제약조건도 유니크제약조건이 있기 때문에 제약조건도 동일합니다.

2번은 id를 추가하는 단점이 있지만, PK가 order_id, item_id에 종속적이지 않기 때문에 혹시라도 비즈니스 요구사항이 변경되어서 PK에 영향을 주는 경우가 있어도 유연하게 대처가 가능합니다.

JPA 관점에서 보면 1번 방법을 사용하면 복합키용 PK 클래스를 별도로 만들어야하고 매핑이 복잡해지는 단점이 있습니다. 2번은 매핑이 매우 단순해집니다.

더 자세한 내용은 JPA책 6.4 다대다 부분을 참고해주세요^^

감사합니다.

0

우럭아왜우럭

감사합니다.!

실무 조언 관련 질문입니다.

0

36

1

H2데이터베이스 파일 생성

0

45

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

47

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

45

1

JPQL 메소드와 락

0

47

1

Delivery @OneToOne

0

54

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

84

2

UnsupportedOperationException 발생

0

80

3

H2 Database 연결이 안됩니다.

0

86

2

연관관계 매핑 질문드립니다.

0

77

2

h2데이터베이스 실행오류

0

103

2

persistence.xml

0

100

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

74

1

영속성 컨텍스트

0

59

1

JPA 프록시

0

86

1

Native Query와 MyBatis

0

60

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

81

1

임베디드 타입 예시 코드 관련 질문

0

110

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

89

3

인텔리제이 패키지 커서 단축키 질문

0

100

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

133

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

67

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1

데이터베이스가 초기화되는 것 같아요

1

172

2