Sign In
Log

[데이터베이스] 정규화

K
Koa

제 1정규화

테이블의 컬럼(속성)이 원자값을 갖도록 테이블을 분해하는 것이다.
1.
각 컬럼이 하나의 속성만을 가져야 한다.
2.
하나의 컬럼은 같은 종류나 타입의 값을 가져야 한다.
3.
각 컬럼이 유일한 이름을 가져야 한다.
4.
컬럼의 순서가 상관없어야 한다.

제 1 정규화 예시

Before
나이
수강과목
14
C++
15
DB, OS
17
Python, JAVA
After
나이
수강과목
14
C++
15
DB
15
OS
17
Python
17
JAVA

제 2정규화

제 1정규화를 진행한 테이블에 대해, 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다.
(완전 함수 종속 => 키본키의 부분집합이 결정자가 되어서는 안 된다.)
1.
제 1정규화를 만족해야 한다.
2.
모든 컬럼이 부분적 종속이 없어야 한다.

제 2정규화 예시

Before
나이
수강과목
14
C++
15
DB
15
OS
17
Python
17
JAVA
After
나이
14
15
17
수강과목
C++
DB
OS
Python
JAVA

제 3정규화

제 2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다.
(이행적 종속 => A → B, B → C가 성립할 때, A → C가 성립되는 것)
1.
제 2정규화를 만족해야 한다.
2.
기본키를 제외한 속성들 간의 이행 종속성이 없어야 한다.

제 3정규화 예시

Before
학생코드 → ZIP
ZIP → Street, City, State
학생코드 → Street, City, State
아래 테이블은 위와 같이 이행적 종속이 성립한다.
이름
ZIP
Street
City
State
After
이름
ZIP
Street
City
State

BCNF(Boyee-Codd Normal Form)

제 3정규화 강화 버전, 제 3정규화에서의 이상현상 해결
1.
제 3정규화를 만족해야 한다.
2.
모든 결정자가 후보키 집합에 속해야 한다.

BCNF 예시

Before
[학생]
[과목]
교수
학점
1
AB
X
A
2
CD
Y
A
3
CD
Y
A
After
교수
AB
X
CD
Y
학점
1
AB
A
2
CD
A
3
CD
A

제 4정규화

1.
BCNF를 만족해야 한다.
2.
다치 종속이 없어야 한다.

다치종속

1.
A → B일 때, 하나의 A값에 여러 B가 존재하면 다치 종속성을 가진다하며 A ↠ B 로 표시한다.
2.
최소 3개의 컬럼이 존재한다.
3.
R(A, B, C)가 존재할 때, A와 B 사이에 다치 종속성이 있을 때, B와 C가 독립적이다.

제 4정규화 예시

Before
학생
과목
취미
A
자바
노래
A
C++
게임
B
OS
노래
B
DB
게임
학생 ↠ 과목
학생 ↠ 취미
로 다치 종속성을 가지지만, 과목과 취미는 각각 독립적이다.
After
학생
과목
A
자바
A
C++
B
OS
B
DB
학생
취미
A
노래
A
게임
B
노래
B
게임

제 5정규화(PJNF, Project Join Normal Form)

중복을 제거하기 위해 분해할 수 있는만큼 전부 분해한다.
1.
제 4정규화를 만족해야 한다.
2.
Join 종속성이 없어야 한다.
3.
Join 연산을 했을 때, 손실이 없어야 한다.

JOIN 종속성이 있다?

Relation A를 Relation B와 C로 분해했는데, B와 C를 Join했더니 그대로 A가 되었다.
Ko
Subscribe to 'koa'
Subscribe to my site to be the first to receive notifications and emails about the latest updates, including new posts.
Join Slashpage and subscribe to 'koa'!
Subscribe
👍