[SQLD] 정규화와 반정규화

hwwwa·2022년 6월 1일
0

🍊 SQLD

목록 보기
3/16

정규화 ⭐️

  • 제 1 정규화: 원자성 확보
    • 컬럼에 의한 반복적인 속성의 값을 갖는 경우 → 1차 정규화 필요
  • 제 2 정규화: 부분 함수 종속성 제거
  • 제 3 정규화: 이행 함수 종속성 제거
  • BCNF: 결정자이면서 후보키가 아닌 속성 제거
  • 이상 현상
    • 삭제 이상
    • 삽입 이상
    • 갱신 이상
  • SELECT 절에서는 JOIN으로 인해 성능 감소. INSERT/UPDATE에서는 성능 증가

반정규화 ⭐️

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

0개의 댓글