무엇이 불편해지나
삽입 새 과목을 학생 없이 등록하기 어렵다.
삭제 마지막 행을 지우면 원치 않는 정보도 함께 사라진다.
갱신 중복된 값 중 일부만 바꾸면 데이터가 어긋난다.
학생, 과목, 수강 관계처럼 서로 다른 사실을 한 행에 묶어 저장하면 삽입·삭제·갱신이 서로 얽히고, 그 얽힘을 함수 종속으로 추적해 분해 방향을 정합니다.
저장·삭제·수정이 서로 묶여 흔들리는 증상
무엇이 불편해지나
삽입 새 과목을 학생 없이 등록하기 어렵다.
삭제 마지막 행을 지우면 원치 않는 정보도 함께 사라진다.
갱신 중복된 값 중 일부만 바꾸면 데이터가 어긋난다.
왜 생기나
한 행이 여러 사실을 동시에 대표해서, 한 번의 변경이 다른 주제까지 건드립니다.
즉, 하나의 테이블에 여러 엔티티가 섞여 있는 구조가 근본 원인입니다.
무엇이 무엇을 유일하게 결정하는지 보는 기준
무엇을 추적하나
X → Y 이면 X가 정해질 때 Y도 하나로 결정됩니다.
완전 FD {학번, 과목명} → 성적처럼 키 전체가 필요합니다.
부분 FD 학번 → 이름, 이행 FD 학번 → 학과 → 학과장처럼 중간 종속이 생기면 분해 신호입니다.
어디를 의심해야 하나
비키 속성이 키 일부에만 달라붙으면 2NF 위반 가능성이 큽니다.
비키 속성이 다시 다른 비키 속성을 결정하면 3NF 위반 지점이 드러납니다.
이상 현상을 줄이도록 테이블 경계를 다시 세우는 작업
무엇을 바꾸나
주제별로 테이블을 나누고 무손실 조인이 가능해야 합니다.
분해 뒤에도 중요한 함수 종속이 보존되어야 합니다.
실무에서는 보통 3NF까지를 기본선으로 삼습니다.
실무 해석
목표는 테이블 수를 늘리는 것이 아니라 데이터 무결성과 변경 일관성을 확보하는 것입니다.
성능이 문제일 때만 필요한 범위에서 반정규화를 검토합니다.