테이블 간 연관관계의 3종류의 예시를 간단하게 들어보면,
- 1:1 한 학생은 고유한 학번을 가진다.
- 1:N 하나의 학과에는 여러 학생이 소속될 수 있다. 한 명의 학생은 하나의 학과(주전공)에 소속된다.
- N:M 한 학생은 여러 개의 과목을 수강할 수 있고, 하나의 과목은 여러 명의 학생들에 의해 수강된다.
그러면 M:N을 쓰면 안 되는 이유는 무엇일까?
1. 하나의 컬럼에 리스트로 넣을 수 없고 학생 수만큼 컬럼 수를 늘릴 수도 없음 => 속성의 원자성 위반
PK | 과목명 | FK_학생 |
0011 | 알고리즘 | 001, 002, 003 |
0022 | 자료구조 | |
0033 | 운영체제 |
PK | 학생명 | FK_수강과목 |
001 | 우채윤 | |
002 | 오수연 | |
003 | 윤재욱 |
2. 삭제 수정 시(Delete, Update) 서로가 서로를 참조하고 있기에 두 테이블을 모두 변경해야 한다.
ex) 학생을 삭제하려고 하면 학생이 수강하는 과목 테이블에도 변경이 이루어진다.
해결책?
PK | FK_학생 | FK_수강과목 |
1 | 001 | 0022 |
2 | 002 | 0022 |
3 | 003 | 0022 |
각 테이블의 기본키를 매핑해서 NEW 테이블을 생성하자!
'프레임워크(Framework) > Spring' 카테고리의 다른 글
그래서 예외 처리를 어디서 해야 할까? (1) | 2024.07.24 |
---|---|
DTO는 왜? 언제 사용할까? (0) | 2024.07.22 |
Setter 왜 쓰는지 알고 사용하자! (0) | 2024.07.20 |
@Comonent? @ComponentScan? @Autowired? (0) | 2024.07.17 |
스프링 Core? (1) | 2024.07.16 |