정규화
- 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스
- 데이터 중복으로 인하여 발생할 수 있는 문제 해결
- 삽입 이상 : 자료가 부족해서 데이터가 삽입 되지 않아 발생하는 문제
- 삭제 이상 : 하나의 자료만 삭제하고 싶지만 해당 자료가 포함된 튜플 전체가 삭제되는 문제
- 수정 이상 : 일부 튜플만 수정되어 정보에 일관성이 없어져 정확한 정보 파악이 안되는 문제
함수적 종속성(functional dependencies)
- 좋은 테이블 설계의 기준
- A → B
- A가 B의 결정자이다.
- A가 정해지면 반드시 B가 정해진다.
- A 값이 같은데 B 값이 다를 수는 없다.
정규화 조건
- 무손실 조인
정규화 후 join을 하였을 때 기존에 존재하던 데이터가 사라지거나 존재하지 않던 데이터가 나타나서는 안된다.
- 정규화 후 함수적 종속성이 보존되어야 한다.
join을 하지 않고도 함수적 종속성을 확인할 수 있어야 한다.
- 튜플의 모든 애트리뷰트가 도메인에 속하는 하나의 값을 가져야 한다.
- Ex) 노래 이름 : 봄바람, 첫사랑, 여수밤바다 → X
- 1NF이면서 기본키에 속하지 않은 속성 모두가 기본키에 완전 함수 종속인 정규형
- 2NF이면서 이행적 함수 종속성을 제거한 정규형
- 이행적 함수 종속성
A → B, B → C, A → C
- 여러 후보 키가 존재하는 릴레이션에 해당하는 정규화 내용
- 3NF가 강화된 개념
- 모든 결정자는 항상 후보키가 되도록 릴레이션을 분해한다.
정규화의 단점
- JOIN 연산이 늘어난다.
- 조인으로 인한 성능 저하가 예상될 경우 반정규화를 진행해야 한다.
- 반정규화란 성능 향상, 개발 및 운영의 편의성 등을 위해 의도적으로 정규화 원칙을 위배하는 것을 의미한다.(ex. 테이블 통합)
참고