정규화의 기본 목표는 테이블 간에 중복된 데이타를 허용하지 않는다는 것이다. 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다. 즉, 쉽게 풀이하면 테이블을 분리하여 저장하는 것이다.
이런 테이블을 분리하는 정규화에도 단계가 있다.
- 제1정규화 : 모든 속성 값이 원자 값을 갖도록 분해한다.
- 제2정규화 : 제1정규형을 만족하고, 기본키가 아닌 속성이 기본키에 완전 함수 종속이도록 분해한다.
(완전 함수 종속이란 기본키의 부분집합이 다른 값을 결정하지 않는 것을 의미한다.)
- 재3정규화 : 제2정규형을 만족하고, 기본키가 아닌 속성이 기본키에 직접 종속(비이행적 종속)하도록 분해한다.
(이행적 종속이란 A->B->C가 성립하는 것으로, 이를 A,B와 B,C로 분해하는 것이 제3정규형이다.)
- BCNF 정규화 : 제3정규형을 만족하고, 함수 종속성 X->Y가 성립할 때 모든 결정자 X가 후보키가 되도록 분해한다.
결론 : 데이터 베이스에서 가장 중요한 부분이라고 할 수 있는 용량 관리와 무결성 유지를 위해서 테이블을 잘게 나누는 것이 정규화이다.
'오늘 뭐했냐 > 개발에 대한 주저리' 카테고리의 다른 글
| 23.07.31 HTTP 메서드 (0) | 2023.08.01 |
|---|---|
| 23.07.30 기본키(Primary Key)와 외래키(Foregin Key) (1) | 2023.08.01 |
| 23.07.28 MVC 패턴 (0) | 2023.07.31 |
| 23.07.27 ORM( 그 중에서 Sequelize) (0) | 2023.07.30 |
| 23.07.26 자료구조 큐(Queue) 구현 (0) | 2023.07.27 |