* 정규화
함수적 종속(functional dependency) 관계를 이용하여 삽입, 삭제, 변경 시 발생할 수 있는 이상 현상(anomaly) 제거하여 관계 데이터 모델 설계의 질을 높이기 위한 기법
이상 현상을 없애기 위해서 Table을 분리하고 join 하는 과정을 거쳤지만 Side Effect으로 시간이 오래걸리는 현상이 발생 함
* 함수적 종속(functional dependency)
- 속성 X의 값이 속성 Y의 값을 결정하면 Y는 X에 함수적 종속
- 즉, X의 값을 알면 Y의 값도 알 수 있음
예시)
학번 → 전공
컴퓨터_일련 번호 → 기억_장치_용량
(학번, 과목명) → 점수
* Determinant 형태
학번 | 기숙사 | 월세 |
100 | 월평관 | 320 |
150 | 아주관 | 100 |
200 | 월평관 | 320 |
250 | 우성관 | 200 |
300 | 월평관 | 320 |
함수적 종속 : 학번 -> 기숙사 -> 월세
- 학번에서 겹치는 부분이 없어 유일성이 있는 key가 되어 진다. 따라서 학번 -> 기숙사, 학번 -> 월세는 함수적 종속 관계를 갖는다.
- 기숙사에서는 월평관이 겹치긴 하지만, 각 기숙사마다 다른 월세 가격을 가지고 있기 때문에, 기숙사 -> 월세는 함수적 종속 관계를 갖는다.
* 정규화(Normalization)의 종류
: 함수적 종속 관계를 이용한 좋은 데이터베이스 설계, 각 정규형마다 부작용이 존재
: 정규화가 되기 위해서는 무조건 제 1 정규형은 만족해야 함
* 제 1정규형
- 조건1. 각 속성은 하나의 도메인(Domain)을 가지며, 속성의 순서는 중요하지 않음
- 조건2. 같은 튜플은 없어야 하고 튜플의 순서도 중요하지 않음
- 조건3. 각 셀은 하나의 값만 보유
공급원 | 주소 | ITEM | 가격 |
갑 | 서울시 | 볼펜 | 100 |
갑 | 화성시 | 연필 | 1000 |
을 | 용인시 | 지우개 | 500 |
을 | 수원시 | 샤프 | 3 |
을 | 평택시 | 색연필 | 20 |
* 중복, 삽입, 삭제, 갱신 시 변경이상(Modification Anomaly)
* 제 2 정규형
- Partial key dependence를 없앤 것
- 2개 이상의 Attribute를 가지게 되면, 그 중에 하나가 Partial key가 된다.
- Partial key -> 다른 키로 가는 함수가 있으면 partial key dependence
- 2개 이상의 Attribute를 가지게 됨 둘중에 하나가 partial key
- 이걸 떼어 내는 Table을 만들게 되면 제 2 정규형이 되는 것
Activity(SID, Activity, Fee) -> SID랑 Activity가 묶여야( 2개 이상의 Attribute) key가 될수 있음, Partial key
SID | Activity | Fee |
100 | 축구 | 200 |
150 | 야구 | 50 |
150 | 배드민턴 | 50 |
175 | 야구 | 50 |
200 | 배드민턴 | 50 |
STU-ACT(SID, Activity)
SID | Activity |
100 | 축구 |
150 | 야구 |
150 | 배드민턴 |
175 | 야구 |
200 | 배드민턴 |
ACT-COST(Activity, Fee)
Activity | Fee |
축구 | 200 |
야구 | 50 |
배드민턴 | 50 |
* 제 3 정규형
- 2행 함수적 종속 관계를 없앤것
- Attribute가 3개 일때, A->B, B->C인 관계가 2행 함수적 종속 관계이다.
: Buliding -> Fee
: SID -> Building -> Fee
- 이걸 떼어 내게 되면 No Transitive Function Dependency가 되면서 제 3정규형이 되는 것이다.
SBF(SID, Building, Fee)
SID | Building | Fee |
100 | 성호관 | 120 |
150 | 팔달관 | 130 |
200 | 성호관 | 120 |
250 | 다산관 | 110 |
300 | 성호관 | 120 |
SB(SID, Building)
SID | Building |
100 | 성호관 |
150 | 팔달관 |
200 | 성호관 |
250 | 다산관 |
300 | 성호관 |
SF(Building, Fee)
Building | Fee |
성호관 | 120 |
팔달관 | 130 |
성호관 | 120 |
다산관 | 110 |
성호관 | 120 |
* Boyce-Codd 정규형
- Candidate Key -> Determinant로 만들어 주는 것, 결국 둘 중 하나를 뽑아야 하는 것
- (SID, Major) → Fname / (SID, Fname) → Major
SID | Major | Fname |
100 | 수학 | 이순신 |
150 | 심리학 | 홍길동 |
200 | 컴퓨터공학 | 김시민 |
250 | 경제학 | 홍길동 |
300 | 컴퓨터공학 | 김시민 |
300 | 수학 | 권율 |
SID | Major |
100 | 수학 |
150 | 심리학 |
200 | 컴퓨터공학 |
250 | 경제학 |
300 | 컴퓨터공학 |
300 | 수학 |
Major | Fname |
수학 | 이순신 |
심리학 | 홍길동 |
컴퓨터공학 | 김시민 |
경제학 | 홍길동 |
컴퓨터공학 | 김시민 |
수학 | 권율 |
* 제 4정규형
- Multivalued Dependencies(가치 종속) => 함수x
- SID ->-> Major / SID ->-> Activity
SID | Major | Activity |
100 | 기계과 | 수영 |
100 | 전자과 | 수영 |
100 | 기계과 | 축구 |
100 | 전자과 | 축구 |
150 | 물리과 | 농구 |
200 | 물리과 | 농구 |
SID | Major |
100 | 기계과 |
100 | 전자과 |
150 | 물리과 |
200 | 물리과 |
SID | Activity |
100 | 수영 |
100 | 축구 |
150 | 농구 |
200 | 농구 |
SID | Major | Activity |
100 | 기계과 | 수영 |
100 | 전자과 | 수영 |
* 제 5 정규형
: Lossless Join을 만족 되게끔 하면 제 5 정규형
SID | Fname | Building | Fee |
100 | 이순신 | 성호관 | 120 |
150 | 홍길동 | 팔달관 | 130 |
175 | 김시민 | 성호관 | 150 |
200 | 이순신 | 다산관 | 110 |
215 | 권율 | 성호관 | 120 |
SIN (SID,Name)
SIBLDG(SID, Building)
SIF(SID, Fee)
* 도메인/키 정규형
- 더이상 anomally가 발생되지 않음이 증명
* 정규화를 하면서 알아야 하는 Point
- Insert, Delete, Modify 시에 생기는 Anomally를 서술
- Anomally가 왜 생겼는지를 알아야함 -> 이걸 알기 위해서는 무엇이 키인지 알아야 함
'데이터베이스 관리론' 카테고리의 다른 글
[데이터베이스 관리론] 데이터베이스 관리 (0) | 2024.06.15 |
---|---|
[데이터베이스 관리론] 관계 데이터 모델 (0) | 2024.04.22 |
[데이터베이스 관리론] ER Modeling (0) | 2024.03.17 |
[데이터베이스 관리론] 데이터 추상화(abstraction)와 DBMS/사용자 그리고 데이터베이스 시스템 개발 단계 (0) | 2024.03.16 |
[데이터베이스 관리론] 데이터베이스의 정의와 데이터 모델 (0) | 2024.03.13 |