- 제 1 정규화
- 원자값이 아닌 도메인 분해
- 제 2 정규화
- 부분적 함수 종속 제거
- 제 3 정규화
- 이행적 함수 종속 제거
- BNCF 정규화
- 결정자이면서 후보키가 아닌 것 제거
정규화 등장 배경
- 한 릴레이션에서 여러 엔티티의 애트리뷰트들을 혼합하면, 갱신 이상이 발생할 수 있다.
- 갱신 이상 : 중복된 정보들을 한 릴레이션에는 변경하고, 다른 릴레이션에는 변경하지 않은 경우 어느 것이 정확한지 알 수 없게 된다.
- 갱신 이상 종류
- 삽입 이상 : 원하지 않는 자료가 삽입됨, 삽입하는데 자료가 부족해 삽입이 안됨
- 삭제 이상 : 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨
- 수정 이상 : 부정확 / 일부의 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어짐
정규화
- 데이터베이스 정규화를 통해, 테이블 간 중복 데이터를 허용하지 않고, 무결성 유지 / DB 저장 용량 감소를 목표로 한다.
- 정규화의 종류
- 제 1 정규화
- 테이블의 컬럼이 원자값(하나의 값)을 갖도록 한다
- 제 2 정규화
- 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것
- 위 테이블에서, 강의실은 강좌 이름에 의해 결정된다. → 완전 함수 종속
- 다음과 같이 분해해주자
- 제 3 정규화
- 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
- 이행적 종속: A→B, B->C가 성립할 때 A→C가 성립되는 것
- (학생 번호 → 강좌이름, 강좌이름 → 수강료) ⇒ 학생번호 → 수강료
- 다음과 같이 분해해주자
- BNCF 정규화(보이스-코드 정규화 )
- 제 3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는것
- 위 테이블에서 기본키는 (학생번호, 특강이름)이다.
- 여기서 기본키는 교수를 결정하고 있다.
- 또, 교수는 특강이름을 결정하고 있다.
- 즉, 후보키 집합에 속하지 않은 결정자가 존재하는 것이다
- BNCF를 만족하기 위해, 테이블을 다음과 같이 분리해준다.

→ 이렇게 짜면 제 1 정규화에 위배






Share article