한 명의 학생은 여러 수업에 참가할 수 있다. (1:M)
하나의 수업은 여러 학생을 수용 할 수 있다. (1:M)
Question)
1. M:M(다대다)관계인 경우 두 개의 엔티티 사이에 관계 엔티티를 만들어서 다시 모델링을 하는 이유는 무엇인가?
2. 관계 엔티티를 만들지 않고 두 개의 엔티티만 만들어 놓으면 안 되는 이유는?
학생과 수업의 관계를 보면 논리적으로는 문제가 없는 것처럼 보일 수 있다.
하지만 여기에는 치명적인 문제가 있다.
학생테이블에 철수와 미나가 존재하고 철수는 파이썬과 자바 수업 2개를 수강 중이고 미나는 파이썬 수업 하나만 수강 중이라고 가정해보자.
수업 테이블에서 파이썬 수업의 경우는 철수와 미나 두명의 학생을 포함하고 있기 때문에 파이썬 수업 코드가 중복이 발생하게 되는 문제점이 생긴다. (현실세계에서는 파이썬 수업에 학생들이 여러 명 참여할 수 있는데 데이터 베이스상 PK인 수업 코드는 오직 하나만 존재해야 하므로 문제가 발생된다.)
그러므로 제2 정규형에 위배되기 때문에 아래와 같이 관계 엔티티를 만들어서 정규화를 해준다.
현실세계에서 봤을 때 이것이 논리적으로 맞다고 생각해서 데이터 모델링을 하게 되는데 실제로 물리적인 테이블을 설계하고 데이터를 관리하게 되면 현실세계와 DB상의 불일치가 일어나는 경우가 있다.
이런 경우를 방지하기 위해서 TDD 방법론을 따와서 테스트 DB를 작성하면 좀 더 시간을 아낄 수 있지 않나 생각한다.
'데이터베이스' 카테고리의 다른 글
GROUP BY (0) | 2022.02.22 |
---|---|
식별자의 정의와 키의 종류 (0) | 2021.06.21 |
대량 데이터에 따른 성능 관리 (0) | 2021.03.22 |
정규화 (0) | 2021.03.22 |
트랜잭션 (0) | 2021.03.19 |