정규화
정규화란 이상 현상이 발생하지 않도록, 릴레이션을 분해하는 과정을 말한다. 데이터베이스 설계 또는 설계 결과를 검증하는 용도로 사용된다.
두 설계 방법 중 적절한 방법을 선택하자.
- E-R 모델과 릴레이션 변환 규칙
- 정규화
이상 (Anomaly)
데이터 중복이 발생하여 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산 시의 부작용을 말한다. 정규화 과정을 진행하면 이상 현상이 제거된다.
이상 현상의 종류
- 삽입 이상 : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
- 갱신 이상 : 중복 튜플 중 일부만 변경하여 데이터가 불일치되는 문제
- 삭제 이상 : 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 문제
결정자
하나의 릴레이션을 구성하는 속성들의 부분 집합을 X와 Y라고 하자. 어느 시점에서든 X값에 대한 Y값이 항상 하나면 "X가 Y를 함수적으로 결정한다" 또는 "Y는 X에 함수적 종속되어있다"라고 표현하며 X를 결정자, Y를 종속자라고 한다.
기본키 또는 후보키는 키의 특성(유일성)으로 다른 모든 속성을 함수적으로 결정한다. 하지만 기본키나 후보키만이 결정자가 되는 것은 아니며 키가 아닌 속성도 결정자가 될 수 있다. 당연하게도 결정자가 같으면 그와 연관된 종속자의 값은 같아야 한다.
가능하면 릴레이션에서 기본키와 후보키만이 결정자가 되도록 릴레이션을 분해하는 것이 정규화이다.
함수 종속에는 완전 함수 종속과 부분 함수 종속이 있다.
- 완전 함수 종속 : 속성 집합 Y가 속성 집합 X 전체에 종속되어 있음, X 집합 일부분에 종속된 것이 아님
- 부분 함수 종속 : 속성 집합 Y가 속성 집합 X 일부분에도 종속되어 있음
위 그림의 함수 종속 다이어그램을 보면 당첨여부는 완전 함수 종속되어 있으며, 고객이름은 부분 함수 종속되어 있다. 물론 고객 이름도 (고객 아이디, 이벤트 번호)에 종속되어 있다.
제 1 정규형
릴레이션에 속한 모든 속성은 원자 값을 가진다. 릴레이션은 모든 속성이 원자 값을 가져야만 한다.
제 2 정규형
릴레이션이 제 1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2 정규형에 속한다. 부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되도록 릴레이션을 분해하는 과정을 수행하면 제 2 정규형이 된다.
제 3 정규형
릴레이션이 제 2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3 정규형에 속한다. 이행적 함수 종속이란 3개의 속성 집합 X, Y, Z에 대해 함수 종속 관계 X → Y, Y → Z가 존재하면 논리적으로 X → Z가 성립하며, 이때 속성 집합 Z는 X에 이행적으로 함수 종속되었다고 한다.
기본키가 아닌 다른 속성이 결정자가 되면, 하나의 릴레이션에 종속 관계가 여러 개 생기게 되며, 이로 인해 이행적 함수 종속이 나타날 수 있다.
보이스/코드 정규형
BCNF(Boyce/Codd Normal Form)은 제 3 정규형보다 좀 더 엄격한 제약조건을 제시하며 강한 제3정규형이라고도 한다. BCNF를 만족하면 제3정규형에 속하기 때문이다. 반대로 제 3 정규형을 만족해도 BCNF를 만족하지 않는다.
릴레이션의 함수 종속 관계에서 후보키만이 결정자가 되면 BCNF에 속한다. 릴레이션은 후보키를 여러개 가질 수 있는데 이때 이상 현상을 방지하기 위해서는 BCNF가 되어야 한다.
'Computer Science > DataBase' 카테고리의 다른 글
Mysql 서브 쿼리 (0) | 2023.11.16 |
---|---|
MySQL Join (0) | 2023.11.16 |
[데이터베이스 - 9] 병행 제어 (0) | 2022.10.14 |
[데이터베이스 - 8] 장애와 회복 (0) | 2022.10.12 |
[데이터베이스 - 7] 트랜잭션 (0) | 2022.10.11 |