본문 바로가기
Computer Science/Database

Database Normalization & Functional Dependency

by JuHy_ 2020. 6. 22.

Database Normalization이란?

DB를 구성하다보면 잘못된 구조로 인하여 삽입, 삭제, 수정에 anomaly가 발생할 수 있다.

따라서 데이터를 일정한 형태와 규칙에 맞춰 구조화함으로써 이런 anomaly를 줄이게 된다.

이 과정을 Database Normalization(데이터베이스 정규화)이라고 한다.

 

그리고 이렇게 DB를 정규화하기 위한 형태와 규칙들을 Normal Form으로 정의하여 분류하고 있다.

가장 기본적인 Normal Form으로는 1NF, 2NF, 3NF, BCNF 등이 있다.

 

 

Functional Dependency

Normal Form들을 알아보기 전 먼저 Functional Dependency(함수 종속성)에 대해 알아야 할 필요가 있다.

 

attribute set A와 B가 모두 relation R에 속할 때, A의 값이 항상 B의 값을 결정하면 B는 A에 함수 종속된다고 한다.

즉, A⊆R, B⊆R 일 때, 임의의 tuple1과 tuple2의 A 값이 같을 때, B의 값도 같다면 A→B 이다.

이 때, attribute set A를 determinant set(결정자), B를 dependent set(종속자)라고 한다.

 

예를 들어 위와 같은 테이블에서 각 tuple의 고유한 id 값이 달라지면 name, dept_name, salary 값이 달라지게 된다.

따라서 (name, dept_name, salary)는 id 값에 functionally dependent하며, id→(name, dept_name, salary)로 표기한다.

하지만 반대로 name이나 dept_name의 값이 같다고 id 값이 같은 건 아니기 때문에 반대는 성립하지 않는다.

 

 

그렇다면 이제 각각의 Normal Form들의 규칙을 자세히 알아보자.

 

 

First Normal Form (1NF)

1NF는 다음과 같은 규칙을 만족해야 한다.

 

  1. 모든 attribute의 값은 atomic해야 한다.

atomic해야 한다는 것은 유일해야 한다는 뜻으로, 하나의 속성에는 하나의 값만 들어가야 한다는 뜻이다.

 

예를 들어 왼쪽 테이블은 하나의 속성에 하나의 값만 들어가므로 atomic 조건을 만족하여 1NF에 해당한다.

하지만 오른쪽 테이블은 하나의 속성에 2개의 값이 들어가 있으므로 atomic 하지 않아 1NF에 해당하지 않는다.

 

 

Second Normal Form (2NF)

2NF는 다음과 같은 규칙을 만족해야 한다.

 

  1. 1NF를 만족해야 한다.

  2. Partial Functional Dependency(부분적 함수 종속성)가 존재하지 않아야 한다.

부분적 함수 종속성이란 candidate key 전체가 아닌 일부에 종속되는 attribute가 존재하는 것을 말한다.

 

예를 들어 위와 같은 테이블에서 candidate key는 (id, lab_id)이고, id→name, lab_id→lab_name 이라고 하자.

이 때, name은 candidate key의 전체가 아닌 id에만 종속되어 있으므로 부분적 함수 종속이라고 할 수 있다.

마찬가지로, lab_name 또한 전체가 아닌 lab_id에만 종속되어 있으므로 부분적 함수 종속이다.

 

따라서 위 테이블은 1NF이지만 2NF는 아니다.

그렇다면 이 테이블을 2NF를 만족하도록 수정해보자.

 

부분적 종속을 없애기 위해 task를 별도의 테이블로 분리했다.

이제 professor 테이블에서 name은 candidate key 전체 집합인 (id, lab_id)에 종속된다.

또한 laboratory 테이블에서도 lab_name은 candidate key 전체 집합인 (lab_id)에 종속된다.

따라서 부분적 종속이 모두 사라져 위 테이블들을 2NF를 만족한다.

 

 

Third Normal Form (3NF)

3NF는 다음과 같은 규칙을 만족해야 한다.

 

  1. 2NF를 만족해야 한다.

  2. Transitive Functional Dependency(이행적 함수 종속성)가 존재하지 않아야 한다.

이행적 함수 종속성이란 직접적으로 종속되지는 않았지만 여러 개의 종속성이 이어진 경우를 말한다.

예를 들어 A→B이고 B→C이면 당연히 A→C가 되는데 이 경우를 이행적 함수 종속성이라고 한다.

 

위 테이블에서 lab_id는 id에 종속되고, lab_name은 lab_id에 종속된다면, 이행적 함수 종속성이 발생한다.

따라서 위 테이블은 3NF를 만족하지 못한다.

 

따라서 이행적 함수 종속성이 발생하지 않도록 laboratory라는 별도의 테이블을 만들어주었다.

이제 하나의 테이블 안에서 한 차례의 종속만 발생하게 되어 3NF를 만족한다.

 

 

Boyce-Codd Normal Form (BCNF)

BCNF는 다음과 같은 규칙을 만족해야 한다.

 

  1. 3NF를 만족해야 한다.

  2. 다음 항목 중 적어도 하나를 만족해야 한다.

    • 모든 Functional Dependency는 Trivial 해야 한다.

    • 모든 Functional Dependency의 Determinant Set은 Superkey여야 한다.

Trivial Functional Dependency는 dependent set(종속자)이 determinant set(결정자)의 부분 집합인 종속성을 말한다.

즉, X→Y일 때, Y⊆X인 경우를 말한다.

 

위 테이블에서 lab_name은 lab_id에 종속되지만 determinant인 lab_id는 superkey가 아니다.

따라서 superkey가 아닌 determinant가 존재하지 않으므로 BCNF가 아니다.

 

이 또한 마찬가지로 테이블을 분리해주면 모든 determinant가 superkey가 되어 BCNF를 만족하게 된다.

'Computer Science > Database' 카테고리의 다른 글

B+ Tree Index  (2) 2020.06.23
Database Indexing  (0) 2020.06.22
Entity-Relationship Model & Diagram  (0) 2020.06.16
[SQL] INNER JOIN, OUTER JOIN, NATURAL JOIN  (0) 2020.06.16
[SQL] SOME, ALL, EXISTS, NOT EXISTS, UNIQUE, WITH  (1) 2020.06.16