1.M:N 관계 해소 방법
관계엔티티타입은 프로젝트를 진행하는 도중 많이 발생되는 엔티티타입으로, 대부분 도출되지 않은 업무 규칙이 새롭게 발견되었거나 이력 관리와 같이 업무 규칙을 추가하는 작업에 의해 많이
도출된다. M:N관계의 3가지 해소방법에 대해서 정리해보자.
-관계 엔티티타입 분리
-주식별자 통합
-부모 엔티티타입에 속성 추가
기본적인 M:N관계 해소 방법 – 관계 엔티티타입 분리
엔티티타입의 관계를 도출하다 보면 상호간의 관계가 1:M, M:1로 되는경우가 있다.

위 그림은 한 한생이 여러 강의를 들을 수 있고 한 강의는 여러 학생을 수강 할 수 있음을 표현
하고있고 이를 통합한 표기가 오른쪽이다. 정보공학에서는 M:N의 규칙은 반드시 정보를
추적할 수 있도록 관계를 1:M관계로 해소시켜줘야 하는 원칙이 있다.
M:N관계는 풀어줘야 한다고만 언급했지 왜 풀어줘야 하는지에 대해서는 찾아보기 힘들었다.
이처럼 정보의 추적도 있지만 비즈니스 복잡도해소도 중요한 이유 중 하나인 것 같다.
가장기본적인 M:N 해소방법
예를들어 “한번에 납부할 때는 여러 개의 요금 고지서를 한꺼번에 납부할 수 있고, 또 다른 요금
고지서를 여러 번에 걸쳐 납부할 수 있다”는 업무 규칙이 존재할 때 다음과 같이 새로운 엔티티
타입(요금납부)을 생성해 해소 할수 있다.

PK에 의한 M:N 관계의 해소방법 – 주식별자 통합
M:N관계를 해소하면서 계속해서 분화되는 엔티티타입으로 인해 ERD가 복잡해지는 것을 막기 위해 PK를 사용하여 하나의 엔티티로 통합 할 수 있다.

이 방법은 ‘한 번 납부할 때 는 여러 개의 요금 고지서를 한 번에 납부할 수 있고 또 하나의
요금 고지서를 여러 번에 걸쳐 납부 할 수 있다’ 라는 업무규칙에 적용해보자.
먼저 하나의 요금 고지서를 여러 번에 걸쳐 납부한다는 업무 규칙은 요금에 대해 납부가 여러 개
올 수 있으므로 만족한다. 그러나 한 번 납부할 때 여러 개의 요금에 대해 납부할 수 있다는
규칙은 어찌되는가? 납부 엔티티타입에 PK가 납부번호와 요금납부순차번호로 되어 있는 것이
질문에 대한 답이 된다. 요금납부순차번호가 동일한 납부번호에 대해 요금고지만큼 증가하는
것을 대신 한다. 그러므로 한번의 납부로도 여러 개의 요금고지서에 대해 납부가 가능하게 된다.
하지만 속성이 많을 경우 데이터의 중복이 증가해 좋지 않고, 수정이 잦은 경우 여러 개의 로우
에 대해 작업이 발생하므로 좋지 않다.
속성에 의한 M:N 관계의 해소 방법 – 부모 엔티티타입에 속성 추가
만약 하나의 요금고지서에 대해 최대 두 번까지는 분할 납부가 가능하다는 업무 규칙이 있다면
별도의 엔티티타입이 분리될 필요 없이 다음 그림처럼 표현할 수 있다.

하나는 요금에 최대 두 번 까지 분할 납부가 가능한 업무규칙을 표현 한 것으로, 관계 엔티티타입을
사용하지 않고 표현한 방법이다. 이 같은 경우는 업무규칙이 변경되지 않는 곳에서 가능하다
하지만 변화에 유연하고 확장성을 고려해야 한다면 바람직한 방법은 아닌 듯 하다.
DB에서 모델링의 의미는 상당히 크다.
아~ 요즘 내부구조 변경요청으로 더 크게 와 닿고 있다.