연관관계란?
두 개의 테이블(예: 학생, 수업)이 서로 어떤 방식으로 연결되어 있는지를 표현한 것
즉, "누가 무엇을 갖고 있는가", "어떤 관계가 있는가"를 말합니다
1 : N 연관관계 (가장 흔함)
개념
- 한 개체(1)가 여러 개체(N)와 관계를 맺는 구조
- 예: 한 명의 교수가 여러 개의 강의를 담당
✅ 단방향
- 한쪽에서만 관계를 알고 있어요.
- 예: 교수 테이블은 강의를 모르지만, 강의 테이블은 담당 교수를 알고 있음.
🔁 양방향
- 양쪽 테이블 모두 서로를 알고 있음
- 예: 교수도 어떤 강의인지 알고, 강의도 담당 교수가 누군지 앎.
1 : 1 연관관계
개념
- 한 개체가 다른 한 개체와 딱 하나의 관계만 맺음
- 예: 사람과 주민등록증 (한 사람은 한 주민등록증만 가짐)
✅ 단방향
- 한쪽만 상대방 정보를 가짐
🔁 양방향
- 양쪽 다 상대방을 알 수 있음
🔑 외래 키 사용
- 이 관계를 구현할 때 어느 테이블에 외래 키를 둘지 선택 필요
N : M 연관관계 (많이 헷갈림!)
개념
- 여러 개체가 여러 개체와 관계를 맺는 구조
- 예: 학생은 여러 강의를 듣고, 강의도 여러 학생이 들을 수 있음
💡 해결법: 중간 테이블(매핑 테이블) 생성!
- 예: 수강(student_id, course_id)
✅ 단방향, 양방향 가능
- 단방향: 학생이 수강하는 강의만 알 수 있음
- 양방향: 강의도 수강하는 학생을 알 수 있음
관계 흐름 이해 포인트
| Student ↔ Enrollment | 1:N | 한 학생은 여러 개 수강 가능 |
| Course ↔ Enrollment | 1:N | 한 강의는 여러 학생 수강 가능 |
| Enrollment ↔ Student, Course | N:1 | 수강정보는 한 학생/강의와 연결됨 |
중간에 Enrollment라는 다리 역할을 하는 엔티티가 있어서
→ 직접 Student ↔ Course가 연결되지 않고,
→ Student ↔ Enrollment ↔ Course로 관계가 형성
⚠️ 문제점
- 직접 구현할 때 중간 테이블을 잘못 만들면 데이터 중복이나 무결성 문제가 생길 수 있음