Search
Duplicate
🌦️

정규화

정규화란?

: 하나의 행에 여러 엔티티의 속성을 혼합하면 정보가 중복 저장되어 저장 공간을 낭비하게 됨, 또한 중복된 정보로 이상현상이 발생하는데 이를 해결하기 위한 과정
: 속성 간의 종속성으로 인한 이상현상이 발생하는 행을 분해하여 재설계함으로써 이상현상을 없애는 과정
: 데이터의 중복 방지, 무결성을 충족하기 위해 데이터베이스를 설계하는 방법

반정규화란?

: 시스템의 성능 향상을 위해 정규화덴 데이터 모델을 통합하는 작업으로 의도적으로 정규화 원칙을 위배하는 행위
: 테이블 통합/분할/추가, 중복 속성 추가 등이 존재
: 테이블이 단순해지고 효율성이 증가하지만 데이터의 일관성이나 무결성이 보장되지 않을 수 있음, 의도적으로 중복을 생성하여 검색 기능은 향상되지만 갱신, 삭제는 느려짐
반정규화의 대상
수행속도가 많이 느린 경우
테이블의 조인 연산을 지나치게 많이 사용하여 데이터를 조회하는 것이 기술적으로 어려운 경우
테이블에 많은 데이터가 있고 다량의 범위 혹은 특정 범위를 자주 처리해야하는 경우

함수 종속성

: 함수 종속성은 어떤 테이블의 속성 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를 만족

참고