목차
1. 정규화란 무엇일까?
2. 정규화의 장단점
정규화란 무엇일까?
정규화란 이상현상이 있는 테이블을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 테이블을 분해하여 여러 개의 테이블을 생성하게 된다. 이를 구분하여 정규형이 높아질수록 이상현상은 줄어들게 된다. 즉, 쉽게 말하면 테이블 간에 중복된 데이터를 허용하지 않는다는 것이다. 중복된 데이터를 허용하지 않음으로써 무결성를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다. 이러한 테이블을 분해하는 정규화 단계가 정의되어 있다.
이상 종류
이상 종류란 정규화를 거치지 않은 데이터에서 발생할 수 있는 현상을 말한다.
- 삽입 이상 : 데이터 삽입 시 의도와 다른 값들도 삽입
- 삭제 이상 : 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제
- 갱신 이상 : 속성값 갱신 시 일부 튜플만 갱신되어 모순 발
제1 정규화
제1 정규화란 테이블의 컬럼이 원자값을 갖도록 테이블을 분해하는 것이다.
제1 정규화는 다음과 같은 규칙을 만족해야 한다.
- 컬럼이 하나의 속성만을 가져야한다.
- 하나의 컬럼은 같은 종류나 타입의 값을 가져야한다.
- 각 컬럼의 유일한 이름을 가져야한다.
- 컬럼의 순서가 상관없어야한다.
제2 정규화
제2 정규화란 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다. 여기서 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미한다.
제2 정규화는 다음과 같은 규칙을 만족해야 한다.
- 제1 정규화를 만족해야 한다.
- 모든 컬럼이 부분적 종속이 없어야한다. 모든 컬럼이 완전 함수 종속을 만족해야 한다.
제3 정규화
제3 정규화란 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다. 여기서 이행적 종속이라는 것은 A -> B, B -> C가 성립할 때 A -> C가 성립한다는 것을 의미한다.
제3 정규화는 다음과 같은 규칙을 만족해야 한다.
- 제2 정규화를 만족해야 한다.
- 기본키를 제외한 속성들 간의 이행 종속성이 없어야 한다.
BCNF
BCNF는 제3 정규화를 조금 더 강화한 버전이다. 이는 제3 정규화에서 해결할 수 없는 이상현상을 해결할 수 있다. BCNF란 제3 정규화를 만족하면서 모든 결정자가 후보키 집합에 속한 정규형이다.
BCNF는 다음과 같은 규칙을 만족해야 한다.
- 제3 정규화를 만족해야 한다.
- 모든 결정자가 후보키 집합에 속해야 한다.
정규화의 장단점
장점
- 데이터베이스 변경 시 이상현상을 제거할 수 있다.
- 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.
- 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킨다.
단점
- 테이블의 분해로 인해 테이블 간의 JOIN연산이 많아진다.
- 질의에 대한 응답 시간이 느려질 수도 있다. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다.
- 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있다.
- JOIN이 많이 발생할여 성능 저하가 나타나면 반정규화를 적용할 수도 있다.
'DB' 카테고리의 다른 글
JOIN에 대해 알아보자. (0) | 2024.04.06 |
---|