정규화(Normalization)
한 릴레이션(Relation)에 여러 엔티티의 속성을 혼합하면 정보가 중복 저장되며 저장 공간을 낭비하게 된다.
또한 중복된 정보로 인해 '이상 현상'이 발생하게 된다. 이러한 문제를 해결하기 위해 정규화 과정을 거친다.
이상현상
테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 논리적으로 생기는 오류
- 삽입이상(Insersion Anomaly) : 자료를 삽입할 때 의도하지 않은 자료까지 삽입해야만 자료를 테이블에 추가가 가능한 현상
- 삭제 이상(Deletion Anomaly) : 어떤 정보를 삭제하면, 의도하지 않은 다른 정보까지 삭제되어버리는 현상
- 갱신 이상(Update Anomaly) : 중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상
함수 종속성(Functional Dependency)
함수 종속성은 어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 관계를 종속성이라고 한다.
- A → B 로 표기하며 A를 B의
결정자
라고 한다. - A → B 이면, A는 B를 결정한다고 하고, B는 A에
종속한다
라고 한다.
함수 종속성은 크게 완전 함수 종속
과 부분 함수 종속
, 이행적 함수 종속
으로 나뉜다.
- 완전 함수 종속 : 기본키를 구성하는 모든 속성에 종속되는 경우
- 부분 함수 종속 : 기본키를 구성하는 속성의 일부에 종속되거나, 기본키가 아닌 다른 속성에 종속되는 경우
- 이행적 함수 종속 : A, B, C 세 속성이 있고 A→B, B→C 종속 관계가 있을 때, A→C가 성립하는 경우
정규화란?
이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다.
정규화(Normalization) 의 기본 목표는 테이블 간에 중복된 데이터를 허용하지 않는다는 것이다. 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다. 정규화는 테이블을 어떻게 분해하는지에 따라 그 단계가 정해진다. 정규형이란 정규화된 결과를 말하며, 제1 정규형, 제2 정규형, 제3 정규형, BCNF, 제4 정규형, 제5 정규형이 있다.
정규화 원칙
- 정보의 무손실 : 분해된 릴레이션이 표현하는 정보는 분해되기 전의 정보를 모두 포함해야 한다.
- 최소 데이터 중복 : 이상 현상을 제거, 데이터 중복을 최소화
- 분리의 원칙 : 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리해서 표현
제1 정규형 (1NF)
제1 정규형은 릴레이션에 속하는 속성의 속성 값이 모두 원자값(Atomic Value)만으로 구성되어야 한다. 원자값이란 더 이상 쪼개질 수 없는 단위를 말한다.
위와 같이 릴레이션이 이루어져 있다면, 제1 정규형을 만족하지 못한다. 학번이 100인 학생의 과목 번호와 성적이 2개로 이루어져 있기 때문이다. 따라서 제1 정규형이 되려면 다음과 같이 속성 값을 분리해주어야 한다.
속성간의 관계를 나타내면 다음과 같다.
제2 정규형 (2NF)
제2 정규형은 제1 정규형이면서, 기본키(primary key)에 속하지 않은 속성 모두가 기본키에 완전 함수 종속인 정규형을 말한다.
제1 정규형은 기본키(primary key)가 아닌 속성들이 기본키에 완전 함수 종속되지 못하고 부분 함수 종속되어 있기 때문에 이상현상이 발생한다. 따라서, 제 2 정규화 과정에서는 각 속성들이 모두 완전 함수 종속이 되도록 릴레이션을 분리시켜준다.
제 2 정규형에서 발생할 수 있는 이상현상?
- 삽입 이상 : 지도교수가 학과에 소속되어 있음을 추가할 때 반드시 지도 학생이 있어야 한다.
- 삭제 이상 : 300번 학생이 자퇴하는 경우 P3 교수의 학과 정보가 사라진다.
- 갱신 이상 : 지도교수의 학과가 변경되는 경우 모두 찾아서 변경시켜주어야 한다. (지도교수가 동일한 학생이 여러 명 있는 경우)
제2 정규형에서 이상현상이 여전히 발생하는 이유는 이행적 함수 종속성
때문이다.
위 예시에서는 학번 → 지도교수, 지도교수 → 학과, 학번 → 학과의 관계가 존재한다. 따라서, 지도교수의 학과를 추가하기 위해서 지도 학생이 필요하게 되고, 학생이 자퇴하였는데 지도교수의 학과 정보가 사라지는 문제점이 발생하게 되는 것이다.
제3 정규형 (3NF)
제3 정규형은 제2 정규형이면서, 이행적 함수 종속성을 제거한 정규형을 말한다. 즉, 기본키 이외의 속성이 그 외 다른 속성을 결정할 수 없는 것이다.
제 3 정규화는 이행적 함수 종속 관계에 있는 속성을 분리한다. 정규화된 릴레이션은 다음과 같다.
BCNF
BCNF 정규화란 제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것이다.
즉, BCNF 정규화는 제 3 정규형을 조금 더 강화시킨 개념이다.
아래의 릴레이션은 제 3 정규형을 만족한다. (한 교수당 하나의 수업만 맡는다고 가정)
이 경우에 생길 수 있는 이상현상은 다음과 같다.
- 삽입 이상 : 새로운 교수가 특정 과목을 담당한다는 새로운 정보를 추가할 수 없다. 적어도 한 명 이상의 수강 학생이 필요하다.
- 삭제 이상 : 학번 100이 C234 과목을 취소하면, P2가 C234 과목을 담당한다는 정보도 삭제된다.
- 갱신 이상 : P1의 과목이 변경되면 P1인 행을 모두 찾아 변경시켜주어야 한다.
이러한 이상현상이 생기는 이유는, 결정자(Determinant)가 후보키(Alternative Key)가 아니기 때문이다.
위의 릴레이션에서 담당 교수는 그 자체만으로는 후보키가 될수 없지만, 과목명을 결정할 수 있기 때문에 결정자에 속한다.
즉, 후보키가 아닌 결정자가 존재한다.
위와 같은 이상현상을 없애기 위해 모든 결정자는 항상 후보키가 되도록 릴레이션을 분해
해주면 BCNF를 만족하게 된다.
References
https://mangkyu.tistory.com/110
https://dev-coco.tistory.com/63
https://dodo000.tistory.com/20
https://rebro.kr/160
'TIL' 카테고리의 다른 글
[TIL] 페이지 교체 알고리즘 (1) | 2024.09.02 |
---|---|
[TIL] 네트워크 기본 정리 (0) | 2024.08.26 |
[TIL] STOMP 개념 (2) | 2024.07.28 |
[TIL] Interrupt 란? (3) | 2024.07.15 |
[TIL] SSL/TLS (0) | 2024.07.07 |