1. 정규화(Normalization)란?
- 관계형 데이터베이스(RDBMS)의 설계에서 데이터의 중복을 최소화하도록 구조화하는 것.
- 일반적으로 정규화란 크고, 정리되지 않은 테이블들을 잘 조직된 작은 테이블들로 나누는 것이다.
- 정규화의 목적은 하나의 테이블에서 발생한 데이터 조작(삽입, 삭제, 변경)이 테이블 간의 관계를 통해 다른 테이블로 전달되게 하는 것이다. 이를 통해 이상 현상을 제거할 수 있다.
※ 데이터의 조작이 의도한대로 이루어지지 않은 것을 이상 현상하며, 삽입 이상, 수정 이상, 삭제 이상이 있다. - 현재 제 6정규화까지 발표되었으며, 제 N정규화가 적용된 데이터를 제 N정규형(Normalized Form)이라 한다. 일반적으로는 제 3정규형을 많이 사용한다.

2. 정규형 (Normalized Form)
제 1 정규형(1NF)
릴레이션에 속한 모든 속성의 도메인이 원자 값(Atomic Value)으로만 구성되어 있어야 한다.
아래 테이블을 보면 Class_#는 Class라는 공통된 의미를 가지고 있다. 이를 1, 2, 3 열로 나누어 저장하는 것을 하나의 열에 다른 값으로 저장하는 것을 Atomic Value로 구성한다고 말한다.
| Student_No | Advisor | Adv_Office | Class_1 | Class_2 | Class_3 |
| 1 | Jones | 412 | 101-07 | 143-01 | 159-02 |
| 2 | Smith | 216 | 101-07 | 143-01 | 159-04 |
↓
| Student_No | Advisor | Adv_Office | Class |
| 1 | Jones | 412 | 101-07 |
| 1 | Jones | 412 | 143-01 |
| 1 | Jones | 412 | 159-02 |
| 2 | Smith | 216 | 101-07 |
| 2 | Smith | 216 | 143-01 |
| 2 | Smith | 216 | 179-04 |
제 2 정규형(2NF)
제 1정규형 중, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되어야 한다.
조금 풀어 설명해보자면, 부분적으로 종속되어 중복되는 데이터들을 다른 테이블로 나누어 중복을 제거하는 것이다.
{1, Jones, 412}와 {2, Smith, 216} 은 반복되어 저장될 필요가 없으므로 이를 다른 테이블로 나누어보자.
| Student_No | Advisor | Adv_Office | Class |
| 1 | Jones | 412 | 101-07 |
| 1 | Jones | 412 | 143-01 |
| 1 | Jones | 412 | 159-02 |
| 2 | Smith | 216 | 101-07 |
| 2 | Smith | 216 | 143-01 |
| 2 | Smith | 216 | 179-04 |
↓
| Student_No | Advisor | Adv_Office |
| 1 | Jones | 412 |
| 2 | Smith | 216 |
| Student_No | Class |
| 1 | 101-07 |
| 1 | 143-01 |
| 1 | 159-02 |
| 2 | 101-07 |
| 2 | 143-01 |
| 2 | 179-04 |
제 3 정규형(3NF)
제 2정규형 중, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않아야 한다.
이행적 함수 종속이란, 함수의 종속 관계 'X → Y'와 'Y → Z'가 존재하면 'X → Z' 가 성립하는 것을 말한다.
위의 테이블을 X = 'Student_no = 1', Y = 'Advisor = Jones', Z = 'Adv_Office = 412'로 두고 보면 똑같이 성립한다.
그럼, 이행적 함수 종속이 되지 않도록 테이블을 나누어보자.
| Student_No | Advisor | Adv_Office |
| 1 | Jones | 412 |
| 2 | Smith | 216 |
↓
| Student_No | Advisor |
| 1 | Jones |
| 2 | Smith |
| Advisor | Adv_Office |
| Jones | 412 |
| Smith | 216 |

이처럼 데이터 테이블을 서로의 관계를 고려하여 작은 단위로 나누는 행위를 정규화라 하고, 정규화된 데이터에 적절한 관계(기본키와 참조키)를 설정해주면 데이터 조작 시 발생할 이상 현상을 제거할 수 있다.
[참조문서]
https://learn.microsoft.com/en-us/office/troubleshoot/access/database-normalization-description
https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94
https://terms.naver.com/entry.naver?docId=3431248&cid=58430&categoryId=58430&expCategoryId=58430
https://opentutorials.org/module/4134/25301
'DATABASE > CONCEPT' 카테고리의 다른 글
| [DB] 반정규화 (De-Normalization) (0) | 2023.02.27 |
|---|---|
| [DB] Attribute (0) | 2023.02.26 |
| [DB] Relationship (0) | 2023.02.25 |
| [DB] Entity (0) | 2023.02.24 |
| [DB] Data Modeling (0) | 2023.02.21 |
댓글