Updated:

1 minute read

개요

  • 정규화
    • 정규형을 통해 이상 현상을 제거해가는 과정


장점

  • 이상 현상 제거
  • 확장에 용의(구조를 변경하지 않아도 되거나 일부만 변경)
  • 어플리케이션과의 영향 최소화


단점

  • 릴레이션 분해로 인한 join 연산의 수 증가
  • 쿼리 응답 시간 증가 혹은 감소
    • 중복 데이터가 하나의 테이블로 집약
  • 성능 저하 시 반정규화 고려


이상 현상(anomaly)

  • 삽입 이상(insertion anomaly)
    • null 혹은 의도와는 다른 값을 입력해야 하는 현상
  • 갱신 이상(update anomaly)
    • 중복 데이터의 일부만 갱신되는 데이터 불일치 현상
  • 삭제 이상(deletion anomaly)
    • 의도와는 다른 값까지 연쇄적으로 삭제되는 현상


종속성

  • 함수적 종속성(functional dependency)
    • a, b 컬럼에 대해 a 값에 의해 b 값이 정해지는 관계
    • a를 결정자, b를 종속자 부름
    • a -> b로 표현
    • 완전 함수적 종속성(full functional dependency)
      • 종속자가 완전한 기본키에 종속
    • 부분 함수적 종속성(partial functional dependency)
      • 기본키 중 일부에만 종속
      • a~d 컬럼 중 a, b가 기본키일 때 c는 a, b에 종속되고 d는 b에만 종속되는 경우
      • a, b, c와 b, d로 테이블을 분해
    • 이행적 함수적 종속성(transitive functional dependency)
      • a -> b, b -> c일 때 a -> c가 성립
      • a, b와 b, c로 테이블을 분해
  • 다치 종속성(multi-valued dependency)
    • 최소 3개의 컬럼이 존재하고 a -> b일 때 하나의 a값에 여러개의 b값이 존재하며 b와 c가 독립적
    • a, b와 a, c로 테이블을 분해
  • 조인 종속성(join dependency)
    • 하나의 테이블을 n개의 테이블로 분해했다가 다시 결합할 수 있는 경우
    • 조인 연산을 했을 때 손실이 없어야 한다


정규형

  • 제 1 정규형(1NF)
    • 각 컬럼은 유일한 이름을 가져야 한다
    • 각 컬럼은 원자 값을 가져야 한다
    • 하나의 컬럼은 같은 타입을 가져야 한다
    • 컬럼의 순서가 상관없어야 한다
  • 제 2 정규형(2NF)
    • 제 1 정규형을 만족해야 한다
    • 모든 컬럼은 부분 함수적 종속성이 없어야 한다
  • 제 3 정규형(3NF)
    • 제 2 정규형을 만족해야 한다
    • 기본키를 제외한 컬럼들간의 이행적 함수적 종속성이 없어야 한다
  • BCNF(Boyce-Codd Normal Form)
    • 제 3 정규형을 만족해야 한다
    • 후보키 집합에 없은 컬럼이 결정자가 되어서는 안된다
  • 제 4 정규형(3NF)
    • BCNF를 만족해야 한다
    • 다치 종속성이 없어야 한다
  • 제 5 정규형(3NF)
    • 제 4 정규형을 만족해야 한다
    • 조인 종속성이 없어야 한다