이번 포스팅에서는 데이터베이스 설계에서 매우 중요한 정규화의 개념과 정규화 과정에 대해 알아보겠습니다.
현실 세계를 데이터 논리 구조로 표현하는 관계 스키마 설계에는 몇 가지 원칙이 있습니다. 즉, 필요한 속성(Attribute), 개체(Entity), 관계성(Relationship)을 식별하여 릴레이션을 구성하고 불필요한 데이터의 중복이 발생하지 않도록 해야 하며, 속성 사이의 관계성과 데이터의 종속성을 고려해서 설계해야 합니다. 또한 효율적인 데이터 처리와 일관성 유지 방법 등도 고려해서 설계해야 하는 원칙이 있습니다.
정규화(Normalization)란 하나의 릴레이션에 하나의 의미만 존재할 수 있도록 릴레이션을 분해해 나가는 과정이라 할 수 있습니다. 정규화의 목적은 구성되는 모든 릴레이션이 중복되지 않게 효과적으로 데이터베이스 내에 표현이 가능하도록 하는 것이며 삽입, 삭제, 갱신 시 Anomaly 현상이 발생하지 않도록 하는 것입니다.
정규화를 함으로써 얻게 되는 효과는 자료의 저장 공간을 최소화하고 자료 불일치를 최소화하며 자료 구조를 안정화 시킴은 물론 이상( Anomaly) 현상을 방지하는 효과를 볼 수 있습니다.
정규화 과정은 제1정규형으로부터 제5 정규형까지의 과정이 있습니다.
그 과정을 하나의 표로 요약하자면 아래와 같습니다.
비정규형은 하나의 튜플에서 속성을 입력되는 도메인 값으로 여러 개의 값이 들어와서 원자성(Atomic)을 가지지 못한 경우입니다. 제1 정규형 과정을 통해 원자값이 아닌 도메인을 분해하여 어떤 릴레이션 R에 속한 모든 도메인이 원자값으로만 되어 있도록 설계합니다.
제1 정규형(First Normal Form : 1NF)을 예를 들어서 살펴보면 아래와 같습니다.
[비정규형 릴레이션]
회원번호 | 성명 | 연락처 |
001 | 이순신 | 010-1234-5678 031-123-4567 |
002 | 강감찬 | 010-1111-2222 |
003 | 을지문덕 | 02-111-2222 010-3333-3333 |
위 표를 살펴보면 연락처가 집전화번호와 휴대폰 번호로 되어 있는데 하나의 튜플에서 모든 도메인 값이 하나의 원자값만 가질 수 있도록 제1 정규형 과정을 거치면 아래와 같이 재구성할 수 있습니다.
[ 제1 정규형 릴레이션]
회원번호 | 성명 | 집전화 | 휴대폰 |
001 | 이순신 | 031-123-4567 | 010-1234-5678 |
002 | 강감찬 | - | 010-1111-2222 |
003 | 을지문덕 | 02-111-2222 | 010-3333-3333 |
제2 정규형(Second Normal Form : 2NF)은 어떤 릴레이션 R이 제1정규화에 속하고 기본키에 속하지 않는 모든 속성이 키본키에 완전 함수적 종속이면 충족하는 정규화입니다.
제2 정규형도 예를 들어서 살펴보겠습니다.
만일 학번과 과목 번호를 기본키로 가진 아래의 릴레이션이 있다면 제2정규화를 통해서 두 개의 릴레이션으로 분해할 수 있습니다.
기본키 | 학 년 | 성 적 | |
학번 | 과목번호 | ||
001 | A | 1 | 85 |
001 | B | 1 | 90 |
002 | A | 2 | 92 |
003 | B | 3 | 95 |
성적 속성은 복합 속성(학번, 과목 번호)으로 이루어진 기본 키에 완전 함수적 종속 관계를 이루어 키에 대해 만족할 만한 종속 관계를 유지하고 있지만 학년 속성은 기본 키의 구성 속성인 학번에만 부분적으로 종속 관계를 이루고 있기 때문에 아래와 같이 2개의 릴레이션으로 분해하여 기본키에 속하지 않는 모든 속성이 기본 키에 완전 함수적 종속 상태가 되도록 해야 합니다.
학 번 | 과목번호 | 성 적 |
001 | A | 85 |
001 | B | 90 |
002 | A | 92 |
003 | B | 95 |
학 번 | 학 년 |
001 | 1 |
001 | 1 |
002 | 2 |
003 | 3 |
성적(학번, 과목 번호, 성적) => 기본키 : {학번, 과목 번호}, 외래키 : {학번}
학년(학번, 학년) => 기본키 : 학번
제3 정규형(Third Normal Form : 3NF)은 어떤 릴레이션 R이 제2정규화에 있으며 기본키에 속하지 않는 모든 속성이 기본키에 이행적 함수 종속이 아닌 상태의 관계를 말합니다.
예를 들어서 살펴보겠습니다.
학 번 | 지도교수 | 학 과 |
위와 같은 릴레이션이 있을 때 학과는 학번에 함수적 종속 관계를 형성하고 있으면서 지도교수를 통해 이행적 함수 종속이 되고 있습니다. 즉, 학생이 지도교수가 소속될 학과를 선택한 것이 아니라 학생이 지도교수를 선택하면 지도교수는 자신이 소속될 학과를 선택함으로써 학생이 지도교수가 소속될 학과를 선택한 것처럼 보입니다. 따라서 이행적 함수 종속을 제거하여 제3 정규형으로 릴레이션을 분해하면 아래와 같습니다.
학번(기본키) | 지도교수(외래키) |
지도교수(기본키) | 학 과 |
보이스 코드 정규형(Boyce-Codd Normal Form : BCNF)은 릴레이션 R의 모든 결정자가 후보키이면 릴레이션 R은 Boyce-Codd 정규형에 속하는 상태를 말합니다. 즉, 비결정자에 의한 함수 종속 관계를 해결하는 것으로 모든 속성이 모든 후보키에 대해 만족할 만한 함수 종속 관계를 유지시키는 것을 말합니다.
예를 들어 살펴보겠습니다.
[학번 | 과목번호] | 교수번호 |
학생이 어떤 교수가 강의하는 과목을 수강하였는지를 나타내는 수강신청 릴레이션에서 기본키를 [학번, 과목 번호]로 정의하고 교수 번호 속성으로 구성하였을 때 [학번, 과목 번호] -> 교수 번호가 성립하고 교수 또한 여러 과목을 가르칠 수 있으므로 교수 번호 -> 과목 번호도 성립하게 됩니다. 이를 함수 종속 다이어그램으로 나타내면 아래와 같습니다.
교수 번호 속성이 후보키가 아니기 때문에 BCNF에 속하지 않게 되어 결국 2개의 릴레이션으로 분해하여 아래와 같이 설계할 수 있습니다.
학 번 | 교수번호(외래키) |
기본키 : {학번, 교수 번호}, 외래키 : 교수 번호
교수번호(기본키) | 과목번호 |
기본키 : 교수 번호
참고로 BCNF 정규형에 속하는 릴레이션은 모두 제3 정규형에 속하지만 역으로는 성립되지 않는다는 점도 기억해 두어야 할 중요한 포인트입니다.
이번 포스팅에서는 정규화 개념과 정규화 과정의 보이스 코드 정규형까지 살펴보았습니다.
고급 정규화 과정에 속하는 제4 정규형과 제5 정규형은 다음 포스팅에서 살펴보도록 하겠습니다.
감사합니다.
'데이타베이스' 카테고리의 다른 글
R 프로그래밍[6] - R Markdown (2) | 2020.06.18 |
---|---|
정규화(Normalization) 개념과 정규화 과정(4NF, 5NF) (1) | 2020.06.10 |
R 프로그래밍[5] - Interactive 그래프 (0) | 2020.06.06 |
R 프로그래밍[4] - 지도 시각화, 단계 구분도 (1) | 2020.06.01 |
R 프로그래밍[3] - wordcloud2 패키지 사용하기 (0) | 2020.05.31 |
댓글