혼합된 테이블 안에서 담당 사실이 반복됨
| 학번 | 과목 | 교수 |
|---|---|---|
| 1001 | DB | 이교수 |
| 1002 | DB | 이교수 |
| 1001 | OS | 최교수 |
같은 담당 사실:
이교수 → DB가 학생 1001, 1002 두 행에 걸쳐 반복됩니다.
그래서 교수-과목 정보가 학생 행의 생성·수정·삭제에 끌려다니고, BCNF 위반이 바로 삽입 이상·갱신 이상·삭제 이상으로 이어집니다.
교수 → 과목 사실이 독립 테이블이 아니라 수강 행 안에 중복 저장됩니다.
담당 정보가 별도로 분리되지 않아, 학생이 없으면 기록할 수 없고, 같은 교수가 여러 행에 나오면 바꿀 때마다 모두 수정해야 합니다.
| 학번 | 과목 | 교수 |
|---|---|---|
| 1001 | DB | 이교수 |
| 1002 | DB | 이교수 |
| 1001 | OS | 최교수 |
이교수 → DB가 학생 1001, 1002 두 행에 걸쳐 반복됩니다.
수강 사실은 학생이 생기거나 취소할 때 자연스럽게 변합니다.
이 사실은 학생 수와 무관해야 하지만, 지금은 수강 행이 있어야만 함께 남습니다.
원인은 하나지만, 행 수준에서는 기록 불가·중복 수정·정보 소실로 나타납니다.
| 이상 | 행 수준에서 실제로 벌어지는 일 | 결과 |
|---|---|---|
| 삽입 | 김교수가 AI를 담당한다는 사실만 기록하고 싶어도, 수강 행을 만들려면 학번이 필요합니다. | 수강 학생이 없으면 담당 사실을 저장할 수 없습니다. |
| 갱신 | 이교수의 담당 과목이 DB → ML로 바뀌면, 1001·1002 두 행을 모두 수정해야 합니다. | 한 행만 바뀌면 같은 교수의 담당 과목이 서로 달라져 불일치가 생깁니다. |
| 삭제 | 1001 학생이 OS 수강을 취소해 그 행을 지우면, 그 행에 같이 있던 최교수-OS 사실도 함께 사라집니다. | 수강 취소가 담당 정보 삭제로 번집니다. |