Dana je relacija $R(S)$ z množico atributov $S$ in funkcijskimi odvisnostmi oblike $X \to A$, kjer je $X \subseteq S$ in $A \in S$.
Lastnosti funkcijskih odvisnosti:
Ključi:
Normalne oblike:
3NF: za vsako funkcijsko odvisnost $X \to A$ velja
\[A \in X \quad \lor \quad X \text{ vsebuje ključ} \quad \lor \quad A \text{ je del ključa.}\]BCNF: za vsako funkcijsko odvisnost $X \to A$ velja
\[A \in X \quad \lor \quad X \text{ vsebuje ključ.}\]Dana je relacija $R(ABCDE)$ s funkcijskimi odvisnostmi $A \to B$, $BC \to E$ in $DE \to A$. Najdi vse ključe za $R$. Ali je $R$ v 3NF/BCNF?
Izpeljane funkcijske odvisnosti:
\[\begin{aligned} A &\to B \\ BC &\to E \\ DE &\to A \\[1ex] AC &\to B \\ AC &\to C \\ AC &\to E \\[1ex] BCD &\to D \\[1ex] ACD &\to B \\ ACD &\to E \\[1ex] BCD &\to A \\ BCD &\to E \\[1ex] CDE &\to A \\ CDE &\to B \end{aligned}\]Ključi: ACD, BCD, CDE
fun. odv. | 3NF | BCNF |
---|---|---|
$A \to B$ | ja | ne |
$BC \to E$ | ja | ne |
$DE \to A$ | ja | ne |
$R$ je v 3NF, ni v BCNF.
Primer podatkov:
A | B | C | D | E |
---|---|---|---|---|
1 | a | x | Q | Z’ |
1 | a | y | R | W |
2 | a | x | S | Z’ |
2 | a | z | S | Z |
Anomalija spreminjanja: če popravimo Z v Z’ v stolpcu E prve vrstice, moramo to ponoviti še v tretji vrstici.
graph LR
R["R(AB*C*D*E)"] --- R1["R1(*AB)"]
R --- R2["R2(*B*CE)"]
R --- R3["R3(A*D*E)"]
V SQL lahko za to poskrbimo z določilom ON UPDATE CASCADE
pri določitvi tujih ključev.
Imejmo sledeče atribute z ER diagrama letališčne baze:
oznaka | opis |
---|---|
D | datum kontrole |
E | EMŠO tehnika |
I | ime testa |
K | kapaciteta letala |
M | model letala |
O | dosežena ocena pri kontroli |
P | plača tehnika |
R | reg. št. letala |
S | oznaka specializacije |
T | test |
Določi funkcijske odvisnosti med zgornjimi atributi, če lahko test na nekem letalu izvaja samo tisti tehnik, ki je specialist za model letala.
Pretvori shemo v 3NF. Ali se sklada s shemo, dobljeno iz ER diagrama?
Ključi: DERT, DRST
graph LR
R["R(*D*EMO*R*T) kontrola"]
R --- R2["R2(I*T) test"]
R --- R4["R4(M*R) letalo"] --- R3["R3(K*M) model"]
R --- R6["R6(*E*MS) specialist"]--- R5["R5(EM*S) specialist"]
R6 --- R1["R1(*EP) tehnik"]
R6 --- R3
Dane so sledeče podrelacije relacije $R(ABCDEFGHI)$ skupaj s funkcijskimi odvisnostmi.
Za vsak primer ugotovi, ali je podrelacija v BCNF, in če ni, jo pretvori v BCNF.
Ključ: ACE
graph LR
R["R(*A*C*E)"] --- R1["R1(*AB)"]
R --- R2["R2(*CD)"]
Ključ: AB
graph LR
R["R(*A*B)"] --- R1["R1(*BF)"]
3., 4., 5. so v BCNF.
Dana je relacija $R(ABCD)$ in sledeče množice funkcijskih odvisnosti.
Za vsako ugotovi, v kateri normalni obliki je $R$, in jo pretvori v BCNF.
Ključ: B; ni v 3NF
graph LR
R["R(*BC)"] --- R1["R1(A*CD)"]
Ključ: BD; ni v 3NF
graph LR
R["R(*B*D)"] --- R1["R1(*BC)"]
R --- R2["R2(A*D)"]
Ključa: ABC, BCD; je v 3NF, ni v BCNF
graph LR
R["R(*A*B*CD)"] --- R1["R1(A*D)"]
Ključ: A, ni v 3NF
graph LR
R["R(*ABC)"] --- R1["R1(*B*CD)"]
Ključi: AB, AD, BC, CD; je v 3NF, ni v BCNF
graph LR
R["R(*A*BCD)"] --- R1["R1(A*C)"]
R --- R2["R2(B*D)"]