์์ฑ 2026. 6. 12.ยท์์ 2026. 6. 12.
- ์ฃผ์ด์ง ํจ์ ์ข
์์ฑ(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(๊ต์ฐจ ๋ถ์ํ)์ ์๋ก, ์คํ๋ ๋์ํธ์ ๋ฐ์ดํฐ ๋ถ์ ๋๊ตฌ์์ ์ฌ์ฉ๋จ