정규화

이한수·2022년 3월 12일
0

DataBase

목록 보기
2/5

공부 내용 정리 목적입니다.
잘못알고 있는 부분이 있을 경우 알려주신다면 감사하겠습니다.
참고 : https://rebro.kr/160
책 : 데이터베이스개론

정규화의 개념?

함수 종속성을 이용하여 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해해서 , 이상 현상이 발생하지 않는 올바른 릴레이션으로 만들어 가는 과정을 정규화라고 한다.

이상 현상의 종류

1)삽입 이상 : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
2)갱신 이상 : 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
3)삭제 이상 : 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제

즉 , 위와 같은 문제가 발생하지 않게끔 릴레이션을 관련이 있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정이다.

함수 종속

X와 Y라는 부분집합이 있을때 , X값에 대한 Y값이 항상 하나면 ,
X는 결정자가 되고 Y는 종속자가 된다.

예를 들어 , 이름 , 주민번호 , 성별 라는 속성을 가진 릴레이션이 있을때 ,
해당 주민번호에 따라 이름과 성별이 결정되는 것처럼 말이다.
보통 이와 같은 종속적 관계를 판단할때 기본키와 후보키만 되겠구나라고 생각할 수 있겠지만 , Y값을 유일하게 결정하는 속성이면 결정자가 될 수 있다.
다시 말해 결정자라는 것은 기본키와 후보키처럼 단 하나만 릴레이션에 존재할 필요는 없고 , 해당 결정자 값으로 인해 결정되는 종속자의 값이 있으면서 , 동일한 결정자를 가진 종속자들은 서로 같은 값을 가지면 된다.

정규형 종류

  • 기본 정규형
    • 제1정규형
    • 제2정규형
    • 제3정규형
    • BCNF
  • 고급 정규형
    • 제4정규형
    • 제5정규형

위와 같은 정규형들이 있으며 각 정규형 마다 만족시켜야하는 제약 조건이 존재한다.
정규형의 차수가 높아질수록 제약조건이 많아지고 엄격해지지만 , 데이터 중복이 그만큼 줄어들어
이상현상을 방지할 수 있다.
단 , 그렇다고해서 모든 릴레이션이 5정규형에 속해야 되는 것은 아니므로 각 릴레이션의 특성을 고려해서
적합한 정규형을 선택해야 한다.

제1정규형

  • 릴레이션에 속한 모든 속성의 도메인 원자 값으로만 구성되어 있으면 제 1정규형에 속한다.

위 사진을 아래와 같이 다중값에서 단일값을 가지도록 수정하면 제1정규형을 만족한다.


제1 정규형을 만족하지만 발생할 수 있는 이상현상을 살펴보자면 ,

  • 삽입 이상 : 학생이 새 과목을 수강 신청할 때 불필요한 정보를 필요로 한다.

  • 삭제 이상 : 300번 학생이 C400 과목을 취소하면, 해당 과목에 대한 정보가 모두 사라진다. 즉 , 과목 관련 내용만 사라져야하는데 그 밖의 다른 정보들도 함께 삭제된다.

  • 갱신 이상 : 100번 학생의 지도 교수 혹은 학과를 수정할 때 , 위의 2개 튜플 중 하나의 튜플의 정보만 수정되어 동일한 학생이 2개의 학과 혹은 지도교수를 가지게 되어 데이터 일관성을 유지하기 힘들다.

제2정규형

  • 릴레이션이 제1정규형에 속하고 , 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제2 정규형에 속한다.(부분 함수 종속을 제거)

부분 함수 종속이란 , 속성의 기본키가 2개의 속성으로 묶여 구성되었을 때 ,
그 종속관계가 2개의 속성 중 일부의 속성에만 종속되는 관계를 의미한다.


이 상태에서 학번과 과목번호가 기본키로 설정되어 있다 가정할 때 ,
학번 -> 지도교수와 학과를 결정해준다. 반면에
과목번호가 지도교수와 학과를 결정해주지 못하므로 부분 함수 종속관계에 속하게 된다.

위와 같이 릴레이션을 분할한다면 ,
{학번,과목번호} -> 성적의 관계가 완전 종속 관계가 만족된다.
성적의 값을 찾기 위해서는 학번과 그 학번학생의 어느 과목인지 정보2개가 다 필요하기 때문이다.

단 , 주의할 것은 릴레이션을 분해할 때 분해된 릴레이션들을 자연 조인하여 분해전의 릴레이션으로 다시 복원할 수 있어야 한다.

제2정규형 또한 이상 현상이 발생할 수 있다.

  • 삽입 이상 : 지도교수가 학과에 소속되어 있음을 추가할 때 반드시 지도 학생이 있어야 한다. (불필요한 정보 필요)

  • 삭제 이상 : 300번 학생이 자퇴하는 경우 P3 교수의 학과 정보가 사라진다.

  • 갱신 이상 : 지도교수의 학과가 변경되는 경우 모두 찾아서 변경시켜주어야 한다. (지도교수가 동일한 학생이 여러 명 있는 경우)

이같은 문제가 발생하는 이유는 함수 종속관계를 여러개 포함하고 있어 결과적으로 이행적 함수 종속이 생기기 때문이다.

이행적 종속 관계? A->B이고 B->C일 때 A->C가 성립하는 것을 의미.

제3정규형

  • 릴레이션이 제2정규형에 속하고 , 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제3 정규형에 속한다.

일반적으로 이러한 X,Y,Z의 이행적 관계에서 이 같은 함수 종속 관계의 의미가 유지되도록 분리하기 위해서 X,Y속성 집합의 릴레이션과 Y,Z 속성 집합의 릴레이션으로 분할한다.

아래의 이행적 함수 관계를 가지는 릴레이션을 분할 한다.

  • 학번 -> 지도교수
  • 지도교수 -> 학과
  • 학번 -> 학과

분할 한 뒤

  • 학번 -> 지도교수
  • 지도교수 -> 학과

BCNF(보이스/코드정규형)

  • 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키이면 보이스/코드 정규형에 속한다. 이를 강한 제 3정규형이라고도 한다.

  • 삽입 이상 : 새로운 교수가 특정 과목을 담당한다는 새로운 정보를 추가할 수 없다. 적어도 한 명 이상의 수강 학생이 필요하다.

  • 삭제 이상 : 학번 100이 C234 과목을 취소하면, P2가 C234 과목을 담당한다는 정보도 삭제된다.

  • 갱신 이상 : P1의 과목이 변경되면 P1인 행을 모두 찾아 변경시켜주어야 한다.

이러한 이상현상이 생기는 이유는, 결정자(Determinant)가 후보키(Alternative Key)로 취급되고 있지 않기 때문이다.

후보키는 슈퍼키(super key) 중에서 최소성을 갖는 키이므로 이 릴레이션에서는 (학번, 과목명)이나 (학번, 담당교수)가 후보키가 된다. 담당 교수만으로는 후보키가 될 수 없다.

하지만, 후보키가 아님에도 과목명을 결정할 수 있기 때문에 담당 교수는 결정자에 속한다.

이 이상현상을 해결하기 위해서 모든 결정자는 항상 후보키가 되도록 릴레이션을 분해해주면 강한 제3 정규형, 즉 BCNF를 만족하게 된다.

제4정규형과 제5정규형

  • 제4정규형 : 보이스/코드 정규형을 만족하면서 함수 종속이 아닌 다치 종속을 제거해야 만족할 수 있다.
  • 제5정규형 : 제4정규형을 만족하면서 후보키를 통하지 않는 조인 종속을 제거해야 만족할 수 있다.

모든 릴레이션이 5정규형을 만족할 필요는 없으며 오히려 만족할때까지 분해할 경우
오히려 비효율적인 경우가 많아 일반적으로 제3정규형이나 BCNF 선에서 해결한다.

profile
성실하게

0개의 댓글