외래키가 있는 곳을 연관관계의 주인으로 정하는 것이 좋음
연관관계의 주인 쪽에 값을 세팅, 반대편은 값 조회만 수행
연관관계의 주인은 단순히 외래키를 누가 관리하냐의 문제
예를 들어 자동차와 바퀴가 있을 때, 자동차를 연관관계의 주인으로 정하면 자동차가 관리하지 않는 바퀴 테이블의 외래 키 값이 업데이트됨
FK
의 등록 및 수정을 관리mappedBy
옵션을 사용하지 않음mappedBy
옵션을 사용하여 관계의 주인을 명시FK
가 양쪽 다 가지고 있다고 하더라도 단방향 매핑으로 충분함Student table
학번 | 이름 |
---|---|
1 | 김씨 |
2 | 이씨 |
Class Table
과목코드 | 과목명 |
---|---|
C1 | Java |
C2 | C++ |
C3 | Python |
김씨
가 C1, C2
를 수강하고, 이씨
가 C2, C3
를 수강한다고 가정Student table
학번 | 이름 | 과목코드 |
---|---|---|
1 | 김씨 | C1 |
1 | 김씨 | C2 |
2 | 이씨 | C2 |
2 | 이씨 | C3 |
Class Table
과목코드 | 과목명 | 수강학생 |
---|---|---|
C1 | Java | 1 |
C2 | C++ | 1 |
C2 | C++ | 2 |
C3 | Python | 2 |
PK
가 없어짐1번
인 학생의 수강 과목을 확인하기 위해선 Student table
를 확인하거나, Class table
을 확인하면 되기 때문에 조회가 애매해짐수강신청 테이블
을 학생과 과목 테이블 사이에 추가해서 관계를 풀어내야 함Student table
학번 | 이름 |
---|---|
1 | 김씨 |
2 | 이씨 |
| 1:N
수강신청 table
수강번호 | 학번 | 과목코드 |
---|---|---|
1 | 1 | C1 |
2 | 1 | C2 |
3 | 2 | C2 |
4 | 2 | C3 |
| M:1
Class Table
과목코드 | 과목명 |
---|---|
C1 | Java |
C2 | C++ |
C3 | Python |
정리가 잘 된 글이네요. 도움이 됐습니다.