카테고리 없음

Spring 심화 2주차 정리(1) (테이블의 연관관계)

404NotFoundMe 2025. 4. 17. 10:46

 연관관계란?

두 개의 테이블(예: 학생, 수업)이 서로 어떤 방식으로 연결되어 있는지를 표현한 것
즉, "누가 무엇을 갖고 있는가", "어떤 관계가 있는가"를 말합니다


 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로 관계가 형성

⚠️ 문제점

  • 직접 구현할 때 중간 테이블을 잘못 만들면 데이터 중복이나 무결성 문제가 생길 수 있음