- 정보의 반복 발생 => 저장 공간 낭비, 정보의 일관성 깨짐
- 손실 분해, 비손실 분해
- 정규화 : 한 테이블에 한 가지 주제만 담도록 하는 것
# 제 1 정규형
- 도메인의 원소들이 나눌 수 없을 때 원자적이라 함
- 릴레이션 스키마 R의 모든 원소들의 도메인이 원자적일 때
- R이 제 1 정규형(1NF)에 속한다고 함
- 원자적이지 않은 도메인:
복합 속성 – 이름들의 집합
다중 속성
직원 번호 CS101 – 부서 번호
# 함수적 종속 : α → β는 자명하다 β⊆α이면
- dept_name -> building, budget
- 릴레이션 스키마 R 에 대해
α ⊆ β and β ⊆ α
- 서로 다른 투플은 속성 집합 K에 대해 같은 값을 가질 수 없음
스키마 r(R)을 보존(hold)한다
- K 는 R의 수퍼키
K → R => Uniqueness
- K 는 R의 후보키
K → R, and => Uniqueness
For no α ⊂ K, α → R => Minimality
# 폐포 집합 : F+
- A → B and B → C 이면 A → C
- 집합 F로부터 추론(유추)될 수 있는 모든 함수 종속의 집합
- F의 모든 함수 종속 포함
# 보이스-코드 정규형
- 함수 종속의 집합 F와 릴레이션 스키마 R, 형태의 F+ 의 모 든 함수 종속들이 둘 중 하나 보존하면 R은 F와 연계된 BCNF에 있다
1. α → β가 명백한 함수종속 (즉, β⊆α)
2. α가 스키마 R의 수퍼키
# BCNF로 분해(decomposing) : 한 가지 주제만 있도록 테이블 쪼갬
무손실 분해, 종속성 보존
- R이 BCNF가 아닌 스키마
- 자명하지 않은 함수 종속 가 최소 한 개 존재
- α 가 R의 수퍼 키
1. (α U β)
2. (R - (β - α)) 로 분해
예) dept_name (α) → building, budget (β)
R1: (α U β) = department(dept_name, building, budget )
dept_name → building, budget
R2: (R - (β - α)) = instructor(ID, name, salary, dept_name )
ID → name, salary, dept_name
# 제 3 정규형 (3NF)
1. α → β가 명백한 함수종속 (즉, β⊆α)
2. α가 스키마 R의 수퍼 키
3. β - α 에 속한 각각의 속성 A는 R의 후보 키를 포함
=> 피 결정자가 수퍼 키의 일부
# 암스트롱의 공리
- the closure of F에 대한 모든 F+ 구함
- α가 속성들의 집합이고 β⊆α 이면 α → β 는 보존 (재귀 규칙 reflexivity)
- α → β 보존 , γ 가 속성들의 집합이면 γα → γβ (증가 규칙 augmentation)
- α → β 보존, β → γ 보존되면 α → γ 는 보존 (이행 규칙 transitivity)
Sound 건전 : 쉽게
Complete 완전 : 완벽하게 만듦
# 추가적 규칙
- α → β 보존 , α → γ 보존이면 α → βγ 보존 (연합 union)
- α → βγ 보존되면 α → β 보존, α → γ 보존 (분해 decomposition)
- α → β 보존 , γβ → δ 보존되면 αγ → δ 보존 (가이행 pseudotransitivity)
# 폐포 예
R = (A, B, C, G, H, I)
F = { A → B, A → C, CG → H, CG →I, B → H}
1. A → H
A → B and B → H 이행 규칙
2. AG → I
A → C with G, to get AG → CG and then CG → I 증가 규칙 or 가이행 규칙
3. CG → HI
CG → I to infer CG → CGI, CG → H to infer CGI → HI 연합 규칙
# 폐포 계산 알고리즘
result := a;
while (changes to result) do
for each β → γ in F do
begin
if β⊆result then result := result ∪ γ
end
until (result does not change)
# 규준 커버 (canonical cover) : F^c
- 폐포의 반대편
- 자명한 함수적 종속 없음(유추 가능한 속성 제외함)
- 모든 함수적 종속성들의 결정자가 후보키여야함
- a가 R의 수퍼키
- 규준 커버 구하고 결정자가 후보키면 BCNF인지 알 수 있음
# 무손실 조인 분해 : 분해함으로 인해 정보의 손실이 전혀 없음
- 둘 중 하나 만족하면 무손실 조인 분해
R1 ∩ R2 → R1
R1 ∩ R2 → R2
select *
from (select R1 from r)
natural join
(select R2 from r)
# 종속성 보존 F+ = F1+ + F2+
R = (J, K, L )
F = {JK → L
L → K } Two candidate keys = JK and JL
- R is not in BCNF, 3NF
- 분해하면 원장 테이블에서 K 사라짐
- JK → L 사라짐
- BCNF 하려면 함수의 종속 없어짐
# 2NF
- nonkey attribute 는 후보 키에 완전 종속되어야 함
# 성능을 위한 역정규화
- Table 수 변함없음
- 일부만 가져와서 붙임(중복 발생). 기록 문서화
- 데이터 조회(select) 성능을 높이기 위해 자연조인
- 정규화는 삽입, 삭제, 갱신을 정상적으로 하기 위함. (분해로 이루어짐)
- 정규화 많이 할수록 조회 성능 떨어짐. 안 하면 내용 잘못됨
# E-R 모델링과 정규화
- E-R 모델링 정석적으로 잘하면 정규화 작업 부담을 줄일 수 있음
1NF – 2NF - 3NF – BCNF – 4NF – 5NF