DB모델링을 하다 보면 자연스럽게 다대다 관계를 마주하게 된다.
이제는 습관적으로 테이블을 나누고 있지만, 그냥 써버리면 안되나? 라는 질문을 받았을 때 명확하게 답변하기 위해, 어떠한 대답을 해야할 지 생각해보았다.
테이블 간 연관관계
우선 다대다 관계에 대한 이야기를 하기에 앞서, 3가지의 연관관계를 대표적인 예시로 설명해 보려고 한다.
주문, 상품, 회원, 장바구니
- 일대일 (1 : 1)
- 주문(1) - 장바구니(1)
- 장바구니 하나는 주문 하나를 생성한다.
- 일대다 (1 : N)
- 유저(1) - 주문(N)
- 한 명의 유저가 여러개의 주문을 만들 수 있다.
- 다대다 (M : N)
- 주문(N) - 상품(M)
- 주문은 여러 상품을 담을 수 있고, 같은 상품도 여러 번 주문 될 수 있다.
다대다 관계 (M:N)
그래서 왜?
- 유지보수 및 확장성 떨어짐
- 연관된 정보들이 많아서 데이터의 삽입, 갱신, 삭제가 어렵다.
- 성능 이슈
- 연관 관계가 복잡해지면서, 조인을 할 때 쿼리 또한 더 복잡해짐.
- 이중 조회가 발생함
- 데이터 중복
- 데이터의 원자성을 해친다. PK가 중복될 수 있다.
결론! 그대로 쓰지말고, 분리하자~
'Spring' 카테고리의 다른 글
JPA (1) | 2024.07.29 |
---|---|
왜 DTO를 사용하는가? (1) | 2024.07.22 |
Gradle Dependecies (0) | 2024.07.19 |
스프링 빈과 주요 어노테이션 (0) | 2024.07.17 |
Web서버 vs WAS (1) | 2024.07.16 |