
정규화(Normalization)?
데이터베이스는 Entity, Tuple, Table 등 여러 요소들의 집합으로 구성되어 있다. 데이터베이스의 요소들이 중복되지 않고 CRUD 쿼리 수행시 이상현상(Anomaly)를 최소화 하기 위해 테이블을 구성하는 정규화(Normalization)을 수행한다.
정규화의 목적
- 중복된 데이터(redundancy)의 제거
- 논리적 데이터 저장
- DB 구조확장 시 테이블 변경 최소화
정규화는 1NF, 2NF, 3NF, BCNF, 4NF, 5NF, 6NF 까지 정의되어 있으며 관계형 데이터베이스가 제3정규화(3NF)까지 정규화가 되어있일반적으로 정규화 되었다고 한다.
이번 포스팅에서는 제1 정규화 부터 BCNF 정규화까지 정리해보고자 한다.
제 1 정규화 (1 NF)
- 컬럼에 들어있는 값이 원자성을 띄어야한다. -> 한칸에 하나의 데이터만 들어가야한다.

제 2 정규화 (2 NF)
- 1 정규화 만족
- 기본키가 아닌 속성이 기본키에 완전히 종속되어야한다(완전 함수적 종속) -> 현재 테이블의 주제와 관련이 없는 컬럼을 분리한다.
- 부분 종속(Partial dependency)을 제거 한다. -> Composite primary key의 일부 컬럼에 종속되는 컬럼을 제거한다.

제 3 정규화 (3 NF)
- 2 정규화를 만족
- 기본키가 아닌 일반 컬럼에만 종속된 컬럼을 다른 테이블로 때어내기 -> 기본키 이외에 다른 컬럼이 그 외 다른 컬럼값을 결정할 수 없음
- 이행적 함수 종속을 제거(A-> B -> C)

BCNF 정규화
- 3 정규형을 만족
- 모든 결정자(Determinate)가 후보키의 집합에 속해야한다. -> 후보키 집합이 아닌 컬럼이 후보키를 결정해서는 안된다.

[참고]
Database Normalization- A Step-by-Step Guide with Examples
데이터베이스 정규화 (Nomalization), 정규화 과정, SQL Key
'Computer Science > Database' 카테고리의 다른 글
SQL syntax의 정리 - SELECT문 (0) | 2022.12.27 |
---|---|
[DB] JPA(Java Persistence API) 란 무엇인가? (0) | 2022.12.21 |