본문 바로가기

Domain/데이터베이스

[데이터베이스] 정규화

정규화

관계형 데이터베이스의 설계에서 중복을 최소화하는 방식으로 일관성 훼손을 방지하여 데이터를 구조화하는 프로세스를 정규화라고 한다. 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다. 

 

설계가 잘못된 테이블의 예시

기본키(학번,과목번호)

위 테이블의 문제점은 아래와 같다.

  • 하나의 테이블에 여러 주제가 표현 -> 학생, 교수, 교과목
  • 여러 주제의 표현으로 인해 데이터 중복이 발생했다.
  • 수정 이상(갱신/삽입/삭제이상) 현상이 발생할 수 있다.

 

수정 이상

수정 이상이란 데이터의 갱신/삽입/삭제 과정에서 원치 않는 결과가 초래되는 현상을 의미한다.

 

갱신 이상은 데이터의 값을 변경하는 작업에 의해 생기는 이상 현상이다.

위처럼 홍병근 학생의 주소 변경 시 일부 행들만 변경되어 데이터의 일관성이 훼손되었다.

 

삽입 이상은 일부 원하는 주제만의 삽이이 불가능한 현상을 의미한다.

위와 같은 신규 교과목 정보만 단독으로 추가하고 싶은 상황이 존재하지만 현재 테이블에서는 학번이 기본키의 일부이므로 불가능하다.

 

삭제 이상은 하나의 레코드에 여러 주제가 포함되어 있는 상황에서 특정 레코드 삭제 시 원치 않는 주제가 손실되어 발생하는 현상을 의미한다.

위에서 김원일 학생이 경영 원론을 들은 유일한 수강생이고 해당 강의를 철회한다면, 경영 원론 강의에 대한 내용이 테이블에 남아있지 않게 된다.

 

 

함수적 종속성

정규화를 위해서는 함수적 종속성의 개념을 이해해야 한다. 함수적 종속성이란 속성들 사이의 종속 관계를 의미한다. 예를 들어, 현재 테이블에서는 (교수번호)가 연구실을 결정하고, (학번,과목번호)가 학점을 결정한다. 이와 같은 종속 관계를 함수적 종속성이라고 한다.


정규형

정규화 된 정도를 정규형이라 표현하는데, 정규형에는 1NF, 2NF, 3NF, BCNF, 4NF, 5NF, 6NF 까지 있다. 비공식적 표현으로는 3NF 가 되었으면 정규화 되었다고 말한다

 

제1 정규형(1NF)

릴레이션에 대한 모든 속성이 원자 값인 릴레이션을 의미한다.

좌측의 경우 제1 정규형을 만족하지 않는 릴레이션이다. 01001 학번의 레코드가 2개의 레코드로 다시 나누어지며 이는 원자 값이 아니다. 우측이 원자값으로 이루어져 제1 정규형을 만족하는 릴레이션이다.

 

 

제2 정규형(2NF)

1NF이며, 키에 속하지 않은 모든 속성들이 키에 완전 함수 종속인 릴레이션을 의미한다.

완전 함수 종속이란 함수적 종속성 X->Y가 속성 A에 대하여 (X-A)->Y가 성립하지 않으면 완전함수 종속이라고 표현한다. 반대로 설명하면 (X-A)->Y를 만족하는 A가 존재한다면 이를 부분 함수 종속이라 하고, 부분 함수 종속이 존재하면 완전 함수 종속이 아니다.

 

 

쉽게 설명해서 아래와 같은 관계는 부분 함수 종속이 존재하며 완전 함수 종속이 아니다.

위에서 기본키는 X:(학번, 과목번호)이다. 하지만, A를 학번이라 하면 (X-A):(과목번호)이며 (과목번호)는 과목명, 과목설명, 교수번호 등의 속성을 결정한다. 따라서, 부분 함수 종속이 존재하므로 완전 함수 종속을 만족하지 않는다.

 

위를 제2 정규형이 만족하도록 릴레이션을 분할한 결과는 아래와 같다.

좌측 릴레이션은 (학번,과목번호)가 학점을 결정하고 둘중 하나라도 존재하지 않는다면 결정하지 않아 완전 함수 종속이다. 그리고, [학번, 이름, 주소]로 이루어진 릴레이션은 (학번)이 이름과 주소를 결정하는 완전 함수 종속이다. 마지막으로 [과목번호,과목명,과목설명,교수번호,교수이름,연구실]에서 (과목번호)가 과목명,과목설명,교수번호,교수이름,연구실을 결정한다.

 

 

제3 정규형(3NF)

2NF이며 키가 아닌 모든 속성들은 기본 키에 이행적 종속되지 않는다.

이행적 종속이란 한 속성이 다른 두개의 속성에 의해 각각 종속되는 관계가 존재하는 것을 의미한다.

위에서 과목번호가 교수이름, 연구실을 결정하지만 교수번호가 교수이름, 연구실을 결정하기도 한다. 하지만, 실제 핵심적인건 교수번호가 교수이름, 연구실을 결정하는게 더 맞는 관계이다.

 

 

BCNF(Boyce-Codd Normal Form)

3NF이며 릴레이션의 모든 결정자가 후보키여야 한다.

이는 결정자이면서 후보키가 아닌 것을 제거해야 BCNF를 만족한다는 것을 의미한다.

위의 경우 기본적으로 (학번)이 후보키이며 학번이 전공과 교수번호를 결정하며, 교수번호가 전공을 결정한다. 따라서, 후보키는 학번이며 결정자는 학번과 교수번호이므로 이를 적절히 분해해야 한다.

후보키는 릴레이션의 다른 속성을 유일하게 구분짓는 속성을 의미한다.

 

아래는 BCNF를 만족하는 분할이다.