정규화란
데이터베이스의 설계를 재구성하는 테크닉
목적
불필요한 데이터 제거
삽입/갱신/삭제 시 발생할 수 있는 각종 이상현상을 방지
‘논리적’으로 데이터를 저장(데이터 테이블의 구성이 논리적이고 직관적)
정규화 대상
온라인 거래 시스템 같은 OLTP(Online Transaction Processing) 데이터베이스는 CRUD가 많이 일어나기 때문에 정규화 되는 것이 좋음
그러나 분석 리포트 같은 OLAP(Online Analytical Processing) 데이터베이스는 분석과 리포팅을 위해 사용되기 때문에 연산의 속도를 위해 반정규화의 대상이 된다
반정규화란 시스템 성능 향상, 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정 (과도한 정규화를 풀어내는 것)
반정규화 방법에는 테이블 통합, 테이블 분할, 중복 테이블 추가, 중복 속성 추가 등이 있음.
1/2/3차 정규화, BNCF란
1차 : 컬럼이 원자 값을 가져야 함
2차 : 기본키가 다중칼럼인 경우, 기본키 중에 특정 칼럼에만 종속된 컬럼이 없는 것
3차 : 기본키가 아닌 속성들은 기본키에만 의존해야 한다.
BNCF : 모든 결정자(어떤 것을 결정함)가 후보키 집합에 속해야 한다.
1차 정규화란
테이블의 속성(컬럼)이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것.
ex) 홍길동 | 떡볶이, 쌀국수 → ❌
모든 속성(컬럼)에 반복되는 그룹이 나타나지 않는다.
ex) (컬럼) Customer ID, First Name, Surname, Tel1, Tel2, Tel2 → ❌
기본 키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 한다.
ex) ID가 더이상 고유하게 식별할 수 있는 키가 아니므로, ❌
Customer ID
First Name
Surname
Tel
123
gildong
hong
123-456-789
123
gildong
hong
459-234-123
456
chulsu
kim
124-523-262
…
…
…
…
→ 1차 정규화를 만족한다면