데이터 정규화
- 데이터 베이스 정규화에 관련하여 설명을 기재한다.
데이터 정규화란?
- 이상현상이 발생하는 릴레이션(테이블)을 분해하여 이상현상을 제거하는 과정이다.
- 데이터 중복을 최소화하고 데이터 무결성을 위해 테이블을 구조화 하는 것이다.
- 정규화에는 단계가 존재하며, 높은 단계를 갈 수록 제약 조건 상승과 이상 현상이 줄어들게 된다.
정규화의 장점
- 중복 최소화를 통한 저장 공간 절약이 가능며, 무결성 유지가 보다 용이하다.
- 데이터 베이스 테이블 모델이 명확해지며, 효율적인 쿼리 작성이 가능하다.
정규화의 단점
- 테이블이 분해되어 저장 되기 때문에 Join 연산 시 여러 테이블을 조회하기 때문에 성능 저하가 발생할 수 있다.
- 특히, 읽기 작업이 빈번할 경우 문제가 될 수 있다.
- 설계 및 유지 보수에 있어 복잡성이 매우 증가된다.
기능에 맞게 알맞은 방법 선택이 필요
- 성능 요구 사항, 데이터 접근 패턴, 시스템의 특성 등 여러 요소를 검토하고 종합하여 정규화를 진행해야 한다.
제 1 정규형 (1NF)
- 각 컬럼이 하나의 속성만을 가져야 한다.
- 하나의 컬럼은 같은 종류나 타입(type)의 값을 가져야 한다.
- 각 컬럼이 유일한 (unique) 이름을 가져야 한다.
- 칼럼의 순서가 상관없어야 한다.
- {과목} 컬럼에 자바, C++ 값이 들어갔기 때문에 위 규칙을 위반하게 되므로 제 1 정규형이 될 수 없다.
제 2 정규형 (2NF)
- 제 1 정규형을 만족해야 한다.
- 모든 컬럼이 부분적 종속이 없어야 한다.
기본 키는 {학생번호, 과목}으로 복합키로 지정한다고 가정해보자.
- 여기서 {성적} 값을 알려면 {학생번호, 과목}을 통해 값을 도출할 수 있다.
- 다시 말해 기본 키인 {학생 번호, 과목}에 완전 종속 된다.
- 하지만 {지도 교수} 컬럼은 {과목}만 알면 {지도 교수} 값을 알 수가 있다.
- 즉, {지도 교수} 컬럼은 {과목} 컬럼에만 종속 되므로, 부분적 종속에 해당되기 때문에 제 2 정규형 규칙에 위반된다.
- 이와 같이 중복 되는 컬럼인 {지도 교수} 컬럼을 제거하여, 별도의 테이블 생성하여 분해 시켜준다.
제 3 정규형 (3NF)
- 제 2 정규형을 만족해야 한다.
- 기본 키를 제외한 속성들 간의 이행 종속성이 없어야 한다.
이행 종속성이란?
- A -> B, B -> C 일 때 A -> C 가 성립되면 이행 종속성이다.
- 위 테이블을 보면, Id -> 등급, 등급 -> 할인율, Id -> 할인율을 알 수 있다. 즉, 이행종속성이 성립 되는 것이다.
- 이 같이 분해하여, 적용한다면 제 3 정규형이 되는 것이다.
- BCNF 정규형은 아래 규칙을 만족해야 한다.
- 제 3 정규형을 만족해야 한다.
- 후보 키를 제외한 모든 컬럼이 결정자가 되어서는 안된다.
- 즉, 모든 결정자는 후보 키 집합에 속해야 한다.
{학생 번호, 과목} 을 기본 키로 둔다고 가정해보자.
- 여기서 {과목}이 같더라도, {교수} 값이 다르다. 즉, {과목}은 {교수} 컬럼에 종속되지 않는다.
- 반대로 {교수}가 {과목}에 종속되기 때문에 규칙을 위반하게 된다.
- 쉽게 말해, {교수}는 후보 키가 아닌데 결정자가 됐기 때문이다.
- 위 테이블 처럼 분리하여 적용하면 BCNF를 만족한 상태가 된다.
제 4 정규형 이상 ~
- 보통 정규화는 BCNF 까지만 하는 경우가 많은데 그이유는 그 이상 정규화를 하면 정규화의 단점이 나타날 수도 있기 때문이다.
- 여기서는 제 4 정규형 이상을 다루지 않는다.