- μ£Όμ΄μ§ ν¨μ μ’
μμ±(Functional dependency) μ§ν©μ μν΄ λ
Όλ¦¬μ μΌλ‘ ν¨μΆλλ ν¨μ μ’
μμ±μ μλ €μ£Όλ νμ μ΄λ‘ (formal theory)μ κ³ λ €
- BCNFμ 3NFλ‘μ 무μμ€ λΆν΄(lossless decomposition)λ₯Ό μμ±νλ μκ³ λ¦¬μ¦ κ°λ°
- λΆν΄κ° μ’
μμ± λ³΄μ‘΄(dependency-preserving)μΈμ§ ν
μ€νΈνλ μκ³ λ¦¬μ¦ κ°λ°
- Armstrong's Axioms(μμ€νΈλ‘± 곡리)λ₯Ό λ°λ³΅μ μΌλ‘ μ μ©νμ¬ F+(νν¬) κ³μ° κ°λ₯
- Reflexivity rule(λ°μ¬ κ·μΉ): Ξ²βΞ±μ΄λ©΄ Ξ±βΞ²
- Augmentation rule(μ¦κ° κ·μΉ): Ξ±βΞ²μ΄λ©΄ Ξ³Ξ±βΞ³Ξ²
- Transitivity rule(μ΄ν κ·μΉ): Ξ±βΞ²μ΄κ³ Ξ²βΞ³μ΄λ©΄ Ξ±βΞ³
- μ΄λ¬ν κ·μΉλ€μ
- Sound(건μ ν¨): μ€μ λ‘ μ±λ¦½νλ ν¨μ μ’
μμ±λ§ μμ±
- Complete(μμ ν¨): μ±λ¦½νλ λͺ¨λ ν¨μ μ’
μμ±μ μμ±
- μΆκ° κ·μΉ
- Union rule(ν©μ§ν© κ·μΉ): Ξ±βΞ²μ΄κ³ Ξ±βΞ³μ΄λ©΄ Ξ±βΞ²Ξ³
- Decomposition rule(λΆν΄ κ·μΉ): Ξ±βΞ²Ξ³μ΄λ©΄ Ξ±βΞ²μ΄κ³ Ξ±βΞ³
- Pseudotransitivity rule(μμ¬ μ΄ν κ·μΉ): Ξ±βΞ²μ΄κ³ Ξ³Ξ²βΞ΄μ΄λ©΄ Ξ±Ξ³βΞ΄
- μμ κ·μΉλ€μ μμ€νΈλ‘± 곡리λ‘λΆν° μ μΆ κ°λ₯
- R=(A,B,C,G,H,I), F={AβB,AβC,CGβH,CGβI,BβH}
- F+μ μΌλΆ λ©€λ²
- AβH
- AβBμ BβHλ‘λΆν° μ΄ν κ·μΉμ μν΄
- AGβI
- AβCλ₯Ό Gλ‘ μ¦κ°μμΌ AGβCGλ₯Ό μ»μ.
- κ·Έλ¦¬κ³ CGβIμμ μ΄ν κ·μΉμ μν΄ AGβIλ₯Ό μ»μ.
- CGβHI
- CGβIλ₯Ό CGλ‘ μ¦κ°μμΌ CGβCGIλ₯Ό μ»μ.
- CGβHλ₯Ό Iλ‘ μ¦κ°μμΌ CGIβHIλ₯Ό μ»μ.
- κ·Έλ¦¬κ³ μ΄ν κ·μΉμ μν΄ CGβHIλ₯Ό μ»μ.
- ν¨μ μ’
μμ± μ§ν© Fμ νν¬λ₯Ό κ³μ°νλ μ μ°¨
$F+$ = F
repeat
for each functional dependency f in $F+$
apply reflexivity and augmentation rules on f
add the resulting functional dependencies to $F+$
for each pair of functional dependencies f1 and f2 in $F+$
if f1 and f2 can be combined using transitivity
then add the resulting functional dependency to $F+$
until $F+$ does not change any further
- μ°Έκ³ : μ΄ μμ
μ μν λμμ μ μ°¨λ λμ€μ μ΄ν΄λ³Ό κ²μ.
- μμ± Bλ Ξ±βBμΌ λ Ξ±μ μν΄ ν¨μμ μΌλ‘ κ²°μ λλ€κ³ ν¨.
- μμ± μ§ν© Ξ±κ° μ£Όμ΄μ‘μ λ, F νμμ Ξ±μ Closure(νν¬)(Ξ±+λ‘ νκΈ°)λ F νμμ Ξ±μ μν΄ ν¨μμ μΌλ‘ κ²°μ λλ μμ±λ€μ μ§ν©μΌλ‘ μ μλ¨
- Ξ±βΞ²κ° F+μ μμ βΊΞ²βΞ±+
- F νμμ Ξ±μ νν¬ Ξ±+λ₯Ό κ³μ°νλ μκ³ λ¦¬μ¦
result := Ξ±;
while (changes to result) do
for each Ξ² β Ξ³ in F do
begin
if Ξ² β result then
result := result βͺ Ξ³
end
- R=(A,B,C,G,H,I)
- F={AβB,AβC,CGβH,CGβI,BβH}
- (AG)+
- result=AG
- result=ABCG (AβB μ AβC)
- result=ABCGH (CGβH)
- result=ABCGHI (CGβI)
- AGλ ν보 ν€(candidate key)μΈκ°?
- AGλ μνΌν€(superkey)μΈκ°?
- AGβRμΈκ°? βΊR=(AG)+μΈκ°?
- AGμ μμμ λΆλΆμ§ν©μ΄ μνΌν€μΈκ°?
- AβRμΈκ°? βΊR=(A)+μΈκ°?
- GβRμΈκ°? βΊR=(G)+μΈκ°?
- μΌλ°μ μΌλ‘: ν¬κΈ° nβ1μ κ° λΆλΆμ§ν©μ λν΄ νμΈ
- μμ± νν¬ μκ³ λ¦¬μ¦μ μ¬λ¬ μ©λ
- μνΌν€ ν
μ€νΈ
- Ξ±κ° μνΌν€μΈμ§ ν
μ€νΈνκΈ° μν΄, Ξ±+λ₯Ό κ³μ°νκ³ Ξ±+κ° Rμ λͺ¨λ μμ±μ ν¬ν¨νλμ§ νμΈ
- ν¨μ μ’
μμ± ν
μ€νΈ
- ν¨μ μ’
μμ± Ξ±βΞ²κ° μ±λ¦½νλμ§(μ¦, F+μ μλμ§) νμΈνλ €λ©΄, Ξ²βΞ±+μΈμ§ νμΈνλ©΄ λ¨
- κ°λ¨νκ³ μ λ ΄ν ν
μ€νΈμ΄λ©° λ§€μ° μ μ©
- Fμ νν¬ κ³μ°
- κ° Ξ³βRμ λν΄, νν¬ Ξ³+λ₯Ό μ°Ύκ³ , κ° SβΞ³+μ λν΄ ν¨μ μ’
μμ± Ξ³βSλ₯Ό μΆλ ₯
- ν¨μ μ’
μμ± μ§ν© Fλ₯Ό κ°λ relation μ€ν€λ§ κ°μ
- μ¬μ©μκ° relationμ λν μ
λ°μ΄νΈλ₯Ό μνν λλ§λ€,
- λ°μ΄ν°λ² μ΄μ€ μμ€ν
μ μ
λ°μ΄νΈκ° μ΄λ€ FDλ μλ°νμ§ μμμ 보μ₯ν΄μΌ ν¨.
- μ¦, μλ‘μ΄ λ°μ΄ν°λ² μ΄μ€ μνμμ Fμ μλ λͺ¨λ FDκ° λ§μ‘±λμ΄μΌ ν¨.
- μ
λ°μ΄νΈκ° μ§ν© Fμ μ΄λ€ FDλ₯Ό μλ°νλ©΄, μμ€ν
μ μ
λ°μ΄νΈλ₯Ό λ‘€λ°±ν΄μΌ ν¨.
- μλ° μ¬λΆλ₯Ό νμΈνλ λ° λλ λ
Έλ ₯μ μ€μΌ μ μμ.
- μ£Όμ΄μ§ μ§ν©κ³Ό λμΌν νν¬λ₯Ό κ°λ λ¨μνλ FD μ§ν©μ ν
μ€νΈν¨μΌλ‘μ¨
- μ΄ λ¨μνλ μ§ν©μ Canonical cover(μ κ· μ»€λ²)λΌ ν¨.
- μ κ· μ»€λ²λ₯Ό μ μνκΈ° μν΄ λ¨Όμ Extraneous attribute(λΆνμν μμ±)λ₯Ό μ μν΄μΌ ν¨.
- FDμ μΌμͺ½μμ μμ±μ μ κ±°νλ©΄ μ μ½μ‘°κ±΄μ΄ λ κ°ν΄μ§.
- ABβCκ° μκ³ Bλ₯Ό μ κ±°νλ©΄, μ μ¬μ μΌλ‘ λ κ°ν κ²°κ³ΌμΈ AβCλ₯Ό μ»μ.
- AβCλ ABβCλ₯Ό λ
Όλ¦¬μ μΌλ‘ ν¨μΆνμ§λ§, ABβC μ체λ§μΌλ‘λ AβCλ₯Ό λ
Όλ¦¬μ μΌλ‘ ν¨μΆνμ§ μκΈ° λλ¬Έμ λ κ°ν μ μμ.
- μ§ν© Fμ λ°λΌ, ABβCμμ Bλ₯Ό μμ νκ² μ κ±°ν μ μμ.
- μ: F={ABβC,AβD,DβC}
- κ·Έλ¬λ©΄ Fλ λ
Όλ¦¬μ μΌλ‘ AβCλ₯Ό ν¨μΆνλ―λ‘(μ΄νμ±), ABβCμμ Bλ λΆνμν¨.
- FDμ μ€λ₯Έμͺ½μμ μμ±μ μ κ±°νλ©΄ μ μ½μ‘°κ±΄μ΄ λ μ½ν΄μ§ μ μμ.
- ABβCDκ° μκ³ Cλ₯Ό μ κ±°νλ©΄, μ μ¬μ μΌλ‘ λ μ½ν κ²°κ³ΌμΈ ABβDλ₯Ό μ»μ.
- ABβDλ§μΌλ‘λ ABβCλ₯Ό μΆλ‘ ν μ μμΌλ―λ‘ λ μ½ν μ μμ.
- μ§ν© Fμ λ°λΌ, ABβCDμμ Cλ₯Ό μμ νκ² μ κ±°ν μ μμ.
- μ: F={ABβCD,AβC}
- ABβCDλ₯Ό ABβDλ‘ λ체ν νμλ, μ¬μ ν ABβCλ₯Ό μΆλ‘ ν μ μμΌλ©°(AβCλ‘λΆν°), λ°λΌμ ABβCDλ₯Ό μΆλ‘ ν μ μμμ λ³΄μΌ μ μμ.
- Fμ μλ FDμ μμ±μ F+λ₯Ό λ³κ²½νμ§ μκ³ μ κ±°ν μ μμ λ λΆνμν¨.
- ν¨μ μ’
μμ± μ§ν© Fμ Fμ μλ FD Ξ±βΞ²λ₯Ό κ³ λ €
- μΌμͺ½μμ μ κ±°: μμ± Aλ Ξ±μμ λΆνμν¨ if
- AβΞ±μ΄κ³
- Fλ (Fβ{Ξ±βΞ²})βͺ{(Ξ±βA)βΞ²}λ₯Ό λ
Όλ¦¬μ μΌλ‘ ν¨μΆ
- μ€λ₯Έμͺ½μμ μ κ±°: μμ± Aλ Ξ²μμ λΆνμν¨ if
- AβΞ²μ΄κ³
- ν¨μ μ’
μμ± μ§ν© (Fβ{Ξ±βΞ²})βͺ{Ξ±β(Ξ²βA)}κ° Fλ₯Ό λ
Όλ¦¬μ μΌλ‘ ν¨μΆ
- μ¦, μ½ν Fλ‘λΆν° λ κ°ν Fλ₯Ό λ
Όλ¦¬μ μΌλ‘ ν¨μΆν μ μμ λ μμ±μ λΆνμν¨.
- μ°Έκ³ : "λ κ°ν" ν¨μ μ’
μμ±μ νμ "λ μ½ν" κ²μ ν¨μΆνλ―λ‘, μμ κ° κ²½μ°μμ λ°λ λ°©ν₯μ ν¨μΆμ μλͺ
ν¨.
- Relation μ€ν€λ§ Rκ³Ό R+μμ μ±λ¦½νλ ν¨μ μ’
μμ± μ§ν© Fλ₯Ό κ°μ νκ³ , ν¨μ μ’
μμ± Ξ±βΞ²μ μμ±μ κ³ λ €
- μμ± AβΞ²κ° Ξ²μμ λΆνμνμ§ ν
μ€νΈ
- λ μ½ν μ§ν© κ³ λ €: Fβ²=(Fβ{Ξ±βΞ²})βͺ{Ξ±β(Ξ²βA)}
- Fβ² νμμ Ξ±+κ° Aλ₯Ό ν¬ν¨νλμ§ νμΈ; ν¬ν¨νλ©΄, Aλ Ξ²μμ λΆνμν¨.
- μμ± AβΞ±κ° Ξ±μμ λΆνμνμ§ ν
μ€νΈ
- Ξ³=Ξ±β{A}λΌ νμ. λ κ°ν FD Ξ³βΞ²κ° Fλ‘λΆν° μΆλ‘ λ μ μλμ§ νμΈ
- Fμ μ’
μμ±μ μ¬μ©νμ¬ Ξ³+λ₯Ό κ³μ°
- Ξ³+κ° Ξ²μ λͺ¨λ μμ±μ ν¬ν¨νλ©΄, Aλ Ξ±μμ λΆνμν¨.
- λΆνμν μμ±μ μ
- F={ABβCD,AβE,EβC}
- ABβCDμμ Cκ° λΆνμνμ§ νμΈνκΈ° μν΄,
- Fβ²={ABβD,AβE,EβC} νμμ ABμ μμ± νν¬ κ³μ°
- νν¬λ ABCDEμ΄λ©°, Cλ₯Ό ν¬ν¨ν¨.
- μ΄λ Cκ° λΆνμν¨μ μλ―Έ
- Fμ λν μ κ· μ»€λ² FCβλ λ€μκ³Ό κ°μ μ’
μμ± μ§ν©μ.
- Fλ FCβμ λͺ¨λ μ’
μμ±μ λ
Όλ¦¬μ μΌλ‘ ν¨μΆ
- FCβλ Fμ λͺ¨λ μ’
μμ±μ λ
Όλ¦¬μ μΌλ‘ ν¨μΆ
- FCβμ μ΄λ€ ν¨μ μ’
μμ±λ λΆνμν μμ±μ ν¬ν¨νμ§ μμ.
- FCβμ κ° ν¨μ μ’
μμ±μ μΌμͺ½μ κ³ μ ν¨. μ¦, Ξ±1β=Ξ±2βμΈ λ μ’
μμ± Ξ±1ββΞ²1βκ³Ό Ξ±2ββΞ²2βκ° FCβμ μ‘΄μ¬νμ§ μμ.
- μ΄λ FC+β=F+λ₯Ό μλ―Έ
- μ§κ΄μ μΌλ‘, Fμ μ κ· μ»€λ²λ μ€λ³΅ μ’
μμ±μ΄λ μ’
μμ±μ μ€λ³΅ λΆλΆμ΄ μλ, Fμ λλ±ν "μ΅μ" FD μ§ν©μ.
- Fμ λν μ κ· μ»€λ²λ₯Ό κ³μ°νλ λ°©λ²
FC = F
repeat
Use the union rule to replace any dependencies in FC
of the form Ξ±1 β Ξ²1 and Ξ±1 β Ξ²2 with Ξ±1 β Ξ²1Ξ²2
Find a functional dependency Ξ± β Ξ² in FC with an extraneous
attribute either in Ξ± or in Ξ²
- Note: test for extraneous attributes done using FC, not F -
If an extraneous attribute is found, delete it from Ξ± β Ξ² in FC
until (FC does not change)
- μ°Έκ³ : μΌλΆ λΆνμν μμ±μ΄ μμ λ ν ν©μ§ν© κ·μΉμ΄ μ μ© κ°λ₯ν΄μ§ μ μμΌλ―λ‘, λ€μ μ μ©ν΄μΌ ν¨.
- R=(A,B,C)
- F={AβBC,BβC,AβB,ABβC}
- AβBCμ AβBλ₯Ό AβBCλ‘ κ²°ν©
- FCβλ μ΄μ {AβBC,BβC,ABβC}
- ABβCμμ Aκ° λΆνμν¨.
- ABβCμμ Aλ₯Ό μμ ν κ²°κ³Ό(μ¦, BβC)κ° λ€λ₯Έ μ’
μμ±λ€μ μν΄ ν¨μΆλλμ§ νμΈ
- μ: μ¬μ€ BβCλ μ΄λ―Έ μ‘΄μ¬ν¨.
- FCβλ μ΄μ {AβBC,BβC}
- AβBCμμ Cκ° λΆνμν¨.
- AβCκ° AβBμ λ€λ₯Έ μ’
μμ±λ€μ μν΄ λ
Όλ¦¬μ μΌλ‘ ν¨μΆλλμ§ νμΈ
- μ: AβBμ BβCμ λν μ΄νμ±μ μ¬μ©νμ¬
- λ 볡μ‘ν κ²½μ°μλ Aμ μμ± νν¬λ₯Ό μ¬μ©ν μ μμ.
- μ κ· μ»€λ²λ: FCβ={AβB,BβC}
- Rμ R1β,R2β,β¦,RnβμΌλ‘ λΆν΄ν λ μ’
μμ± Ξ±βΞ²κ° λ³΄μ‘΄λλμ§ νμΈνκΈ° μν΄ λ€μ ν
μ€νΈλ₯Ό μ μ© (μμ± νν¬λ Fλ‘ κ³μ°)
result = Ξ± // resultλ Ξ±μ μ’
μλλ μμ±λ€μ μ§ν©, μ΄κΈ°μλ Ξ± μμ
repeat
for each Ri in the decomposition // Fi νμμ (result)+λ₯Ό μ°Ύμ.
t = (result β© Ri)+ β© Ri
result = result βͺ t
until (result does not change) // F' νμμ (result)+λ₯Ό μ°Ύμ.
- $\text{result}`κ° Ξ²μ λͺ¨λ μμ±μ ν¬ν¨νλ©΄, ν¨μ μ’
μμ± Ξ±βΞ²λ 보쑴λ¨
- λΆν΄κ° μ’
μμ±μ 보쑴νλμ§ νμΈνκΈ° μν΄ Fμ λͺ¨λ μ’
μμ±μ λν΄ ν
μ€νΈλ₯Ό μ μ©
- μ΄ μ μ°¨λ F+μ (F1ββͺF2ββͺβ―βͺFnβ)+λ₯Ό κ³μ°νλ λ° νμν μ§μ μκ°μ΄ μλ λ€ν μκ°μ΄ μμλ¨
- μλͺ
νμ§ μμ(non-trivial) μ’
μμ± Ξ±βΞ²κ° BCNF μλ°μ μΌμΌν€λμ§ νμΈνκΈ° μν΄
- Ξ±+(Ξ±μ μμ± νν¬)λ₯Ό κ³μ°νκ³ ,
- κ·Έκ²μ΄ Rμ λͺ¨λ μμ±μ ν¬ν¨νλμ§, μ¦ Rμ μνΌν€μΈμ§ νμΈ
- Relation μ€ν€λ§ Rμ΄ BCNFμ μλμ§ νμΈνκΈ° μν΄
- λ¨μνλ ν
μ€νΈ: F+κ° μλ Fμ FDμ λν΄μλ§ BCNF μλ° μ¬λΆ νμΈ
- Fμ μ’
μμ± μ€ μ΄λ κ²λ BCNF μλ°μ μΌμΌν€μ§ μμΌλ©΄, F+μ μ’
μμ± μ€ μ΄λ κ²λ BCNF μλ°μ μΌμΌν€μ§ μμ.
- κ·Έλ¬λ, Rμ λΆν΄μμ relationλ₯Ό ν
μ€νΈν λ Fλ§ μ¬μ©νλ λ¨μνλ ν
μ€νΈλ λΆμ νν¨.
- R=(A,B,C,D,E), F={AβB,BCβD}λ₯Ό κ³ λ €
- Rμ R1β=(A,B)μ R2β=(A,C,D,E)λ‘ λΆν΄
- Fμ μ’
μμ± μ€ μ΄λ κ²λ (A,C,D,E)μ μμ±λ§μ ν¬ν¨νμ§ μμΌλ―λ‘, R2βκ° BCNFλ₯Ό λ§μ‘±νλ€κ³ μ€ν΄ν μ μμ.
- μ¬μ€, F+μ μ’
μμ± ACβDλ R2βκ° BCNFμ μμ§ μμμ 보μ¬μ€
- Rμ λΆν΄μ μλ relation Riβκ° BCNFμ μλμ§ νμΈνκΈ° μν΄
- Fiβ(μ¦, Riβμ μμ±λ§μ ν¬ν¨νλ F+μ λͺ¨λ FD)μ λν΄ Riβλ₯Ό BCNF ν
μ€νΈ
- λλ Rμμ μ±λ¦½νλ μλμ μ’
μμ± μ§ν© Fλ₯Ό μ¬μ©νλ, λ€μ ν
μ€νΈλ₯Ό μ¬μ©
- λͺ¨λ μμ± μ§ν© Ξ±βRiβμ λν΄, Ξ±+κ° RiββΞ±μ μμ±μ ν¬ν¨νμ§ μκ±°λ, Riβμ λͺ¨λ μμ±μ ν¬ν¨νλμ§ νμΈ
- λ§μ½ F+μ μ΄λ€ Ξ±βΞ²μ μν΄ μ‘°κ±΄μ΄ μλ°λλ©΄, μ’
μμ± Ξ±β(Ξ±+βΞ±)β©Riβκ° Riβμμ μ±λ¦½ν¨μ λ³΄μΌ μ μκ³ , Riβλ BCNFλ₯Ό μλ°ν¨.
- Riβλ₯Ό λΆν΄νκΈ° μν΄ μμ μ’
μμ±μ μ¬μ©
- νμμ ν
μ€νΈλ Fμ λͺ¨λ Ξ±βΞ²μμ Ξ±+λ₯Ό νμΈνλ λμ , Riβμ 'λͺ¨λ μμ± λΆλΆμ§ν©'μ μμ± νν¬λ₯Ό νμΈ
result := {R};
done := false;
compute $F+$;
while (not done) do
if (there is a schema Ri in result that is not in BCNF) then
begin
let Ξ±βΞ² be a nontrivial functional dependency that holds on Ri
such that Ξ±βRi is not in $F+$ , and Ξ±β©Ξ² = β
;
// μ΄λ Ξ±κ° Riμ μνΌν€κ° μλμ μλ―Έ
result := (result β Ri) βͺ (Ri β Ξ²) βͺ (Ξ±, Ξ²);
end
else
done := true;
- μ°Έκ³ : κ° Riβλ BCNFμ μμΌλ©°, λΆν΄λ 무μμ€-μ‘°μΈ(lossless-join)μ.
class(course_id, title, dept_name, credits, sec_id, semester, year, building, room_number, capacity, time_slot_id)- ν¨μ μ’
μμ±
course_id β title, dept_name, creditsbuilding, room_number β capacitycourse_id, sec_id, semester, year β building, room_number, time_slot_id
- ν보 ν€:
{course_id, sec_id, semester, year} - BCNF λΆν΄
course_id β title, dept_name, creditsκ° μ±λ¦½- κ·Έλ¬λ
course_idλ μνΌν€κ° μλ classλ₯Ό λ€μμΌλ‘ λ체 course(course_id, title, dept_name, credits)class-1(course_id, sec_id, semester, year, building, room_number, capacity, time_slot_id)
courseλ BCNFμ μμ.building, room_number β capacityκ° class-1μμ μ±λ¦½- κ·Έλ¬λ
{building, room_number}λ class-1μ μνΌν€κ° μλ class-1μ λ€μμΌλ‘ λ체 classroom(building, room_number, capacity)section(course_id, sec_id, semester, year, building, room_number, time_slot_id)
classroomκ³Ό sectionμ BCNFμ μμ.
- BCNF ν
μ€νΈμμμ²λΌ, Fμ FDλ§ νμΈνλ©΄ λ¨ (F+μ λͺ¨λ FDλ₯Ό νμΈν νμ μμ)
- κ° μ’
μμ± Ξ±βΞ²μ λν΄, Ξ±κ° μνΌν€μΈμ§ μλμ§ νμΈνκΈ° μν΄ μμ± νν¬ μ¬μ©
- Ξ±κ° μνΌν€κ° μλλ©΄, Ξ²μ κ° μμ±μ΄ Rμ ν보 ν€μ ν¬ν¨λμ΄ μλμ§ νμΈν΄μΌ ν¨.
- μ΄ ν
μ€νΈλ ν보 ν€λ₯Ό μ°Ύλ κ²μ ν¬ν¨νλ―λ‘ μλΉν λ λΉμ©μ΄ λ§μ΄ λ¦
- 3NF ν
μ€νΈλ NP-hard(NP-λν΄)μΈ κ²μΌλ‘ λνλ¨
- ν₯λ―Έλ‘κ²λ, 3NFλ‘μ λΆν΄λ λ€ν μκ°μ μνλ μ μμ.
Let FC be a canonical cover for F;
i := 0;
for each FD Ξ±βΞ² in FC
i := i + 1;
Ri := Ξ±Ξ²;
if none of Rj(1 β€ j β€ i) contains a candidate key for R
then
i := i + 1;
Ri := any candidate key for R;
/- Optionally, remove redundant relations -/
repeat
if any schema Rj is contained in another schema Rk
then
/- delete Rj -/
Rj := Ri;
i := i - 1;
until no more Rjs can be deleted
return (R1, R2, ..., Ri)
- μ μκ³ λ¦¬μ¦μ λ€μμ 보μ₯
- κ° relation μ€ν€λ§ Riβλ 3NFμ μμ.
- λΆν΄λ μ’
μμ± λ³΄μ‘΄ λ° λ¬΄μμ€-μ‘°μΈμ.
- μ νμ± μ¦λͺ
μ κ΅μ¬(μΉμ
7.5.3) μ°Έμ‘°
- Relation μ€ν€λ§:
cust_banker_branch = (customer_id, employee_id, branch_name, type) - μ΄ relation μ€ν€λ§μ ν¨μ μ’
μμ±
customer_id, employee_id β branch_name, typeemployee_id β branch_namecustomer_id, branch_name β employee_id
- λ¨Όμ μ κ· μ»€λ²λ₯Ό κ³μ°
- 첫 λ²μ§Έ μ’
μμ±μ μ€λ₯Έμͺ½μμ
branch_nameμ΄ λΆνμν¨. - λ€λ₯Έ λΆνμν μμ±μ μμΌλ―λ‘, FCβλ₯Ό μ»μ.
customer_id, employee_id β typeemployee_id β branch_namecustomer_id, branch_name β employee_id
- for 루νλ λ€μμ 3NF μ€ν€λ§λ₯Ό μμ±
(customer_id, employee_id, type)(employee_id, branch_name)(customer_id, branch_name, employee_id)
(customer_id, employee_id, type)μ΄ μλ μ€ν€λ§μ ν보 ν€λ₯Ό ν¬ν¨νλ―λ‘, λ μ΄μμ relation μ€ν€λ§λ₯Ό μΆκ°ν νμκ° μμ.- for 루νμ λμμ,
(customer_id, branch_name, employee_id) μ€ν€λ§μ λΆλΆμ§ν©μΈ (employee_id, branch_name) μ€ν€λ§λ₯Ό κ°μ§νκ³ μμ - κ²°κ³Όμ μΈ λ¨μνλ 3NF μ€ν€λ§λ λ€μκ³Ό κ°μ.
(customer_id, employee_id, type)(customer_id, branch_name, employee_id)
- Relationν λ°μ΄ν°λ² μ΄μ€ μ€κ³μ λͺ©ν: μ€ν€λ§λ₯Ό λ€μκ³Ό κ°μ΄ λΆν΄
- BCNF
- Lossless(무μμ€)
- Dependency preservation(μ’
μμ± λ³΄μ‘΄)
- μ΄λ₯Ό λ¬μ±ν μ μλ€λ©΄, λ€μ μ€ νλλ₯Ό μμ©
- μ’
μμ± λ³΄μ‘΄μ λΆμ¬
- 3NF μ¬μ©μΌλ‘ μΈν μ€λ³΅μ±
- ν₯λ―Έλ‘κ²λ, SQLμ μνΌν€ μ΄μΈμ ν¨μ μ’
μμ±μ μ§μ νλ μ§μ μ μΈ λ°©λ²μ μ 곡νμ§ μμ.
- Assertion(λ¨μΈ)μ μ¬μ©νμ¬ FDλ₯Ό μ§μ ν μ μμ§λ§, ν
μ€νΈ λΉμ©μ΄ λΉμ (κ·Έλ¦¬κ³ νμ¬ λ리 μ¬μ©λλ λ°μ΄ν°λ² μ΄μ€μμ μ§μλμ§ μμ)
- μ’
μμ± λ³΄μ‘΄ λΆν΄κ° μλλΌλ, SQLμ μ¬μ©νλ©΄ μΌμͺ½μ΄ ν€κ° μλ ν¨μ μ’
μμ±μ ν¨μ¨μ μΌλ‘ ν
μ€νΈν μ μμ.
- μ΄κΈ° relation μ€ν€λ§ Rμ΄ μ£Όμ΄μ‘μ λ
- Rμ E-R λ€μ΄μ΄κ·Έλ¨μ ν
μ΄λΈ μ§ν©μΌλ‘ λ³νν λ μμ±λμμ μ μμ.
- Rμ κ΄μ¬ μλ λͺ¨λ μμ±μ ν¬ν¨νλ λ¨μΌ relation(Universal relation, μ 체 relation)μμ μ μμ.
- μ κ·νλ Rμ λ μμ relationλ‘ λΆν΄
- Rμ μμλ‘ μ€κ³λ relationμ κ²°κ³ΌμΌ μ μμΌλ©°, μ΄λ₯Ό ν
μ€νΈ/μ κ·νμΌλ‘ λ³ν
- E-R λ€μ΄μ΄κ·Έλ¨μ μ μ€νκ² μ€κ³νκ³ λͺ¨λ μν°ν°λ₯Ό μ¬λ°λ₯΄κ² μλ³νλ©΄, E-R λ€μ΄μ΄κ·Έλ¨μμ μμ±λ ν
μ΄λΈμ μΆκ°μ μΈ μ κ·νκ° νμνμ§ μμμΌ ν¨.
- κ·Έλ¬λ μ€μ (λΆμμ ν) μ€κ³μμλ μν°ν°μ ν€κ° μλ μμ±μμ μν°ν°μ λ€λ₯Έ μμ±μΌλ‘μ FDκ° μμ μ μμ (λ°λΌμ BCNFκ° μλ)
- μ:
employee μν°ν° (ID, name, dept_name, building, salary) - ν¨μ μ’
μμ±
dept_name β building - μ’μ μ€κ³λ
departmentλ₯Ό μν°ν°λ‘ λ§λ€μμ κ²μ.
- Relation μ§ν©μ ν€κ° μλ μμ±μμ λΉλ‘―λ ν¨μ μ’
μμ±μ κ°λ₯νμ§λ§, λλΆλΆμ relationκ° μ΄ν(binary) relationμ΄λ―λ‘ λλ¬Ύ
- μ±λ₯μ μν΄ λΉμ κ·νλ μ€ν€λ§λ₯Ό μ¬μ©νκ³ μΆμ μ μμ.
- μ: κ³Όμ μ 보μ μ κ·Όν λλ§λ€ λͺ¨λ μ μκ³Όλͺ©μ΄ κ³Όμ μ 보μ ν¨κ» νμλμ΄μΌ νλ€κ³ κ°μ
- μ κ·νλ μ€ν€λ§μμλ
courseμ prereqμ μ‘°μΈμ΄ νμ
- λμ 1:
courseμ prereqμ λͺ¨λ μμ±μ ν¬ν¨νλ λΉμ κ·νλ relation μ¬μ© - λ λΉ λ₯Έ μ‘°ν
- μ€λ³΅μ±μΌλ‘ μΈν μΆκ° κ³΅κ° λ° μ
λ°μ΄νΈμ λν μΆκ° μ€ν μκ°
- μμ© νλ‘κ·Έλλ¨Έμ μΆκ° μ½λ© μμ
λ° μΆκ° μ½λμ μ€λ₯ κ°λ₯μ±
- λμ 2:
course β prereqλ‘ μ μλ Materialized view(ꡬ체νλ λ·°) μ¬μ© - νλ‘κ·Έλλ¨Έμ μΆκ° μ½λ© μμ
μ΄ μκ³ κ°λ₯ν μ€λ₯λ₯Ό νΌνλ€λ μ μ μ μΈνλ©΄, μ₯λ¨μ μ μμ λμΌ
- μ κ·νλ‘ ν¬μ°©λμ§ μλ λ°μ΄ν°λ² μ΄μ€ μ€κ³μ μΌλΆ μΈ‘λ©΄
- νΌν΄μΌ ν λμ λ°μ΄ν°λ² μ΄μ€ μ€κ³μ μ
earnings(company_id, year, amount) λμ λ€μ μ¬μ© earnings_2004, earnings_2005, earnings_2006 λ±, λͺ¨λ (company_id, earnings) μ€ν€λ§ μ¬μ©.- μλ BCNFμ μμ§λ§ λ§€λ
μλ‘μ΄ ν
μ΄λΈμ΄ νμνκ³ , κ° μλ‘μ΄ relationλ₯Ό κ³ λ €νκΈ° μν΄ λ§€λ
μλ‘μ΄ μΏΌλ¦¬λ₯Ό μμ±ν΄μΌ ν¨.
- μ¬λ¬ ν΄μ κ±ΈμΉ μΏΌλ¦¬λ λ§μ relationλ₯Ό μ°Έμ‘°ν΄μΌ νλ―λ‘ λ 볡μ‘ν΄μ§.
company_year(company_id, earnings_2004, earnings_2005, earnings_2006)- BCNFμ μμ§λ§, μμ λμΌν λ¬Έμ κ° μμ.
- ν μμ±μ κ°μ΄ μ΄ μ΄λ¦μ΄ λλ Crosstab(κ΅μ°¨ λΆμν)μ μλ‘, μ€νλ λμνΈμ λ°μ΄ν° λΆμ λꡬμμ μ¬μ©λ¨