RDBMS의 정규화

level·2023년 8월 16일

TIL

목록 보기
78/95

정규화(noramlization) : 이상현상이 있는 릴레이션을 분해하여 이상현상(anomaly)을 없애는 과정.

  • 장점
    데이터 베이스 변경 시 이상현상을 제거할 수 있다
    정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.
    데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킽다

  • 단점
    릴레이션의 분해로 인해 릴레이션가의 JOIN연산이 많아진다
    질의에 대한 응답 시간이 느려질 수도 있다. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다
    데이터를 처리할때 속도가 빨라질수도 있고 느려질 수도 있다
    조인이 많이 발생하여 성능 저하가 나타나면 반정규화를 적용할수도 있다


이상현상

  • 삽입이상(insertion anomaly) : 튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
  • 삭제 이상(deletion anomaly) : 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
  • 갱신 이상(update anomaly) : 튜플 갱신 시 중복된 데이터의 일부만 갱신되어 일어나는 데이터 불일치 현상

함수 종속성(FD : Functional Dependency)

  • 어떤 속성 A의 값을 알면 다른 속성 B 의 값이 유일하게 정해지는 관계 - 종속
  • A->B로 표기하며 A를 B의 결정자(Determinant)라고 한다
  • A->B이면 A는 B를 결정한다(Determine)고 하고, B는 A에 종속한다(Dependent)라고 한다

제 1 정규형

  • 각 컬럼이 하나의 속성만을 가져야 한다
  • 하나의 컬럼은 같은 종류나 타입의 값을 가져야 한다
  • 각 컬럼이 유일한 이름을 가져야 한다
  • 칼럼의 순서가 상관없어야 한다

제 1 정규화

  • 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것

제 2 정규형

  • 제 1 정규형을 만족해야 한다
  • 모든 컬럼이 부분적 종속(partial dependency)이 없어야 한다

제 2 정규화

  • 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것

제 3 정규형

  • 제 2 정규형을 만족해야 한다
  • 기본키를 제외한 속성들 간의 이행 종속성(transitive dependency)이 없어야 한다

이행 종속성: A->B, B->C 일 때 A->C가 성립하는 것

제 3 정규화

  • 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것

BCNF (Boyce-Codd Normal Form) 정규화

  • 제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것
    제 3정규형을 좀 더 강화한 버전
  • 3정규형을 만족해야 한다.
  • 모든 결정자가 후보키 집합에 속해야 한다.

    (학생 번호, 과목)이 기본키로 지도교수를 알 수 있다. 하지만 같은 과목을 다른 교수가 가르칠 수도 있어서 과목-> 지도교수 종속은 성립하지 않는다. 하지만 지도교수가 어떤 과목을 가르치는지는 알 수 있으므로 지도교수-> 과목 종속이 성립한다.

이처럼 후보키 집합이 아닌 칼럼이 결정자가 되어버린 상황을 BCNF를 만족하지 않는다고 한다.

참고
https://code-lab1.tistory.com/48
https://mangkyu.tistory.com/110

0개의 댓글