정규화 : 데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔터티를 작은 단위로 분리하는 과정
- 조회 성능은 처리 조건에 따라 향상될 수도 있고 저하될 수도 있음
- 입력, 수정, 삭제 성능은 일반적으로 향상
- 논리 데이터 모델 상세화 과정(개념 데이터 모델이 아님)
제1정규형 : 모든 속성은 반드시 하나의 값만 가진다. 유사한 속성이 반복되지 않도록 한다.
- 하나의 속성이 여러 개의 값을 갖는 경우 수행
- 유사한 속성이 반복되는 경우 수행
제2정규형 : 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다.
- 일반 속성이 주식별자의 일부에만 종속될 경우 수행 (주식별자가 단일식별자가 아닌 복합식별자인 경우)
- 부분 함수 종속 제거가 목표
-
제3정규형 : 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다.
- 제3정규형(3NF)은 이행적 함수 종속을 제거가 목표
-기본키를 제외한 일반속성 간에 종속성이 발생할 경우 수행
-기본키에 속하지 않은 속성 모두가 기본키에 이행적 함수종속일 경우 수행
-이행적 함수 종속: A → B, B → C일 때, A → C가 성립하는 경우를 의미하며, 여기서 B는 후보 키가 아니어야 합니다.
-sqld p48 참조
반정규화 : 데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정
- 조회 성능 향상
- 입력, 수정, 삭제 성능은 저하
- 데이터 정합성 이슈 발생 가능성 (데이터 무결성이 저해될 수 있음)
- 정규화가 끝난 후 반정규화를 거치게 됨
반정규화를 적용하는 이유
- 데이터 조회 속도 저하가 예상되는 경우
- 컬럼의 합계 및 평균 등을 계산하여 읽을 때 성능 저하가 예상되는 경우
- 여러 개의 테이블 조인으로 성능 저하가 예상되는 경우
- 정규화의 함수적 종속 관계는 위반하지 않지만 데이터의 중복성을 증가시켜
데이터 조회의 성능을 향상시켜야 하는 경우
반정규화 기법
- 테이블 병합 : 1 :1 관계 테이블 병합, 1 : M 관계 테이블병합, 슈퍼 서브 타입 테이블 병합
- 테이블 분할 : 테이블 수직 분할 (속성 분할), 테이블 수평 분할 (인스턴스 분할, 파티셔닝)
- 테이블 추가 : 중복, 통계, 이력, 부분 테이블 추가
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!