반응형
1. 정규화의 개념
정규화는 테이블의 속성들이 상호 종속적이 관계를 갖는 특성을 이용하여 테이블을 무손실 분해하는 과정으로,
정규화의 목적은 가능한 한 중복을 제거하여 삽입, 삭제, 갱신, 이상의 발생 가능성을 줄이는 것이다.
2. 정규화의 과정
정규화 과정 단계 암기는 필수!!!!
정규화라는 출소자가 말했다.
두부이겨다줘(도부이결다조)
도메인의 원자값
부분적 함수 종속 제거
이행적 함수 종속 제거
결정자이면서 후보키가 아닌 것 제거
다치 종속
조인 속성 이용
정규화의 과정을 알아보기 위해 <주문목록> 테이블을 예시로 들어보자.
제품번호 | 제품명 | 재고수량 | 주문번호 | 고객번호 | 주소 | 주문수량 |
1001 | 모니터 | 2000 | A345 D347 |
100 200 |
서울 부산 |
150 300 |
1007 | 마우스 | 9000 | A210 A345 B230 |
300 100 200 |
광주 서울 부산 |
600 400 700 |
1201 | 키보드 | 2100 | D347 | 200 | 부산 | 300 |
- 제 1정규형
- 제 1정규형은 테이블에 속한 모든 속성의 도메인이 원자 값만으로 되어있는 정규형이다. (모든 속성 값은 원자 값)
- <주문목록> 테이블에서는 하나의 제품에 대해 여러 개의 주문 관련 정보(주문번호, 고객번호, 주소, 주문수량)가 발생하고 있다. 따라서 <주문목록> 테이블은 제 1정규형 테이블이 아니다.
문제. <주문목록>테이블에서 반복되는 주문 관련 정보를 분리하여 제 1정규형으로 만드시오.
<제품> 테이블
제품번호 제품명 재고수량 1001 모니터 2000 1007 마우스 9000 1201 키도브 2100 <제품주문> 테이블
주문번호 제품번호 고객번호 주소 주문수량 A345 1001 100 서울 150 D347 1001 200 부산 300 A210 1007 300 광주 600 A345 1007 100 서울 400 B230 1007 200 부산 700 D347 2101 200 부산 300
1차 정규화 과정으로 생성된 <제품주문> 테이블의 기본키는 (주문번호, 제품번호) 이고
함수적 종속으로 표현하자면,
주문번호, 제품번호 -> 고객번호, 주소, 주문수량
주문번호 -> 고객번호, 주소
고객번호 -> 주소
- 제 2정규형
- 제 2정규형은 테이블이 제 1정규형이고, 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족하는 정규형
- <주문목록> 테이블이 <제품> 테이블과 <제품목록> 테이블로 무손실 분해되면서 모두 제 1정규형이 되었지만 그 중 <제품주문> 테이블에는 기본키인 (주문번호, 제품번호)에 완전 함수적 종속이 되지 않는 속성이 존재한다.
- 주문수량은 기본키에 대해 완전 하뭇적 종속이지만 고객번호와 주소는 주문번호에 의해서도 결정될 수 있으므로, 기본키에 대해 완전 함수적 종속이 아니다. 따라서 <제품주문> 테이블은 제 2정규화가 아니다.
문제. <제품주문> 테이블에서 주문번호에 함수적 종속이 되는 속성들을 분리하여 제 2정규형을 만드시오.
<주문목록>
주문번호 제품번호 주문수량 A345 1001 100 D347 1001 200 A210 1007 300 A345 1007 100 B230 1007 200 D347 2101 200 <주문>
주문번호 고객번호 주소 A345 100 서울 D347 200 부산 A210 300 광주 B230 200 부산
제 2정규화 과정으로 <주문> 테이블의 기본키는 주문번호이며, <주문> 테이블에는 아직도 같은 함수적 종속들이 존재한다.
주문번호 -> 고객번호, 주소
고객번호 -> 주소
- 제 3정규형
- 제 3정규형은 테이블이 제 2정규형이고 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수적 종속을 만족하지 않는 정규형
- <제품주문> 테이블이 <주문목록> 테이블과 <주문> 테이블로 무손실 분해되면서 모두 제 2정규형이 되었지만 <주문> 테이블에서 고객번호가 주문번호에 함수적 종속이고, 주소가 고객번호에 함수적 종속이므로 주소는 기본키인 주문번호에 대해 이행적 함수적 종속을 만족한다.
- 주문번호 -> 고객번호, 고객번호 -> 주소 이므로 주문번호 -> 주소는 이행적 함수적 종속이 된다. 따라서 <주문> 테이블은 제 3규형이 아니다.
문제. <주문> 테이블에서 이행적 함수적 종속을 제거하여 제 3정규형을 만드시오.
<주문>
주문번호 고객번호 A345 100 D347 200 A210 300 B230 200
<고객>
고객번호 주소 100 서울 200 부산 300 광주
<주문> 테이블에서 이행적 함수적 종속(즉 주문번호 -> 주소)를 제거하여 무손실 분해함으로써 위와 같이 제 3정규형인 <주문> 테이블과 <고객> 테이블이 생성된다.
- BCNF
- BCNF는 테이블에서 모든 결정자가 후보키인 정규형
- 일반적으로 제 3정규형에 후보키가 여러 개 존재하고, 이러한 후보키들이 서로 중첩되어 나타나는 경우에 적용 가능
- 제 4정규형
- 제 4정규형은 테이블에 다중 값 종속(MVD) A ->> B가 존재할 경우 테이블의 모든 속성이 A에 함수적 종속 관게를 만족하는 정규형
- 제 5정규형
- 제 5정규형은 테이블의 모든 조인 종속(JD)이 테이블의 후보키를 통해서만 성립되는 정규형
- 비정규화(Denormalization, 역정규화)
- 정규화로 인해 여러 개로 분해된 릴레이션들에서 원하는 정보를 얻기 위해서는 조인을 사용하여 다시 연결해야 하는데, 지나치게 자주 조인을 사용하면 응답 속도가 떨어지므로 정규화에 위배되지만 성능 향상을 위해 다시 테이블을 합쳐야 한다. 이것을 비정규화 또는 역정규화라고 한다.
[출처] 2020 시나공 기본서 정보처리산업기사 실기
반응형
'정보처리산업기사_실기_기록용' 카테고리의 다른 글
[데이터베이스] 병행 제어(Concurrency Control) (0) | 2021.10.15 |
---|---|
[데이터베이스] 트랜잭션(Transaction) (0) | 2021.10.15 |
[데이터베이스] 정규화 - 함수적 종속 (0) | 2021.10.07 |
[데이터베이스] SQL - DCL (0) | 2021.10.05 |
[데이터베이스] 정규화 - 이상(Anomaly) (0) | 2021.10.04 |