제1정규화(Normal Form): 하나의 Attribute에 들어있는 Domain은 원자값으로.
사번 부서 프로젝트
3212 SOC 인천국제공항01
8854 금융1 은행카드03, 대출관리01
1205 통신 T-WORLD04
이런식으로 있다고 할 때, 8854번 과장이 2개의 프로젝트를 맡았다고 해도 한 칸에 2개의 값이 들어가면 안된다.
따라서 이것은 아래와 같이 바꾸어 주어야 한다.
사번 부서 프로젝트
3212 SOC 인천국제공항01
8854 금융1 은행카드03
8854 금융1 대출관리01
1205 통신 T-WORLD04
제2정규화: 제1정규형에 속하고, 기본키(Primary Key)가 아닌 모든 키는 기본키에 종속이어야 한다.
사번 프로젝트 기여도 고객사
3212 인천국제공항01 A 인천국제공항
8854 은행카드03 B 국민은행
8854 대출관리01 A 우리금융
0071 대출관리01 C 우리금융
1205 T-WORLD04 C SK텔레콤
여기서 (사번, 프로젝트)를 Super Key라고 할 때,
어떤 사원이 어떤 프로젝트에 얼마나 기여했는지를 판단할 때에는 사번과 프로젝트가 모두 필요하지만,
고객사가 누구인지는 어떤 프로젝트인지만 보면 되고 사번은 필요하지 않다.
따라서 이것은 아래와 같이 2개의 Table로 바꾸어 주어야 한다.
사번 프로젝트 기여도
3212 인천국제공항01 A
8854 은행카드03 B
8854 대출관리01 A
0071 대출관리01 C
1205 T-WORLD04 C
프로젝트 고객사
인천국제공항01 인천국제공항
은행카드03 국민은행
대출관리01 우리금융
T-WORLD04 SK텔레콤
제3정규화: 제2정규형에 속하고, 기본키가 아닌 모든 키가 다른 키에 종속이면 안된다.
사번 부서 부서전화
3212 SOC 1234
2132 SOC 1234
8854 금융1 2235
1205 통신 9123
여기서 부서전화는 부서에 종속적이다.
따라서 이것은 아래와 같이 2개의 Table로 바꾸어 주어야 한다.
사번 부서
3212 SOC
2132 SOC
8854 금융1
1205 통신
부서 부서전화
SOC 1234
금융1 2235
통신 9123
BCNF(Boyce-Code NF: 보이스코드 정규화): Relation의 모든 결정자가 후보키이면 BCNF에 속한다.
비결정자에 대한 함수종속을 제거해서 만들 수 있다.
사번 OJT 사내강사
3212 DB 2231
8854 UNIX 1315
8854 J2EE 6711
1205 UNIX 0734
사내강사는 사번이나 OJT에 종속적이지 않고 (사번, OJT)에 종속적이므로 3정규형까지 만족한다.
(사번, OJT)는 사내강사를 결정한다.
또한 각 강사가 가르치는 OJT과목은 정해져 있으므로 사내강사는 OJT를 결정한다.
(사번, OJT) → 사내강사, 사내강사 → OJT
여기서 (사번, OJT)는 후보키이지만, 사내강사는 후보키가 아니므로 BCNF가 아니다.
따라서 이것은 아래와 같이 Table을 추가해야 한다.
(사원 OJT신청 테이블)
사번 OJT 사내강사(외래키)
3212 DB 2231
8854 UNIX 1315
8854 J2EE 6711
1205 UNIX 0734
(개설 OJT 테이블)
사내강사 OJT
3212 DB
8854 UNIX
8854 J2EE
1205 UNIX
제4정규화: 다중치 종속(MVD)이 있을때 이를 제거한 형태
OJT 사내강사 강의장소
DB A 803호
DB B 803호
DB A 세미나룸
DB B 세미나룸
UNIX A 실습실1
UNIX A 실습실2
사내강사와 강의장소 사이에는 어떤 관계가 없지만,
같은 OJT 과목이라도 사내강사가 여럿일 수 있고, 강의장소도 여러군데 일 수 있다.(다중치종속)
따라서 이것은 아래와 같이 2개의 Table로 바꾸어 주어야 한다.
OJT 사내강사
DB A
DB B
UNIX A
OJT 강의장소
DB 803호
DB 세미나룸
UNIX 실습실1
UNIX 실습실2
제5정규화: 어떤 Relation을 분해했을 때, 분해된 Relation을 join하면 원래의 Relation이 나와야 한다.
그렇지 못한 경유는 제5정규화를 해야 한다.
OJT 사내강사 교재
DB A DB이론
DB B DB이론
DB B 실습교재
이것을 아래와 같이 2개의 테이블로 나누었다고 하자.
(A)테이블
OJT 사내강사
DB A
DB B
(B)테이블
OJT 교재
DB DB이론
DB 실습교재
(A)와 (B)의 테이블을 Natural JOIN하면 아래처럼 되버린다.
OJT 사내강사 교재
DB A DB이론
DB A 실습교재 ←잘못된 tuple
DB B DB이론
DB B 실습교재
따라서 아래와 같이 (C)의 테이블을 추가해서 Natural Join 하여야 한다.
(C)테이블
사내강사 교재
A DB이론
B DB이론
B 실습교재
출처 : http://blog.naver.com/PostView.nhn?blogId=electronchoi&logNo=50028431118&redirect=Dlog&widgetTypeCall=true
'프로그램 > ETC' 카테고리의 다른 글
usb인식이 안될때 사용하는 프로그램 컴퓨터 성능향샹 (0) | 2012.08.30 |
---|---|
모바일 친화적 웹사이트 구축을 위한 전략 가이드 (0) | 2011.12.09 |
Rewrite 모듈지시자 (0) | 2010.11.25 |
[Apache] module-mod_rewrite URL 재작성 지침서 (8) | 2010.11.25 |
pear의 Spreadsheet_Excel_Writer를 사용하여 엑셀로 저장 (0) | 2010.10.26 |