다대다(M:N) 관계 테이블 구현하기(+ 식별관계, 비식별관계)

KEH·2021년 2월 13일
1

처음으로 테이블을 직접 설계해보면서 다대다(M:N)관계를 설계하는 방법에서 막혔었다. 따라서 오늘은 다대다 관계 테이블을 구현하는 방법에 대해 얘기할 것이다.

예를 들어 쇼핑몰 페이지에서 주문 과정을 살펴보자.
하나의 주문코드에는 여러 개의 상품이 담길 수 있다. 또 하나의 상품은 여러 개의 주문코드에 담길 수 있다.

ERD로 표현해보면 이런식으로 표현이 될텐데 ERD와 같이 두 개의 테이블만으로는 설계가 불가능하다. 실제로 설계할 때는 주문테이블과 상품테이블을 이어줄 수 있는 또 다른 테이블이 필요 하게 된다.

직접 테이블을 설계할 때는 다대다 관계의 테이블 사이에 하나의 테이블을 추가한 후, 일대다 관계 를 만들어 주면 된다.

여기서 눈치가 빠른 사람들은 두 사진의 선이 위에는 점선이고, 아래는 실선인 것을 확인할 수 있을 것이다. 저 선의 차이는 위에는 비식별 관계이고, 아래 사진은 식별 관계를 나타내고 있다.

비식별 관계부모테이블의 기본키가 자식테이블에서 외래키 역할만 하는 관계 를 말한다. 첫번째 사진에서 주문테이블의 기본키가 상품테이블의 외래키 역할만 하고, 상품테이블의 기본키가 주문테이블의 외래키 역할만 하기 때문에 둘은 비식별 관계이다. erd로 비식별 관계를 나타낼 땐 점선 을 사용한다.

식별 관계부모테이블의 기본키가 자식테이블에서 외래키 뿐만 아니라 기본키의 역할까지 하는 경우 를 말한다. 두번째 사진에서 주문테이블과 상품테이블의 자식테이블인 주문-상품 테이블의 기본키는 (주문코드, 상품코드)이다. 주문코드는 주문테이블의 기본키이고, 상품코드는 상품테이블의 기본키이므로 두 기본키가 주문-상품 테이블의 외래키이자 기본키의 역할을 맡고 있다. 이런 관계를 식별 관계라 하고 erd에서는 실선 으로 표현한다.

profile
개발을 즐기고 잘하고 싶은 안드로이드 개발자입니다 :P

1개의 댓글

comment-user-thumbnail
2022년 10월 20일

ERD 치니까 바로나오네요
좋은 정보 감사합니다

답글 달기