2. 정규화( Nomalization)
정규화의 기본 목표는 테이블간 중복된 데이터를 허용하지 않는다는 것이다. 이로써 무결성(정확성/일관성 보장)을 유지할 수 있으며, DB저장용량 또한 줄일 수 있다. 정규화는 또한 이상문제들을 해결하기 위해 속성(컬럼)들 끼리 종속관계를 분석하여 여러 테이블로 나누는 과정이라고 표현 할 수 있다. 테이블을 여러개로 분해하면 속도는 느려질 수 있지만, 각종 이상문제들을 해결하기위해 정규화가 필요하다.
- 이상문제 종류
- 삽입이상
- 데이터를 저장할 때 원하지 않는 정보가 함께 삽입되는 경우
- 삭제이상
- 튜플 삭제 시 유지되어야 되는 정보도 함께 삭제되는 경우
- 갱신이상
- 중복되는 튜플 중 일부 속성만 갱신되어 모순이 발생하는 경우
1) 제 1정규화 (도메인 원자값)
테이블의 컬럼이 원자값을 갖도록 테이블을 분해하는 것
다음과 같이 테이블을 변경 시키는 것이다. 수강신청 과목은 여러개의 값으로 이루어져 있어 이를 나누어준 것이다.
2) 제 2정규화 (부분적 함수종속제거)
제 1정규형에 대해 부분적 함수종속을 완전 함수종속을 만족하도록 테이블을 분해한 것
※완전 함수종속 : 기본키의 부분집합이 결정자가 되어선 안된다. 즉, 기본키가 복합키일 경우 그중 일부에 의해 다른 컬럼의 값이 결정되는 것을 말한다.
(2021-06-16 그림수정)
위의 예에서 고객번호는 주문 수량을 결정하고 있고, 주문 물건만 사용하여 상점을 결정할 수 있다. 이런 경우 PK의 일부가 결정자가되어 완전 함수종속에서 벗어나기 때문에 다음과 같이 테이블을 나누어 준다.
3) 제 3 정규화 (이행적 종속 제거)
제 3 정규화는 제 2정규형에 대해 이행적 종속을 제거하는 것이다.
※이행적 종속 : A -> B이고 B -> C일때 A -> C 가 성립하는 것을 말한다.
위의 예에서 고객번호가 주문물건을 결정하고, 주문물건은 주문액을 결정한다.
(고객번호(A)->주문물건(B), 주문물건(B)->주문액(C))
이럴 경우 고객번호가 주문액을 결정하고 있다고 본다면 이행적 종속이 성립하는 것이다.
따라서 위의 그림과 같이 만들어줌으로써 이행적 종속을 없애는 것이다.
4) 보이스코드 정규형 BCNF (결정자가 후보키)
BCNF정규화는 비결정자에 의한 함수 종속 관계를 해결하는 것이다. 븍, 모든 후보키에 대해 만족할 만한 함수 종속관계를 유지시키는 것을 말한다.
다음과 같이 (고객번호, 주문물건)에 따라 상점이 결정된다고 할 때 상점에 따라 주문 물건이 결정된다.
따라서 위와 같이 테이블을 나누어 줌으로써 모든 후보키에 대해 함수 종속 관계를 유지시킵니다.
https://minimax95.tistory.com/entry/정규화Normalization-개념과-기본-과정
https://mangkyu.tistory.com/110
'ComputerScience > Database' 카테고리의 다른 글
[DataBase] 6. 조인(JOIN) (0) | 2021.06.03 |
---|---|
[DataBase] 5. 파티셔닝/ 샤딩 (0) | 2021.06.03 |
[DataBase] 3. 스키마 (0) | 2021.06.03 |
[DataBase] 2. 트랜잭션(Transaction) (0) | 2021.05.31 |
[Database] 1. Index (0) | 2021.05.31 |
댓글