작성
·
473
2
안녕하세요, 강사님.
모든 테이블에서 기본키값은 시퀸스를 사용하는 것을 추천 해 주셨었는데, order_item 같은 경우 order와 item이 있어야만 의미가 있는 테이블로 볼 수도 있을 것 같은데(약한 개체?), 그렇다면 order와 item에서 시퀀스로 생성된 id를 order_item 테이블의 기본키로 잡아도 문제가 없나요?
즉 약한개체? 가 될 수 있기때문에 order_item의 기본키를 (order_id, item_id) 이나 order_id 또는 item_id를 가져도 설계상 문제가 없는지, 없다면 그냥 편의상 모두 스퀀스를 사용해서 기본키를 잡는건가요?
답변 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 다대다 부분을 참고해주세요^^
감사합니다.
감사합니다.!