본문 바로가기
IT/데이터 이론, 분석, 시각화

정규화 (1NF, 2NF, 3NF) / 비정규화

by marketinkerbell 2022. 2. 5.
반응형

 

정규화 (Normalization)

데이터베이스의 테이블이 잘 만들어졌는지 평가하고, 잘 만들지 못한 테이블을 고쳐나가는 과정.

테이블을 정규형(normal form)이라고 불리는 형태에 부합하게 만들어나감.

 

정규화가 필요한 이유?

정규형에 부합하지 않는 테이블들은 삽입, 업데이트, 삭제 이상 현상들이 생기는 등 문제점들이 많기 때문.

 

 

정규형(Normal Form)

1NF -> 2NF -> 3NF

순서에 따라 규칙이 누적된다

2NF 는 1NF의 조건을 지키면서 2NF 에 해당되는 규칙도 지켜야되고

3NF 는 2NF의 조건을 지키면서 3NF 에 해당되는 규칙도 지켜야한다.

 

 

 

1NF

: 나눌 수 없는 단일 값

 

테이블이 1NF에 부합하기 위해서는 안에 있는 모든 값들이 나눌 수 없는 단일 값 이어야 한다.

 

아래 테이블의 phone_numbers 칼럼을 보면 여러개의 번호들을 저장하고 있다.

이 테이블은 1NF 를 지키지 않고 있는 것.

 

 

 

1NF를 지키지 않는 경우는 크게 두 가지가 있다.

1. 한 컬럼에 같은 종류의 값을 여러 개 저장하고 있을 때
 -> 이때는 해당 컬럼을 하나의 테이블로 분리해서 모델링한다.


2. 한 컬럼에 서로 다른 종류의 값을 여러 개 저장하고 있을 때
 -> 이때는 한 컬럼을 여러 개로 분리해서 모델링한다.

 

 

 

 

 

2NF

: 1.  1NF에 부합해야 한다.

  2.  테이블에 candidate key의 일부분에 대해서만 함수 종속성이 있는 non-prime attribute 가 없어야 한다.

 

 

우선 2NF 조건을 이해하려면 함수 종속성, Candidate key  두가지 개념을 알아야한다.

 

 

 

함수 종속성 (Functional Dependency)   

  

 

 

 

 

 

함수 종속성이 한번 넘어가서 종속 되는 경우(이행 되는경우)는 이행적 함수 종속성 이라고 한다.

 

 

 

 

 

Candidate key

: 하나의 로우를 특정 지을 수 있는 attribute 들의 최소 집합

 

 

 

 

 

 

 

 

candidate 에 포함되는 attribute 는 prime attribute

candidate 에 포함되지 않는 attribute 는 non-prime attribute

 

 

 

 

그럼 2NF 조건을 지키지 않고있는 테이블을 확인해보자. 

아래 테이블에 age, price 칼럼이 2NF 에 부합하지 않는 컬럼들이다.

 

 

 

그럼 candidate key의 일부분만 의존하고 있는 non-prime attribute 들을 어떻게 고쳐주나?

 

다른 테이블로 옮겨주면 된다. (기존 테이블로 옮기거나 새로운 테이블 만들어서)

 

 

 

3NF

: 1.  2NF에 부합해야 한다.

  2.  테이블 안에 있는 모든 attribute 들은 오직 primary key에 대해서만 함수 종속성이 있어야 한다.

     즉, 테이블의 모든 attribute는 직접적으로 테이블 Entity에 대한 내용이어야만 한다.

     이행적 함수 종속성도 있으면 안된다.  다른 attribute를 건너서 종속하고 있으면 안된다.

 

 

 

 

 

 

 

비정규화

비정규화는 정규형에 부합하는 테이블을 정규형을 지키지 않게 바꾸는 걸 의미한다.

 

다양한 정규형은 테이블이, 좋은지, 안 좋은지 판단할 수 있는 일종의 기준인데,

기껏 열심히 잘 만든 테이블을 왜 더 안 좋게 만들까?

바로 성능 개선을 위해서다.

정규형을 지키기 위한 가장 기본적인 해법은 하나의 테이블을 여러 개로 나누는 것이다. 

그렇기 때문에 데이터베이스에서 원하는 데이터를 찾을 때는 조인(join)을 사용해서 다양한 테이블들에 있는 데이터를 합쳐야 하는 경우가 많다.

정규화로 인해서 데이터가 이곳저곳 너무 많이 퍼져있으면, 

퍼져있는 데이터를 다시 모을 때 속도가 느려질 수 있다.

비정규화를 하면 이런 정보들은 한 테이블에 저장할 수 있기 때문에 조금 더 빠르게 조회를 할 수 있다.


하지만 정규형에 부합하지 않는 테이블들은 삽입, 업데이트, 삭제 이상 현상들이 생기는 등 문제점들이 많이 있기 때문에

비정규화를 고려할 때는 아래 두 경우에만 고려할 수 있다.

1. 데이터가 너무 퍼져있어서 조회 연산의 성능 문제가 심각한 수준으로 일어나는 게 확실하고
2. 테이블을 삽입, 업데이트, 삭제하는 것보다 조회하는 용도로만 사용하고 있을 때

댓글