정규화 ⭐️
- 제 1 정규화: 원자성 확보
- 컬럼에 의한 반복적인 속성의 값을 갖는 경우 → 1차 정규화 필요
- 제 2 정규화: 부분 함수 종속성 제거
- 제 3 정규화: 이행 함수 종속성 제거
- BCNF: 결정자이면서 후보키가 아닌 속성 제거
- 이상 현상
- SELECT 절에서는 JOIN으로 인해 성능 감소. INSERT/UPDATE에서는 성능 증가
반정규화 ⭐️
- 데이터 무결성을 해칠 수 있음
- 대량 범위, 범위 처리 빈도수, 통계 처리 여부 대상 조사 후 필요하면 응용 시스템 변경, 클러스터링/인텍스, 뷰 테이블 처리 등을 먼저 고려 후 마지막 최후의 보루로 반정규화 고려
- 테이블 반정규화
- 병합: 1:1 관계 테이블 병합, 1:M 관계 테이블 병합, 슈퍼/서브타입 테이블 병합
- 분할: 수직 분할, 수평 분할
- 추가: 중복테이블 추가, 통계 테이블 추가, 이력 테이블 추가, 부분 테이블 추가
- 속성 반정규화
- 중복 컬럼 추가: join 비용 감소, 갱신 비용 증가
- PK에 의한 컬럼 추가: 복합 의미를 갖는 PK를 단일 속성으로 구성 시, 특정 값을 일반 속성으로 추가
- 파생 컬럼 추가: 여러 테이블 join 후 계산이 필요한 경우 추가
- 오류 방지를 위해 임시 컬럼 생성: 원래 값으로 복구하는 것을 대비. 이전 데이터를 임시적으로 중복 보관
- 이력 컬럼 추가: 변경 이력, 발생 이력 정보를 위한 최신 정보 컬럼 추가
- 관계 반정규화
- 중복 관계 추가: 관계가 먼 데이터 간 빈번한 join 발생 시 관계 추가. 무결성 훼손 없음.
- FK 속성 추가는 반정규화 기법이라기 보다는 관계 연결 시 나타나는 자연스러운 것