Every entity in your database needs to have a single theme - Edgar F. Codd
정규화는 함수적 종속성의 특징에 따라 테이블을 분리해 나가 데이터 구조의 안정성을 최대화시키고, 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지한다. 따라서 모든 Entity는 하나의 주제로 구성되도록 구성되어야 한다.
제1 정규형 (1NF)
릴레이션에 속한 모든 도메인은 원자성을 가진다. 하지만 원자성이란 모호함을 구분하기 위해 크리스토퍼 데이트는 다음과 같은 1 정규형의 정의를 가진다.
- 열에는 위-아래의 순서가 없다.
- 행에는 좌-우의 순서가 없다.
- 중복되는 열이 없다.
- 모든 열과 행의 중복지점에는 (열과 행의) 해당되는 분야에서 한 개의 값을 가진다.
- 모든 행은 규칙적이다.
여기서 4번 항목이 설명하는, 속성에는 여러 개의 값을 가지면 안 된다는 특징이 1 정규형을 잘 나타낸다.
제2 정규형 (2NF)
복합 키로 이뤄진 관계에서 부분 함수적 종속성이 존재하는 경우 2NF를 만족하지 못하기 때문에 모든 속성들이 기본 키에 완전 함수적 종속성을 가지도록 테이블을 불리할 필요가 있다. 제2 정규형은 기본 키가 하나로 이뤄진 경우 발생하지 않는다.
제3 정규형 (3NF)
3 정규형은 기본키에 이행적으로 함수 종속되지 않도록 해야 한다. 즉, $ A \rightarrow B \rightarrow C $ 관계에서 $ A \rightarrow C $가 된 경우를 의미한다.
BCNF (Boyce-Codd NF)
테이블의 모든 결정자는 후보키인 테이블, BCNF는 강한 3NF 또는 3.5 정규형이라고 불린다.
$$ A, B \rightarrow C, C \rightarrow B $$
BCNF를 위배하는 상황은 후보키가 아닌 일반 속성이 결정자가 되는 경우를 의미하는데 위 식에서 결정자 $ A, B $가 $ C $를 결정하고 후보 키가 아닌 일반 속성인 $ C $가 $ B $를 결정하는 현상이다. 하지만 BCNF의 경우 흔히 일어나는 것이 아니지만 숙지할 필요는 있다.
제4 정규형 (4NF)
다치 종속(MVD, Multi value dependency)인 제4 정규형은 하나의 테이블에 기본 키 $ A $에 의해서 $ A \twoheadrightarrow B $ 와 $ A \twoheadrightarrow C $가 동시에 존재하는 경우를 의미한다. 따라서 두 관계를 분리할 필요가 있다.
제5 정규형 (5NF)
조인 종석은 무손실 분해 원칙에 위배되는 경우로 분해된 두 테이블을 JOIN을 수행한 경우 위조 튜플(또는 손실)이 발생하는 경우를 의미한다.
무손실 분해 원칙
앞서 분해한 테이블을 JOIN하면 원래 테이블이 가지고 있는 정보를 완전하게 얻을 수 있어야 한다. 즉, 손실도 추가도 없이 완전한 정보를 얻지 못하면 무손실 분해 원칙에 위배된다고 할 수 있다.
'독서 > 데이터베이스' 카테고리의 다른 글
함수적 종속성 (0) | 2022.01.09 |
---|---|
SQL 메모 정리 [작성중] (0) | 2022.01.05 |
트랜잭션과 잠금 (0) | 2022.01.01 |
쿼리 작성 및 최적화 (0) | 2021.12.30 |
실행 계획 분석 (0) | 2021.12.29 |