Osnove podatkovnih baz

« nazaj

Osnove podatkovnih baz - vaje 2.4.2020


Normalizacija

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:


Naloga 1

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.


Naloga 2

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?


\[\begin{aligned} E &\to P & \text{ok} \\ T &\to I & \text{ok} \\ M &\to K & \text{ok} \\ R &\to M & \text{ok} \\ S &\to E & \text{3NF ok} \\ S &\to M & \text{ok} \\ EM &\to S & \text{3NF ok} \\ DERT &\to O & \text{BCNF} \\[1ex] DRT &\to IKM \\ DERT &\to IKMOPS \\ DRST &\to EIKMOP \end{aligned}\]

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

Naloga 3

Dane so sledeče podrelacije relacije $R(ABCDEFGHI)$ skupaj s funkcijskimi odvisnostmi.

  1. $R_1(ABCDE)$, $A \to B$, $C \to D$
  2. $R_2(ABF)$, $AC \to E$, $B \to F$
  3. $R_3(AD)$, $D \to G$, $G \to H$
  4. $R_4(DCGH)$, $A \to I$, $I \to A$
  5. $R_5(ACEI)$

Za vsak primer ugotovi, ali je podrelacija v BCNF, in če ni, jo pretvori v BCNF.


  1. Ključ: ACE

    graph LR
    
    R["R(*A*C*E)"] --- R1["R1(*AB)"]
    R --- R2["R2(*CD)"]
    
  2. Ključ: AB

    graph LR
    
    R["R(*A*B)"] --- R1["R1(*BF)"]
    

3., 4., 5. so v BCNF.


Naloga 4

Dana je relacija $R(ABCD)$ in sledeče množice funkcijskih odvisnosti.

  1. $C \to D$, $C \to A$, $B \to C$
  2. $B \to C$, $D \to A$
  3. $ABC \to D$, $D \to A$
  4. $A \to B$, $BC \to D$, $A \to C$
  5. $AB \to C$, $AB \to D$, $C \to A$, $D \to B$

Za vsako ugotovi, v kateri normalni obliki je $R$, in jo pretvori v BCNF.


  1. Ključ: B; ni v 3NF

    graph LR
    
    R["R(*BC)"] --- R1["R1(A*CD)"]
    
  2. Ključ: BD; ni v 3NF

    graph LR
    
    R["R(*B*D)"] --- R1["R1(*BC)"]
    R --- R2["R2(A*D)"]
    
  3. Ključa: ABC, BCD; je v 3NF, ni v BCNF

    graph LR
    
    R["R(*A*B*CD)"] --- R1["R1(A*D)"]
    
  4. Ključ: A, ni v 3NF

    graph LR
    
    R["R(*ABC)"] --- R1["R1(*B*CD)"]
    
  5. 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)"]