728x90

정규화가 필요한 이유? - 이상현상 때문

데이터 삽입, 삭제 ,수정 연산을 사용할 때 생기는 부작용

갱신(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 정규형이 있지만 생략하겠다.

 

728x90

'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

+ Recent posts