본문 바로가기

CS(Computer Science)

CS Study 7주차 : 정규화(Normalization)

정규화(Normalization)

  • 정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다
  • 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다.
  • 단계별로 구분하여 정규형이 높아질수록 이상현상을 줄어들게 된다.

장점

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

단점

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

 

제 1정규형(1NF)

조건

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

위 예시를 보면 각 칼럼이 하나의 속성만을 가져야 하는 조건을 불만족 하므로 아래와 같이 분해해 주어야 한다.

 

제 2정규형(2NF)

조건

  • 제 1정규형을 만족해야 한다.
  • 모든 칼럼이 부분적 종속이 없어야 한다. -> 모든 칼럼이 완전 함수 종속을 만족해야 한다.

위 예시를 보면 지도교수  칼럼은 (학생번호, 과목)에 종속되지 않고 과목에만 종속이 되어 있는 부분적 종속이기 때문에
아래처럼 분해해 주어야 한다.

 

제 3정규형(3NF)

조건

  • 제 2정규형을 만족해야 한다.
  • 기본키를 제외한 속성들 간의 이행 종속성이 없어야 한다.
    • 이행 종속성이란 A->B, B->C일 때 A->C가 성립하는 경우를 말한다.

위 예시를 보면 ID를 알면 등급을 알 수 있고, 등급을 알면 할인율을 알 수 있다. 따라서 ID를 알면 할인율을 알 수 있다.
이는 이행 족속성이기 때문에 아래와 같이 분해해 주어야 한다.

 

BCNF(Boyce-Codd Normal Form)

BCNF는 제 3정규형을 좀 더 강화한 버전으로 조건은 아래와 같다.

  • 제 3정규형을 만족해야 한다.
  • 모든 결정자가 후보키 집합에 속해야 한다.
    • 후보키 집합에 없는 칼럼이 결정자가 되어서는 안된다는 뜻

위 예시를 보면 제 3정규형까지는 만족을 하는 테이블이다. (학생번호, 과목)이 기본키로 지도교수를 알 수 있다.
하지만 같은 과목을 여러 교수가 가르칠 수 있기 때문에 과목 -> 지도교수 종속은 성립하지 않고 그 반대의 경우
지도교수를 알면 과목을 알 수 있기 때문에 지도교수 -> 과목 종속은 성립한다.

이처럼 후보키 집합이 아닌 칼럼이 결정자가 되어버리기 때문에 BCNF를 만족하지 않으므로 아래와 같이 분해해 주어야 한다.

 

 


참고 블로그

정규화(Normalization)란?