개발자 끄적끄적
함수의 종속성과 정규화 본문
<함수적 종속성>
- 실행 예
S(S#, SNAME, STATUS, CITY) //제품
PRIMARY KEY(S#)
P(P#, PNAME, COLOR, WEIGHT, CITY) //공급자
PRIMARY KEY(P#)
SP(S#, P#, QTY)
PRIMARY KEY(S#, P#)
FOREIGN KEY(S#)REFERENCES S
FOREIGN KEY(P#)REFERENCES P
<기초적 정의들>
SCP 테이블
S# CITY P# QTY
S1 LONDON P1 100
S1 LONDON P2 100
- R을 릴레이션이라고하고 X와 Y를 R의 속성 집합의 임의의 부분 집합이라고 하자
그러면 'X가 Y에 함수적으로 종속' 되기 위한 필요 충분 조건은 R에 있는 각각의
X 값이 R에 있는 정확히 하나의 Y값과 관련을 갖는 것이다
- 이를 기호로 표현하면 다음과 같다
X -> Y("X가 Y를 함수적으로 결정한다")
- 시간 : 독립적인 의미
- SCP를 위한 무결성 제약조건
- X가 릴레이션 R의 후보키일 떄,
만일 X가 기본키라면 R의 모든 속성 Y는 X에 함수적으로 종속되어야 한다
- 후보키의 정의
- 예
P# -> {P#, PNAME, COLOR, WEIGHT, CITY}
- R이 FD A->B를 만족하고 A가 후보키가 아니면, R은 어떤 종류의 중복(redundancy)을 포함하고 있다
- SCP : S# -> CITY
<소개>
- 훌륭한 설계 윈칙
- 한가지 사실은 한 곳에서만 나타난다
- 중복성 배제
- 정규화의 주제는 이와 같은 간단한 원리를 보다 형식화한 것
- 이 영역은 데이터 베이스 설계 영역에서 매우 실제적은 영역이다
- 정규화
- 특정 릴레이션이 정규화되어도, 여전히 바람적이지 못한 성질들을 가지고 있고, 보다 바람직한 형태로 바꾸어 줄 수 있다
- 정규형
- 특정 제약 조건 집합을 만족한다면
- ex) 스칼라 값(원자값)만을 포함한다면 1NF(Nomal Form->제1 정규형)
- 정규형
- 전체 릴레이션(정규화 혹은 비정규화된(비정규화는 데이터베이스가 아닌 파일에 가깝다))
- 1NF릴레이션(정규화된 릴레이션)
- 2NF릴레이션
- 3NF릴레이션
- BCNF릴레이션
- 4NF릴레이션
- 5NF릴레이션
*"정규화되다"와 "1NF"은 정확히 같은 의미를 갖는다
- 정규화 과정
- 주어진 릴레이션들의 모임을 더 바람직한 어떤 형태로 점차 유도해가는 과정
- 과정은 가역적이다(ex. 2NF -> 3NF)
- 어떠한 정보도 잃지 않는다
- 이 장의 구조
- 무손실 분해
- FD의 결정적인 중요성
- 대안적 분해(특정 릴레이션의 최선이 분해를 선택)
<무손실 분해와 함수적 종속성>
- 무손실(무손실 분해)
- 이 과정이 특정 릴레이션을 다른 릴레이션들로 분해하는 것을 포함하고 있음을 보았는데 더욱이 이 분해는 과정 중에 정보의 손실을 막기 위해 가역적이어야 할 필요가 있다
- 특정 분해가 무손실 인지의 문제는 함수의 종속성의 개념과 친밀하게 맺어져있다
- 정확하게 무엇 때문에 첫 번째 분해는 무손실이 되고, 두 번째 분해는 손실이 되었는가?
- 분해
- 프로젝션의 과정(테이블을 쪼개기)
- 가역성
- 최초의 릴레이션이 프로젝션을 조인한 것과 동일
- 프로젝션 : 정규화 과정에서 분해 연산자
- 조인(자연 조인(Natural join)) : 재결합 연산자
<함수적 종속성(functional dependence)의 개념>
- 특정 릴레이션 안에서 하나의 속성 집합에서 다른 속성으로의 다대일 관계
- 항상 만족된다(satisfied all times)
<함수적 종속성에 대한 추가적인 내용>
- 좌변 최소성 FDs
- 어떤 FD가 좌변 최소성이 있다는 것은 좌변이 "너무 크지 않다"는 것을 으미ㅣ
- In SCP,
- {S#, P#} -> CITY != S# -> CITY
- CITY는 S#에 최소성으로 종속되어 있고, {S#, P#}에는 최소성으로 종속되어있지 않다
- FD-다이어그램
- R은 릴레이션이고, I가 R에 적용되는 FD들의 최소성 집합이라고 하자
- S#(기본키)
-> SNAME, STATUS, CITY
S#, P#
-> QTY
P#
-> PNAME, COLOR, WEIGHT, CITY
후보키로부터의 화살표(실제는 기본키) : 각각의 후보 키가 갖는 어떠 한 값에 대응하여 나머지 속성들의 하나의 값이 항상 존재한다(화살표는 결코 삭제될 수 없다)
만일, 그 밖의 다른 화살표들이 있으면, 문제가 발생한다. 따라서 정규화의 과정은, 매우 약식으로, 후보 키에서 나오지 않는 화살표들을 제거하는 과정으로 특정 지울 수 있다
- FD는 의미적 개념
- FD를 인식한다는 것은 데이터가 무엇을 의미하는 지 이해하는 과정의 일부분이다(ex. FD S# -> CITY)
- 데이터베이스가 표현하고 있는 실세계에는, 각각의 공급자는 정확히 한 도시에만 있어야 한다는 제약 사항이 있다
- 이 제약은 그 상황에 대한 의미의 일부분이므로, 데이터베이스 내에서 어떻게든 관찰되어야 한다
- 이렇게 관찰된 것들을 보장하는 방법은 이 제약을 데이터베이스 정의에 기술해 넣은 것이며, 이렇게 함으로써 DBMS가 제약을 따르도록 하게 할 수 있다
- 데이터베이스 정의에 기술하는 방법은 FD를 선언하는 것이다
<제 1,2,3 정규형>
- 간단함을 위한 과정
- 각각의 릴레이션이 정확하게 하나의 후보키를 갖는다 //기본키만 있다고 가정
- 제 3정규형(비형식적인 정의)
어떤 릴레이션이 3NF이라는 것은, 키가 아닌 모든 속성들이
(1) 상호 독립적이며,
(2) 기본 키에 최소성으로 종속됨을 의미한다
- 키가 아닌 속성은 해당 릴레이션의 기본 키에 참여하지 않는 속성이다
- 두 개 이상의 속성 중 어느 것도 다른 것들의 조합에 함수적으로 종속되지 않으면, 이들 속성은 상호 독립적이다. 이 독립성은 그러한 각각의 속성이 나머지와 독립적으로 갱신될 수 있다는 것을 함축하고 있다
- 정규화 과정
- 제1 정규형
- 어떤 릴레이션이 1NF이기 위한 필요 충분 조건은, 모든 도메인이 스칼라 값만을 포함하는 것이다
- 모든 정규화된 릴레이션이 1NF라는 것을 말한다
- First(S#, STATUS, CITY, P#, QTY)
PRIMARY KEY(S#, P#)
S#가 함수적으로 결정(최소성) -> CITY, STATUS
- 이상(anomailes)
- (ex. supplier-city 중복성 : FD S# -> CITY)
- 삽입 이상
- 특정 공급자가 적어도 하나의 부품 이상을 공급하지 않는 한 그 공급자가 특정 도시에 거주한다는 사실을 기록할 수 없다
- 어떠한 기본값도 null일 수 없다
- 삭제 이상
- 릴레이션에서 특정 공급자 튜플을 삭제하려고 할 때, 그 공급자와 공급 부품과의 관계뿐만 아니라, 공급자가 거주하는 도시에 관한 정보도 함께 소실
*해결 : 분리과정 -> "분리된 정보는 분리된 릴레이션에 위치 시킨다"
- 갱신이상
- 일반적으로, 특정 공급자에 대한 도시 명이 릴레이션에서는 여러 번 나타난다 -> 중복성
- FIRST를 SECOND와 SP로 분해한 효과가
- 비최소성 중복성들을 제거하는데 나타났음을 알 수 있다
- 동일 릴레이션에 두 가지 정보를 섞어 놓으면
- 앞에서 언급한 문제가 발생한다(삽입이상, 삭제이상, 갱신이상)
- 릴레이션이 2NF라는 것은
- 1NF
- 키가 아닌 모든 속성이 기본 키에 최소성으로 종속되는 것이다
- ex)SECOND, SP : 2NF
- ex)FIRST : 1NF이지만, 2NF는 아니다
- 정규화 과정에서의 첫 단계
- 프로젝션을 취하여 "비최소성" 함수적 종속성을 제거한다
- 릴레이션 R이 주어졌을 때,
R(A, B, C, D)
PRIMARY KEY(A,B)
A->D
- R을 두 개의 프로젝션 R1와 R2로 대치
R1(A,C)
PRIMARY KEY(A)
R2(A,B,C)
PRIMARY KEY(A,B)
FOREIGN KEY(A) REFERENCES R1
- SECOND릴레이션
- 키가 아닌 속성간의 상호 독립성이 보장되지 않았다
(FD CITY -> STATUS)
- 이행적 종속성
- 갱신이상을 초래한다
- A->B와 B->C가 모두 성립하면, A->C도 성립한다
- ex)S# -> CITY -> STATUS
- SECOND릴레이션의 이상(CITY-STATUS의 중복성)
- SECOND(S#, STATUS, CITY)
- 제3정규형
- 오직 하나의 후보키(기본키)
- 릴레이션에서 3NF라는 것은
- 2NF
- 모든 키가 아닌 속성들이 기본 키에 비이행적으로 종속된다
- SC, CS : 3NF
- SECOND : 2NF이지만, 3NF는 아니다
- 정규화 과정에서 두 번째 단계
- 는 프로젝션을 취해 이행적 종속성을 제거하는 것이다
- 릴레이션 R이 주어졌을 때
R(A,B,C)
PRIMARY KEY(A)
B->C
- R을 다음과 같이 두 개의 프로젝션 R1과 R2로 대체한다
R1(B,C)
PRIMARY KEY(B)
R2(A,B)
PRIMARY KEY(A)
FOREIGN KEY(B) REFERENCES R1
- 정규화
- 데이터 값의 문제가 아니라 의미의 문제
'데이터 베이스' 카테고리의 다른 글
트랜잭션(transaction) (0) | 2023.05.27 |
---|---|
데이터베이스 설계 (0) | 2023.05.01 |
물리적 저장구조와 인덱스 (0) | 2023.04.23 |