Ma olvastam a 3NF bontási algoritmusról. Ez a következőket mondta:
- Keressen egy minimális F-alapot, mondjuk G-t használja az {X, A} -t a bontás egyik relációjának sémájaként
- Ha a 2. lépés relációinak halmaza egyik sem R kulcsszuper kulcs, adjon hozzá egy másik relációt, amelynek sémája az R kulcsa. / li>
Ezt a relációt 3NF-re szeretném bontani.
R(A,B,C) S={A→B, A→C, B→A, B→C, C→A, C→ B, AB→ C, BC→A, AC→B, A→BC, B→AC, C→AB}
Mint láthatjuk, az R kulcsa: {A},{B},{C}
S több minimális alapú, például:
-
{A→B, B→A, B→C, C→B}
; és -
{A→B, B→C, C→A}
A probléma az, ha az 1. minimális alapot használjuk, akkor az R-t 2 relációra bontjuk : (A, B), (B, C).
Ha a 2. minimális bázist használjuk, akkor R-ből: (A, B), (B, C), (C, A) válik.
A kérdésem a következő: melyik a helyes?
Válasz
Először is vegye figyelembe, hogy Az eredeti reláció már a Harmadik Normál Formában van, mivel mindegyik attribútum elsődleges (tulajdonképpen mindegyik attribútum kulcs), így a 3NF definícióját tiszteletben tartják.
Ezután vegye figyelembe, hogy az algoritmus hiányos. A lépések a következők:
- Keressen egy minimális F-alapot, mondjuk G-t
- Az FD minden egyes csoportjával azonosak bal rész, X → A 1 , X → A 2 , …, X → A n G-ben, használja az {X, A 1 , A 2 , …, A n } mint a bontás egyik relációjának sémája
- Törölje az összes relációt, amelynek attribútumait egy másik reláció tartalmazza.
- Ha a 2. lépés relációinak egyike sem egy R kulcs, akkor adjon hozzá egy másik relációt, amelynek sémája az R kulcsa.
Tehát az első esetben három függőségi csoportot kap:
A → B B → A B → C C → B
amelyek három relációt hoznak létre, R 1 (A, B), R 2 (A, B, C), R 3 (B, C), és az algoritmust követve eredményt kap csak R 2 , mivel a másik kettő tartalmaz attribútumokat.
Tehát két különböző kimenete van az algoritmusból, a használt minimális bázistól függően (ami viszont a sorrend, amelyben figyelembe veszi a függőségeket a minimális fedezet kiszámításakor).
Tehát válasz a kérdésére:
melyik az egyik helyes?
az: mindkettő helyes , mivel mindkettő megfelel a 3NF definíciójának. Egyszerűen felfedezte, hogy a 3NF-ben egy reláció lebontására szolgáló szintézis algoritmus különböző megoldásokat eredményezhet.
Más kérdés: melyik a „jobb”, és természetesen az egyetlen relációval ellátott megoldás „jobb” , mivel a lekérdezések során nem kell táblákhoz csatlakoznia.
Természetesen, ha az elején ellenőrizni lehet, hogy a reláció már 3NF-ben van-e, akkor elkerülheti az algoritmus alkalmazását. De ez általában nem hajtható végre, mivel az ellenőrzés megköveteli az összes kulcs exponenciális kiszámítását, hogy megtalálják a reláció elsődleges attribútumait.
A First Course in Database System - 3rd edition
nevű könyvből vettem. Melyiket kövessem most?