본문 바로가기
DATABASE/CONCEPT

[DB] 정규화 (Normalization)

by melll93 2023. 2. 12.

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

댓글