본문 바로가기
Quality control (Univ. Study)/Database Design

Normalization (1)

by 생각하는 이상훈 2023. 11. 7.
728x90

Normalization

정규화는 서로 독립적인 관계(relationship)는 별개의 릴레이션으로 분해하는 과정을 말한다. 다시 말해 이상이 있는 “나쁜” 릴레이션의 애트리뷰트들을 나누어서 더 작은 “좋은” 릴레이션으로 분해하는 것이다. 이때 정규형(normal form) 특정 조건을 만족하는 릴레이션 스키마의 형태이다. 1NF, 2NF, 3NF, BCNF로 나누어 지는데 각각을 따르면 알아서 정규화가 되도록 단계별 조건을 미리 만들어 놓은 것이다. 이 조건들은 릴레이션 스키마의 FD와 키에 기반하여 정의된다. 일반적으로 업계에서는 제 3 정규형 또는 BCNF형까지 고려하여 DB 정규화를 진행한다.


1NF

애트리뷰트의 도메인이 오직 원자 값만을 포함하고, 투플의 모든 애트리뷰트가 도메인에 속하는 하나의 값을 가져야 하는 조건을 가진 정규화 단계이다. 상세하게 살펴보면 복합 애트리뷰트(composite attribute), 다치 애트리뷰트(multi-value attribute), 그리고 중첩 릴레이션(nested relation) 등 비원자적(non-atomic) 애트리뷰트들을 허용하지 않은 릴레이션의 형태이다. 

예를 들어 아래와 같이 multi-value attribute가 있을 수 있다.

이때 각각을 분리하여 아래와 같이 나타내어 1NF를 만족시킨다.

그럼에도 같은 Department가 반복되어 기록되는 redundancy문제는 해결할 수 없다.

 

또다른 예시를 보면 아래와 같이 직원과 그들이 참여중인 프로젝트에 대한 DB인데 multivalue attribute가 존재하여 그 아래와 같이 1NF에 따라 수정한 것을 볼 수 있다.

아래와 같이 PK인 Ssn이 Ename만 가르키는 테이블 하나와 Ssn와 Pnumber를 PK로 Hours를 가르키는 또다른 테이블을 만들었다.

아래의 수강지도 table도 1NF를 만족시켰으나 세가지 anomaly가 발생하였다.

 

1. 삽입이상
500번 학생의 지도교수가 P4라는 사실의 삽입은 어떤 교과목을 등록하지 않는 한 삽입 불가능하다.


2. 삭제이상
200번 학생이 C123의 등록을 취소하여 이 투플을 삭 제할 경우 지도교수가 P2라는 정보까지 손실된다.


3. 갱신이상
400번 학생의 지도교수를 P1에서 P3로 변경할 경우 학번이 400인 4개 투플의 지도교수 값을 모두 P3로 변경해야 한다.


2NF

우선 기본적으로 제2정규형은 기본키와 완전 함수적 종속성의 개념에 기반을 둔다. 이때, 완전 함수적 종속성(full functional dependency)은 FD Y→Z에서 Y의 어떤 애트리뷰트라도 제거하면 더 이상 함수적 종속성이 성립하지 않는 경우이다. 예를들어 {SSN, PNUMBER} → HOURS는 SSN → HOURS와 PNUMBER → HOURS가 성립하지 않기 때문에 완전 함수적 종속성이고 {SSN, PNUMBER} → ENAME은 SSN → ENAME이 성립하기 때문에 완전 함수적 종속성이 아니다. 이는 부분 함수 종속성(partial functional dependency)이라고 부른다. 결론적으로 제 2 정규형을 정의하면 "릴레이션 스키마 R의 모든 비주요 애트리뷰트들이 기본키에 대해서 완전 함수적 종속이면, R은 제2정규형(2NF)에 속한다."라고 할 수 있겠다.

Partial FD가 존재하던 테이블을 필요한 PK만 포함된 3개의 테이블로 분리하여 전부 Full FD만 존재하는 테이블로 만들어주었다. 1NF에서 살펴본 수강지도를 2NF에 맞춰서 분해하면 아래와 같이 분해가 된다.

각각은 아래와 같이 PK가 애트리뷰트들을 가르켜서 Full FD임을 알 수 있다.

위와 같이 분리해도 세가지 anomaly가 모두 존재한다.

 

1. 삽입이상

어떤 지도교수가 특정 학과에 속한다는 사실의 삽입 불가능하고 가능하기 위해서는 지도교수의 지도를 받는 학생이 있어야 한다.

 

2. 삭제이상

300번 학생의 투플을 삭제하면 지도교수 P3가 컴퓨터공학과에 속한다는 정보 손실이 발생한다.

 

3. 갱신이상

지도교수 P1의 소속이 컴퓨터공학과에서 전자과로 변경되면 학번이 100과 400번인 두개의 투플을 모두 변경하여야 한다.

 

위 anomaly의 원인은 이행적 함수종속 즉 Transitive Dependency가 존재한다는 것이다.

이때 Transitive Dependency는 A -> B이고 B -> C ⇒ A -> C 마치 아리스토텔레스의 삼단논법을 연상시킨다. 해당 상황에서 애트리뷰트 C는 애트리뷰트 A에 이행적 함수 종속이다.


3NF

위에서 살펴봤듯 제3정규형은 이행 함수적 종속성을 제거가 목적이다. 따라서 제3정규형의 정의는 릴레이션 스키마 R이 제2정규형을 만족하고, R의 어떤 비주요 애트리뷰트도 기본키에 대해서 이행적으로 종속되지 않으면 R은 제3정규형을 만족한다고 한다.

위에서도 Ssn이 가르키는 Dnumber에 Dname과 Dmgr_ssn이 종속되자 이행 함수적 종속성을 피하기 위해 Dnumber가 PK인 테이블을 따로 만들어버린 모습이다. 이로써 3NF 조건을 만족시켜줬다.

2NF에서 학번이 지도교수와 학과를 가르키고 지도교수가 학과를 가르키는 함수 종속관계가 존재했는데 이 또한 이행적 함수종속관계이므로 3NF를 따르기 위해 아래와 같이 분리하였다.

대부분의 anomaly를 해결한 3NF이지만 약점이 여전히 존재한다. 복수의 후보키를 가지고 있고 후보키들이 복합 애트리뷰트들로 구성되고 후보키들이 서로 중첩되는 경우 적용 불가능하여 보다 일반적인 Boyce/Codd Normal Form(BCNF)가 제안되었고 이는 다음 글에서 정리해보자.


 

728x90

'Quality control (Univ. Study) > Database Design' 카테고리의 다른 글

INDEX 실습  (0) 2023.11.14
Normalization (2)  (0) 2023.11.09
Relation schema design protocol and Functional Dependencies  (1) 2023.10.31
Login page  (0) 2023.10.31
SQL 실습 (2)  (0) 2023.10.20