<ERD 예시자료>
ERD 예시자료를 통해 배울 수 있는 수많은 관계가 존재합니다.
따라서 다음 질문들을 통해 엔터티간의 관계를 깊이 이해해보고자 합니다.
예시자료에서는 하나의 행사에 여러 연사자를 포함하는 관계를 가집니다. 하지만 한 연사자는 반드시 하나의 행사에 참여하는 관계입니다. 여기서 하나의 행사가 여러 연사자를 포함하며 반대로 한 연사자가 여러 행사에 포함되는 관계라고 가정해봅시다. 다음의 관계는 우리는 N대N 다대다 관계라고 부릅니다. 이 다대다 관계를 모델에서 어떤 형식으로 저장하는지를 살펴봅시다.
위의 사진처럼 다대다 관계로 모델을 만들었을 경우 연사자 엔터티와 행사엔터티 안에 같은 PK를 가진 연사자, 행사가 나오게 됩니다. 즉 다른 연사자와 구분할 수 있게 고유한 값을 가지는 PK의 의미가 사라집니다. 이러한 현상은 데이터의 무결성(data integrity)이 지켜지지 않아서 발생하는 문제입니다.
다음의 문제를 해결하는 방법은 N대M 관계 안에 새로운 엔터티를 만들어 일대다 관계 2개로 나누는 방법입니다. 즉 연관 엔터티(relation entity)를 만드는 것입니다.
위의 사진을 보면 연사자 엔터티와 행사 엔터티 사이에 연사자-행사 엔터티라는 새로운 연관 엔터티를 추가했습니다. 다음의 연관 엔터티를 추가했을 때 각각의 저장형태를 살펴보겠습니다.
※ 연관 엔터티(테이블)의 경우 각 행의 값(value)이 달라 구분이 될 수 있다면 PK를 필수적으로 사용하지는 않습니다.
※ 강연주제는 연사자 엔터티 안에 계속 남아있다면 데이터의 무결성이 지켜지지 않게 됩니다. 같은 연사자엔터티 안의 2개의 강연주제가 발생하는 경우가 생기기 때문입니다. 그럼 행사 엔터티에 넣으면 괜찮을까요? 개인적으로 같은 행사 안에서도 강연주제는 달라질 수 있다는 가정이 있었습니다. 같은 행사일때 강연주제가 동일하다면 행사 엔터티에 넣는 것도 좋은 방법입니다. 하지만 위의 가정으로 강연주제를 연관 엔터티 안의 하나의 키(key)값으로 설정했습니다. 최종적으로 연사자와 행사 FK를 받는 연관 엔터티가 만들어졌습니다.