정규화 (Normalization)
- 테이블의 속성들이 상호 종속적인 관계를 갖는 특성을 이용해 테이블을 무손실 분해하는 과정
- 목적: 중복을 제거하여 삽입, 삭제, 갱신 이상의 발생 가능성을 줄이는 것
정규화 과정
정규형 | 설명 |
제 1정규형 (1NF) | 도메인(Domain)이 원자 값 |
제 2정규형 (2NF) | - 부분 함수적 종속 제거 - 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족 |
제 3정규형 (3NF) | 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수적 종속(Transitive Functional Dependency)을 만족하지 않는 정규형 > 이행적 함수정 종속이란 A->B이고 B->C일 때 A->C를 만족하는 관계 |
BCNF | 모든 결정자가 후보키(Candidate Key) |
제 4정규형 (4NF) | 다중 값 종속(MVD; Multi Valued Dependency) Aㅡ>>B가 존재할 경우 해당 테이블의 모든 속성이 A에 함수적 종속 관계를 만족하는 정규형 |
제 5정규형 (5NF) | 테이블의 모든 조인 종속(JD; Join Dependency)이 후보키를 통해서만 성립되는 정규형 |
반정규화 (Denormalization)
- 정규화된 데이터 모델을 의도적으로 통합, 중복, 분리하여 정규화 원칙을 위배하는 행위
- 시스템 성능 향상, 관리 효율성 증가 But, 데이터 일관성 및 정합성 저하
반정규화 방법
방법 | 설명 |
테이블 통합 | 두 개의 테이블이 조인되어 사용되는 경우가 많을 경우 성능 향상을 위해 하나의 테이블로 만들어 사용 |
테이블 분할 | - 수평 분할: 레코드별로 사용 빈도 차이가 큰 경우 사용 빈도에 따라 테이블 분할 - 수직 분할: 속성 기준으로 테이블 분할 |
중복 테이블 추가 | 작업의 효율성을 향상시키기 위해 테이블을 추가하는 것 - 집계 테이블 추가: 집계 데이터를 위한 테이블 생성 후 각 원본 테이블에 트리거를 설정하여 사용 - 진행 테이블 추가: 이력 관리 등의 목적으로 추가하는 테이블 - 특정 부분만을 포함하는 테이블 추가: 데이터가 많은 테이블의 특정 부분만을 사용하는 경우 해당 부분만으로 새로운 테이블 생성 |
중복 속성 추가 | - 자주 사용하는 속성을 하나 더 추가하는 것 - 데이터의 무결성 확보가 어렵고 디스크 공간이 추가로 필요 - 조인 자주 발생, 접근 경로 복잡, 액세스 조건을 자주 사용되는 속성인 경우 추가 |
댓글