데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것
1 데이터 중복 제거 ( 테이블 분해 )
2 무결성 형성
3 DB 저장 용량 최소화
단 현업에서는 데이터의 과도한 조인과 데이터의 세부적인 변경사항 때문에 역정규화된 구조도 종종 사용한다.
데이터 중복 저장으로 발생하는 문제
신규 데이터 삽입을 위해서 불필요한 데이터를 입력
중복 데이터 변경 중 일부만 변경해 데이터 불일치 발생
삭제되면 안되는 데이터도 같이 삭제되는 경우
1N 전
1N 후
2N 전
여기서 기본키는 (학생번호, 강좌이름)으로 복합키이고 강의실을 결정하고 있다. 근데 기본키의 부분집합인 강좌이름에 의해서도 강의실이 결정될 수 있다. 그래서 분해가 필요하다.
2N 후
제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
이행적 종속이라는 것은 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것
이행적 종속이 있으면
501번 학생이 자료구조로 강의를 변경하면 수강료도 바꿔야하는 번거로움이 발생한다.
3N 전
3N 후
Boyce-Codd Normal Form
제3 정규화를 진행한 테이블에 대해 모든 결정자 (어떤 애트리뷰트의 값이 다른 애트리뷰트의 값을 고유하게 결정할 수 있음)가 후보키가 되도록 테이블을 분해하는 것
BCNF 전
BCNF 후
https://mangkyu.tistory.com/110
https://mr-dan.tistory.com/10
https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94
https://brownbears.tistory.com/542