본문 바로가기
DB/DBMS

DBMS - 정규화(NF) : 정규화란?

by 코딩하는 랄로 2023. 8. 14.
728x90

정규화란

고객의 요구에 맞춰 모델링을 통해 테이블을 생성하였다고 바로 사용하게 되면 여러 이상현상들을 마주하게 된다. 이러한 이상 현상에는 불필요한 컬럼이 존재하거나 중복된 값이 존재하는 등이 있는데 데이터를 다루는 데 심각한 불편함과 어려움을 초래하게 된다.

 

이것을 방지하고자 정규화라는 규칙을 세워 테이블을 이것에 맞춰서 한번 더 다듬을 필요가 있는 것이다. 정규화는 총 5개의 단계가 있고 보통은 3단계까지 진행한다.

 

정규화의 목적

  • 삽입/수정/삭제의 이상현상을 제거
  • 데이터의 중복 최소화

 

정규화를 너무 과하게 적용하게 되면 테이블이 너무 많이 분리되게 되어 사용시 조인이 많이 발생한다는 단점이 있어 이로 인해 성능 저하가 발생하게 되면 반정규화를 적용할 수도 있다.

 

 

1NF - 제1 정규화

  • 각 칼럼이 하나의 속성만을 가져야 한다.
  • 하나의 컬럼은 같은 종류나 타입의 값을 가져야 한다.
  • 각 컬럼이 유일한 이름을 가져야 한다.
  • 컬럼의 순서가 상관없어야 한다.

이 규칙을 간단하게 말하면 유일한 이름을 가지는 칼럼이 하나의 행(데이터)에서 하나의 값만을 가져야 한다는 의미이다.

 

학생 정보 테이블

위의 CLASS 칼럼에서 마지막 데이터가 하나의 속성이 아닌 JS, python 두개의 속성을 가지고 있기 때문에 1NF의 대상이 된다. 다음의 테이블이 정규화 과정을 거치게 되면 다음과 같이 수정이 된다.

1NF - 학생 정보 테이블

 

2NF - 제 2 정규화

  • 1NF를 만족해야 한다.
  • 모든 컬럼이 완전 함수 종속을 만족해야 한다.

간단히 설명하자면, 모든 테이블이 1NF를 만족하면서 서로 관계가 있는 테이블이어야 한다는 의미이다. 이를 만족하기 위해서는 모든 정보를 한 테이블에 모아놓는 것이 아닌 서로 관련 있는 테이블끼리 모아 놓은 후 관계를 맺어야 한다는 것이다.

 

지금까지 예시를 통해 살펴보았듯이 고객 정보, 주문 정보, 상품 정보 등을 다 따로 분리한 것도 이와 같은 이유이다.

 

 

 

3NF - 제 3 정규화

  • 2NF를 만족해야 한다.
  • 기본키를 제외한 속성들 간의 이행 종속성이 없어야 한다.

3NF는 간단히 말해 의미없는 컬럼을 없애야 한다는 것이다. 여기서 의미없는 칼럼이란 해당 칼럼이 없어도 해당 칼럼에 대한 정보를 알 수 있는 칼럼이 존재한다는 의미이다.(이행 종속성)

 

예를 들어 다음과 같은 테이블이 있다고 가정해보자.

우편 정보 테이블

위의 테이블에서 시, 구의 정보를 담고 있는 칼럼은 우편번호만 알고 있어도 알아 낼 수 있는 정보인 것이다. 그렇기 때문에 3차 정규화를 통해 테이블을 다음과 같이 분해하여야 한다.

3차 정규화 진행 후 테이블

 

 

BCNF - Boyce-Codd Normal Form

제 3정규형을 더 강화한 버전으로 다음과 같은 규칙을 만족해야 한다.

  • 제 3 정규화를 만족해야 한다.
  • 모든 결정자가 후보키 집합에 속해야 한다.

간단히 말해서, 특정 컬럼에 대한 정보가 있으면 다른 컬럼에 대한 정보도 알 수 있는 컬럼을 결정자라고 하는 데 이 결정자가 후보키 집합, 즉 PK들의 집합안에 있어야 한다는 의미이다.

학생 번호와 과목을 알게 되면 지도교수에 대해서 알 수 있지만 같은 과목을 다른 지도교수가 가르칠 수 있기 때문에 과목 -->지도교수 종속은 성립하지 않는다. 반대로 지도교수가 어떤 과목을 가르치는지는 알 수 있으므로 지도교수 --> 과목 종속이 성립 되기 때문에 BCNF 정규화 대상이 된다.

 

BCNF 후 테이블

 

보통은 BCNF까지 진행하기 때문에 이후의 과정(4NF이상)에 대해서는 추후에 알아보겠다.

 

 

 

2023.08.14 - [Programming 공부/DBMS] - DBMS - 정규화(NF) : 이상현상

 

DBMS - 정규화(NF) : 이상현상

2023.08.14 - [Programming 공부/DBMS] - DBMS - 정규화(NF) : 정규화란? DBMS - 정규화(NF) : 정규화란? 정규화란 고객의 요구에 맞춰 모델링을 통해 테이블을 생성하였다고 바로 사용하게 되면 여러 이상현상들

codingralro.tistory.com

 

728x90

'DB > DBMS' 카테고리의 다른 글

DBMS - NULL, 숫자형 함수  (0) 2023.08.14
DBMS - 정규화(NF) : 이상현상  (0) 2023.08.14
DML - Concatenation,Like  (0) 2023.08.13
TCL - 트랜젝션 제어 언어  (0) 2023.08.13
DML - WHERE조건식  (0) 2023.08.13