오늘은 M:N에 대한 고민을 해보았다.
우선 테이블의 연관 관계에 대해 알아보자.
RDB관점에서 테이블의 연관 관계는 1:1, 1:N, M:N관계가 있다.
이마트를 배경으로 에시를 들어보면
1:1 관계
이마트 상품 테이블과 상품 정보 테이블은 1:1 관계다.
상품 테이블은 하나의 상품 정보 테이블만 가질 수 있고, 마찬가지로 상품 정보 테이블 역시 하나의 상품 테이블만 가질 수 있기 때문이다.
N:1 관계
또한 이마트 회원 정보와 주문 정보 테이블은 1:N 관계로 볼 수 있다.
하나의 회원 정보는 여러 개의 주문 정보를 가질 수 있습니다. 반대로, 하나의 주문 정보는 하나의 회원 정보에만 속하기 때문이다.
M:N
마지막으로 이마트 상품과 주문 정보 테이블은 M:N 관계로 볼 수 있다.
하나의 상품은 여러 번 주문될 수 있으며, 하나의 주문은 여러 개의 상품을 포함할 수 있기때문이다. 하지만 실제로는 이를 구현하기 위해 중간 테이블을 두어 다대다 관계를 해소하는 것이 좋다.
그럼 마지막에서 말했듯이 왜 M:N을 사용하지 말고 중간 테이블을 통해 다대다 관계를 해소하는 것이 나을까??
나는 이에 대해 3가지 라고 생각했다.
첫번째로 data참조시 조회 쿼리를 어떻게 작성 할 지의 모호함이 문제이고,
두번 째로는 M:N의 관계에서 M과 N 값이 커질 경우 update나 delete를 할 때 자원 소모가 크다는 문제 점이 있다.
RDB를 사용하는 이유가 보안인데 해당 data가 접근할 수 있는 길이 많아진다(사실 잘 모르겠다. 인터넷에 너무 당연한 소리만 있어서 한번 새로운걸 생각해 보려고 했는데 잘 모르겠다.)