본문 바로가기
스터디/Database

[DB] 데이터 정규화 1NF, 2NF, 3NF, BCNF

by zoodi 2021. 5. 28.
728x90

💡데이터 정규화란?

데이터 베이스의 설계를 재구성. 불필요한 데이터를 제거하고, 삽입/삭제/갱신 시 각종 이상현상 방지를 하기 위함

 

💡데이터 정규화 목적

1. 불필요한 데이터 제거

2. 논리적인 데이터 저장 (이상현상 방지)

 

정규화는 제1정규화, 2정규화, 3정규화, BCNF, 4정규화, 5정규화로 나눌 수 있다. 보통 4, 5정규화까지는 하지 않는다고한다.

 

제 1정규화

제1정규화는 각 row마다 컬럼의 값이 1개씩 있어야한다. 즉, 컬럼의 값이 원자값이어야 한다.

예를들어 subject 라는 컬럼에 값이 math, biology 이렇게 2개의 값이 들어가면 제 1정규화를 만족하지 못 한다.

 

제 2정규화

2정규화는 테이블의 모든 컬럼이 완전 함수 종속을 만족한다. 완전 함수 종속이란 기본키 중에 특정 컬럼에만 종속된 컬럼(부분 함수적 종속)이 없다는 것이다.

예를들어 student, subject, age 라는 컬럼으로 구성된 테이블이 있고 기본키가 (student, subject)라고 하자. age 컬럼은 student 컬럼에만 종속되어 있으므로 student의 컬럼 값을 알면 age를 알 수 있다. 이러한 경우 student, subject / student, age 컬럼으로 구성된 2개의 테이블로 나누어 2정규화를 만족하도록 한다.

 

제 3정규화

3정규화는 2차 정규화된 테이블에서 갱신 이상을 겪는 것을 방지하기 위함이다. 즉 3정규화는 기본키를 제외한 속성들 간의 이행적 함수 종속이 없는 것이다. 이행적 종속 함수란 A->B, B->C 를 만족할 때 A->C를 만족하는 것이다.

3차 정규화는 2차 정규화처럼 테이블을 분리해서 해결 할 수 있다. 만약 어떤 테이블의 zip 컬럼이 street, city, state 컬럼을 결정한다 했을 때, 여러명의 학생이 동일한 zip 컬럼을 가지면 중복된 (street, city, state)가 생긴다.

이러한 문제를 해결하기위해 zip, street, city, state 만 존재하는 테이블로 따로 분리해준다.

 

BCNF (Boyce and Codd Normal Form)

제 3차정규화를 조금 더 강화한 버전. 즉 3차 정규화를 만족하면서 모든 결정자가 후보키 집합에 속한 정규형이다.

자세한 내용과 예시는 아래 참고하길 바란다.


참고 : https://3months.tistory.com/193

 

 

 

728x90

'스터디 > Database' 카테고리의 다른 글

[DB] 정규화 vs 반정규화(비정규화)  (0) 2021.07.04
[DB] Locking (잠금 기법)  (0) 2021.05.28
[DB] Transation / Undo / Redo  (0) 2021.05.17
DL (Data Lake)  (0) 2020.04.20
DM (Data Mart)  (0) 2020.04.20

댓글