정규화란?
: 하나의 행에 여러 엔티티의 속성을 혼합하면 정보가 중복 저장되어 저장 공간을 낭비하게 됨, 또한 중복된 정보로 이상현상이 발생하는데 이를 해결하기 위한 과정
: 속성 간의 종속성으로 인한 이상현상이 발생하는 행을 분해하여 재설계함으로써 이상현상을 없애는 과정
: 데이터의 중복 방지, 무결성을 충족하기 위해 데이터베이스를 설계하는 방법
반정규화란?
: 시스템의 성능 향상을 위해 정규화덴 데이터 모델을 통합하는 작업으로 의도적으로 정규화 원칙을 위배하는 행위
: 테이블 통합/분할/추가, 중복 속성 추가 등이 존재
: 테이블이 단순해지고 효율성이 증가하지만 데이터의 일관성이나 무결성이 보장되지 않을 수 있음, 의도적으로 중복을 생성하여 검색 기능은 향상되지만 갱신, 삭제는 느려짐
•
반정규화의 대상
◦
수행속도가 많이 느린 경우
◦
테이블의 조인 연산을 지나치게 많이 사용하여 데이터를 조회하는 것이 기술적으로 어려운 경우
◦
테이블에 많은 데이터가 있고 다량의 범위 혹은 특정 범위를 자주 처리해야하는 경우
함수 종속성
: 함수 종속성은 어떤 테이블의 속성 A와 B에 대하여 A값에 의해 B값이 유일하게 정해지는 관계를 말하며 B는 A에 함수 종속이라고 한다.
⇒ 이때 A를 결정자라고 하고 B를 종속자라고 한다.
•
완전 함수 종속 : 기본키를 구성하는 모든 속성에 종속되는 경우
•
부분 함수 종속 : 기본키를 구성하는 속성의 일부에 종속되거나 기본 키가 아닌 다른 속성에 종속되는 경우
•
이행적 함수 종속 : A, B, C 세 속성이 있을 때, A→B, B→C 종속 관계에서 A→C가 성립하는 경우
: 위와 같은 테이블이 존재할때, 이름과 학년 어트리뷰트는 학번만 알아도 알 수 있지만 성적 어트리뷰트는 과목번호 정보를 추가로 알아야 확인할 수 있다.
: 이는 다음과 같은 종속성 표시가 가능하다
: 학년과 이름은 학번, 과목번호에 대해 부분 함수 종속이고 성적은 완전 함수 종속이다.
이상현상
: 테이블 내의 데이터들이 불필요하게 중복되어 테이블을 조작할 때 발생되는 데이터 불일치 현상
•
삽입 이상 : 원하지 않는 자료 삽입, key가 없어 삽입하지 못하는 경우
•
삭제 이상 : 하나의 자료를 삭제하려고 할때 그 자료가 포함된 튜플이 삭제되는 경우
•
갱신 이상 : 일부만 변경하여 데이터의 일관성, 원자성이 깨지는 경우
제1 정규형
: 릴레이션에 속하는 속성의 속성 값이 모두 원자값(Atomic Value)만으로 구성
⇒
•
삽입 이상 : 학생이 새 과목을 수강 신청할 때 반드시 학생의 학과와 지도교수를 알아야 한다. (불필요한 정보)
•
삭제 이상 : 300번 학생이 C400 과목을 취소하면, 해당 과목에 대한 정보가 모두 사라진다.
•
갱신 이상 : 100번 학생이 지도교수를 변경할 때, P1인 행을 모두 찾아서 변경해주어야 한다.
: 기본키(primary key)가 아닌 속성들이 기본키에 완전 함수 종속되지 못하고 부분 함수 종속되어 있기 때문
제2 정규형
: 제1 정규형이면서, 기본키(primary key)에 속하지 않은 속성 모두가 기본키에 완전 함수 종속인 정규형
⇒
•
삽입 이상 : 지도교수가 학과에 소속되어 있음을 추가할 때 반드시 지도 학생이 있어야 한다. (불필요한 정보 필요)
•
삭제 이상 : 300번 학생 정보가 삭제되는 경우, P3 교수의 학과 정보가 사라진다.
•
갱신 이상 : 지도교수의 학과가 변경되는 경우 모두 찾아서 변경시켜주어야 한다. (지도교수가 동일한 학생이 여러 명 있는 경우)
: 제2 정규형에서 이상현상이 여전히 발생하는 이유는 '이행적 함수 종속성' 때문
제3 정규형
: 제2 정규형이면서, 이행적 함수 종속성을 제거한 정규형
: 학번이 A, 지도교수 B, 학과가 C일때, 학번이 학과에 의존하기 때문
: 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닐 때 제3 정규형
BCNF
: 제3 정규형을 조금 더 강화시킨 개념
•
삽입 이상 : 새로운 교수가 특정 과목을 담당한다는 새로운 정보를 추가할 수 없다. 적어도 한 명 이상의 수강 학생이 필요하다.
•
삭제 이상 : 학번 100이 C234 과목을 취소하면, P2가 C234 과목을 담당한다는 정보도 삭제된다.
•
갱신 이상 : P1의 과목이 변경되면 P1인 행을 모두 찾아 변경시켜주어야 한다.
: 결정자(Determinant)가 후보키(Alternative Key)로 취급되고 있지 않기 때문
: 모든 결정자는 항상 후보키가 되도록 릴레이션을 분해해주면 BCNF를 만족