본문 바로가기
데이터베이스(DB)/SQLD

[SQLD 1-2-1] 데이터 모델과 SQL - 정규화

by 송기동 2024. 5. 9.
728x90

1. 정규화

- 데이터의 정합성(정확성과 일관성을 유지하고 보장)을 위해 엔터티의 작은 단위로 분리하는 과정

- 중복을 최소화하고, 데이터 무결성을 유지

- 데이터 조회 성능은 처리조건에 따라 향상되는 경우도 있고, 저하되는 경우도 있다.

- 일반적으로 입력, 수정, 삭제 성능은 향상된다.

# 정규화 단계

 

# 제 1정규형 (1NF)

- 각 컬럼이 하나의 속성만을 가져야 한다.

- 하나의 컬럼은 같은 종류나 타입의 값을 가져야 한다.

- 각 컬럼이 유일한 이름을 가져야 한다.

- 컬럼의 순서가 상관없어야 한다.

정규화 전

 

제 1정규형

# 제 2정규형 (2NF)

- 제 1정규형을 만족해야 한다.

- 모든 컬럼이 부분적 종속이 없어야 한다. 즉, 모든 컬럼이 완전 함수 종속을 만족해야 한다.

💡부분 함수 종속 (Partial Functional Dependency) : 기본키 중에 특정 컬럼에만 종속되는 것
💡완전 함수 종속 (Full Functional Dependency) : 기본키의 부분집합이 결정자가 되어선 안된다는 것

제 2정규형

# 제 3정규형 (3NF)

- 제 2정규형을 만족해야 한다.

- 기본키를 제외한 속성들간의 이행 종속성이 없어야 한다.

💡이행 함수 종속 (Transitive Functional Dependency) : A → B, B C일 때 A C를 만족하면 이행 함수 종속이라고 한다.

제 3정규형

# BCNF (Boyce-Codd Normal Form)

- 제 3정규형을 만족해야 한다.

- 모든 결정자가 후보키 집합에 속해야 한다.

BCNF

# 제 4 정규형(4NF)

- BCNF를 만족해야 한다.

- 다중값 종속(다치 종속)이 없어야 한다.

💡다치 종속 (Multi-valued Dependency)
- 같은 테이블 내의 독립적인 두 개 이상의 컬럼이 또 다른 컬럼에 종속되는 것을 말한다.
- A → B 인 의존성에서 단일 값 A와 다중 값 B가 존재한다면 다치 종속이라고 할 수 있다.
- 다치 종속은 A ↠ B로 표기한다. (이중 화살표 ↠)
- 다치 종속은 최소 2개의 컬럼이 다른 컬럼에 종속되어야 하기 때문에 최소 3개의 컬럼이 필요하다.

# 제 5 정규형(5NF)

- 4NF를 만족해야 한다.

- 더 이상 비손실 분해를 할 수 없어야 한다.

💡조인 종속 (Joint Dependency) : 하나의 릴레이션을 여러개의 릴레이션으로 분해하였다가, 다시 조인했을 때 데이터의 손실이 없고 필요없는 데이터가 생기는 것을 말한다. 조인 종속성은 다치 종속의 개념을 더 일반화한 것이다.

2. 반정규화

- 데이터베이스의 성능을 향상시키기 위해 데이터의 중복을 허용하고 조인을 줄이는 것

- 조회 성능은 향상될 수 있으나 입력, 수정, 삭제 성능은 저하될 수 있으며 데이터 정합성 이슈가 발생할 수 있음

- 반정규화의 과정은 정규화가 끝난 후 거치게 되며 정규화와 마찬가지로 일정한 규칙이 존재

# 테이블 반정규화

# 컬럼 반정규화

 

# 관계 반정규화

728x90