정규화가 필요한 이유? - 이상현상 때문
데이터 삽입, 삭제 ,수정 연산을 사용할 때 생기는 부작용
갱신(UPDATE), 삽입(INSERT), 삭제(DELETE) 이상이 있다.
갱신 이상 : 중복된 행이 있을 때 모두 수정되지 않고 일부만 수정되어 데이터가 불일치하게 되는 현상
삭제 이상 : 일부만 삭제해야 하는데 꼭 필요한 데이터가 함께 삭제되는 연쇄 삭제가 발생하는 현상
삽입 이상 : 새로운 데이터를 추가할 때 불필요한 데이터도 함께 삽입되는 현상
- 정규화 : 이상 현상이 발생하지 않도록 테이블을 분해하는 과정 (최대한 중복을 제거)
제 1 정규형 : 모든 속성이 원자값을 가진다.
아래와 같은 테이블에서 inventory를 보면 하나의 값이 아닌 여러개의 값을 가진다. 이러면 1 정규형을 만족하지 못하는 상태이므로 다음과 같이 변경하면 된다.
id
|
age
|
inventory
|
1
|
20
|
검, 방패
|
2
|
21
|
검, 갑옷
|
3
|
22
|
방패, 갑옷
|
id
|
age
|
inventory
|
1
|
20
|
검
|
1
|
20
|
방패
|
2
|
21
|
검
|
2
|
21
|
갑옷
|
3
|
22
|
방패
|
3
|
22
|
갑옷
|
제 2 정규형 : 모든 속성이 기본키에 완전 함수 종속 되어야 한다.

위와 같은 그림을 보면 아이디가 기본키라고 할 때 할인율이 부분 함수 종속이기 때문에 2정규형을 만족하지 못한다. 함수 종속이란 X -> Y에서 Y가 하나인 경우 즉, X를 통해 얻을 수 있는 결과가 하나여야 함수 종속이라 할 수 있고, 부분 함수 종속이란 할인율처럼 아이디뿐만 아니라 멤버십등급도 할인율을 결정할 때 부분 함수 종속이라고 한다. 아래 테이블에서는 아이디가 외래키가 되고 멤버십 등급이 기본키가 되어 할인율을 결정하기 때문에 완전 함수 종속이라 할 수 있다.
제 3 정규형 : 2정규형을 만족하면서 이행적 함수 종속이 제거 되어야 한다.

위 테이블에서 아이디, 멤버십등급, 할인율의 관계를 보면 위 그림과 같은 형태로 나타나고, A가 B, C를 결정할 수 있는 형태가 되어버린다. 위 그림과 같은 경우를 이행적 함수 종속이라고 하며 이를 제거하여 A->B, B->C의 테이블로 분리하면 3정규화를 만족하는 형태가 된다.
BCNF(Boyce-Codd 정규화) : 모든 결정자가 후보키 집합에 속해야 한다.

위 그림과 같은 형태로 테이블이 형성될 때 모든 결정자가 후보키 집합에 속하지 않는다고 말한다. C가 B에의해 결정될 수 있으면서 발생되는 문제로써 이를 A->B, B->C 테이블로 분할하면 해결된다. 이 외에도 4 정규형, 5 정규형이 있지만 생략하겠다.
'Database' 카테고리의 다른 글
UNION (0) | 2023.05.11 |
---|---|
INDEX (0) | 2023.05.11 |
CREATE, DROP, ALTER (0) | 2023.05.10 |
SUBQUERY (0) | 2023.05.10 |
INSERT, DELETE, UPDATE (0) | 2023.05.10 |