정규화(Normalization)
- 정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다
- 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다.
- 단계별로 구분하여 정규형이 높아질수록 이상현상을 줄어들게 된다.
장점
- 데이터베이스 변경 시 이상 현상을 제거할 수 있다.
- 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장시, 그 구조를 변경하지 않아도 되거나
일부만 변경해도 된다. - 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용 프로그램의 생명을 연장시킨다.
단점
- 릴레이션의 분해로 인해 릴레이션 간의 JOIN 연산이 많아진다.
- 질의에 대한 응답 시간이 느려질 수도 있다.
- 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로
한 테이블의 데이터 용량이 최소화되는 효과가 있다. 때문에 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있다.
- 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로
- 만약 조인이 많이 발생하여 성능 저하가 나타나면 반정규화를 적용할 수도 있다.
제 1정규형(1NF)
조건
- 각 칼럼이 하나의 속성만을 가져야 한다.
- 하나의 칼럼은 같은 종류나 타입의 값을 가져야 한다.
- 각 칼럼이 유일한 이름을 가져야 한다.
- 칼럼의 순서가 상관 없어야 한다.
위 예시를 보면 각 칼럼이 하나의 속성만을 가져야 하는 조건을 불만족 하므로 아래와 같이 분해해 주어야 한다.
제 2정규형(2NF)
조건
- 제 1정규형을 만족해야 한다.
- 모든 칼럼이 부분적 종속이 없어야 한다. -> 모든 칼럼이 완전 함수 종속을 만족해야 한다.
위 예시를 보면 지도교수 칼럼은 (학생번호, 과목)에 종속되지 않고 과목에만 종속이 되어 있는 부분적 종속이기 때문에
아래처럼 분해해 주어야 한다.
제 3정규형(3NF)
조건
- 제 2정규형을 만족해야 한다.
- 기본키를 제외한 속성들 간의 이행 종속성이 없어야 한다.
- 이행 종속성이란 A->B, B->C일 때 A->C가 성립하는 경우를 말한다.
위 예시를 보면 ID를 알면 등급을 알 수 있고, 등급을 알면 할인율을 알 수 있다. 따라서 ID를 알면 할인율을 알 수 있다.
이는 이행 족속성이기 때문에 아래와 같이 분해해 주어야 한다.
BCNF(Boyce-Codd Normal Form)
BCNF는 제 3정규형을 좀 더 강화한 버전으로 조건은 아래와 같다.
- 제 3정규형을 만족해야 한다.
- 모든 결정자가 후보키 집합에 속해야 한다.
- 후보키 집합에 없는 칼럼이 결정자가 되어서는 안된다는 뜻
위 예시를 보면 제 3정규형까지는 만족을 하는 테이블이다. (학생번호, 과목)이 기본키로 지도교수를 알 수 있다.
하지만 같은 과목을 여러 교수가 가르칠 수 있기 때문에 과목 -> 지도교수 종속은 성립하지 않고 그 반대의 경우
지도교수를 알면 과목을 알 수 있기 때문에 지도교수 -> 과목 종속은 성립한다.
이처럼 후보키 집합이 아닌 칼럼이 결정자가 되어버리기 때문에 BCNF를 만족하지 않으므로 아래와 같이 분해해 주어야 한다.
참고 블로그
'CS(Computer Science)' 카테고리의 다른 글
CS Study 8주차 : 교착상태(Dead Lock) (0) | 2023.01.06 |
---|---|
CS Study 7주차 : 트랜잭션(Transaction) (0) | 2022.12.22 |
CS Study 6주차 : B - tree /B + tree (0) | 2022.12.09 |
CS Study 6주차 : Hashing / 해시 테이블(Hash Table) (1) | 2022.12.09 |
CS Study 5주차 : Primary Index vs Secondary Index / Composite Index (0) | 2022.11.30 |