외래키가 있는 곳을 연관관계의 주인으로 정하는 것이 좋음
연관관계의 주인 쪽에 값을 세팅, 반대편은 값 조회만 수행
연관관계의 주인은 단순히 외래키를 누가 관리하냐의 문제
예를 들어 자동차와 바퀴가 있을 때, 자동차를 연관관계의 주인으로 정하면 자동차가 관리하지 않는 바퀴 테이블의 외래 키 값이 업데이트됨
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 |
정리가 잘 된 글이네요. 도움이 됐습니다.