Iskanje ključev in normalizacija

Pozor: glede na to, ali upoštevamo pri normalizaciji le primarni ključ ali pa vse ključe so kriteriji za določanje problematičnih odvisnosti za 2. NO in 3. NO lahko različni. V vsakem primeru pa moramo pri BCNO dobiti enake rezultate. Če imamo le en ključ, seveda ni razlik niti v postopkih.

Preproste normalizacije

1. Podano imamo relacijsko shemo

OceneIzpitov(VpisnaSt, Predmet, Semester, Ocena)

Določite funkcionalne odvisnosti, vse ključe (Saiedian-Spencer) in jo normalizirajte do Boyce-Coddove normalne oblike.

Rešitev

Odvisnosti:
Predmet $\rightarrow$ Semester
VpisnaSt, Predmet $\rightarrow$ Ocena

Saiedian-Spencer:
$\mathcal{L}$: VpisnaSt, Predmet
$\mathcal{R}$: Semester, Ocena
$\mathcal{B}$: $-$
Edini ključ: VpisnaSt, Predmet

Normalizacija (glede na primarni ključ):

  1. NO: lahko predpostavimo, če ni ekspicitno drugače napisano v tekstu naloge
  2. NO: ni, ker imamo delno (parcialno) odvisnost Predmet $\rightarrow$ Semester
    Po normalizaciji dobimo (Predmet, Semester) in (VpisnaSt, Predmet, Ocena)
  3. NO: je
  4. BCNO: je

2. Podano imamo relacijsko shemo

PostavkaNarocila(SifraNarocila, CrtnaKodaIzdelka, SifraIzdelka, OpisIzdelka, CenaIzdelka, Kolicina)

Določite funkcionalne odvisnosti, vse ključe (Saiedian-Spencer) in jo normalizirajte do Boyce-Coddove normalne oblike.

Rešitev

Odvisnosti:
CrtnaKodaIzdelka $\rightarrow$ SifraIzdelka
SifraIzdelka $\rightarrow$ CrtnaKodaIzdelka
CrtnaKodaIzdelka $\rightarrow$ OpisIzdelka, CenaIzdelka
SifraNarocila, CrtnaKodaIzdelka $\rightarrow$ Kolicina

Saiedian-Spencer:
$\mathcal{L}$: SifraNarocila
$\mathcal{R}$: OpisIzdelka, CenaIzdelka, Kolicina
$\mathcal{B}$: CrtnaKodaIzdelka, SifraIzdelka
Ključa: SifraNarocila, CrtnaKodaIzdelka in SifraNarocila, SifraIzdelka (primarni ključ je poudarjen, izberemo ga poljubno).

Normalizacija (glede na primarni ključ):

  1. NO: je
  2. NO: ni, zaradi prve in tretje odvisnosti. Po normalizaciji dobimo:
    (CrtnaKodaIzdelka, SifraIzdelka)
    (CrtnaKodaIzdelka,OpisIzdelka, CenaIzdelka)
    (SifraNarocila, CrtnaKodaIzdelka, Kolicina)
  3. NO: je
  4. BCNO: je

Normalizacija (glede na vse ključe):

  1. NO: je
  2. NO: ni, zaradi tretje odvisnosti. Po normalizaciji dobimo:
    (CrtnaKodaIzdelka,OpisIzdelka, CenaIzdelka)
    (SifraNarocila, CrtnaKodaIzdelka, SifraIzdelka, Kolicina) Ključa: SifraNarocila, CrtnaKodaIzdelka in SifraNarocila, SifraIzdelka
  3. NO: je
  4. BCNO: ni, zaradi prve in druge odvisnosti
    (CrtnaKodaIzdelka, SifraIzdelka) Ključa: CrtnaKodaIzdelka in SifraIzdelka
    (CrtnaKodaIzdelka,OpisIzdelka, CenaIzdelka)
    (SifraNarocila, CrtnaKodaIzdelka, Kolicina)

3. Podano imamo relacijsko shemo in funkcionalne odvisnosti

Zaloga (SifraIzdelka, SifraAkcije, Proizvajalec, OpisIzdelka, CenaIzdelka)

SifraIzdelka, SifraAkcije $\rightarrow$ Proizvajalec, OpisIzdelka, CenaIzdelka
SifraIzdelka $\rightarrow$ Proizvajalec, OpisIzdelka

Določite vse ključe (Saiedian-Spencer) in jo normalizirajte do Boyce-Coddove normalne oblike.

Rešitev

Saiedian-Spencer:
$\mathcal{L}$: SifraIzdelka, SifraAkcije
$\mathcal{R}$: Proizvajalec, OpisIzdelka, CenaIzdelka
$\mathcal{B}$: $-$
Edini ključ: SifraIzdelka, SifraAkcije

Normalizacija (glede na primarni ključ):

  1. NO: je
  2. NO: ni, zaradi druge odvisnosti. Po normalizaciji dobimo:
    (SifraIzdelka, Proizvajalec, OpisIzdelka)
    (SifraIzdelka, SifraAkcije, CenaIzdelka)
  3. NO: je
  4. BCNO: je

4. Imamo relacijsko shemo s podanimi funkcionalnimi odvisnostmi.

Ob predpostavki, da imajo vsi produkti istega založnika enako garancijo določite še ostale funkcionalne odvisnosti, vse ključe (Saiedian-Spencer) in jo normalizirajte do Boyce-Coddove normalne oblike.

ProgramskaOprema(Založnik, Produkt, Verzija, SistemskeZahteve, Cena, Garancija)

Založnik, Produkt, Verzija $\rightarrow$ SistemskeZahteve, Cena, Garancija

Rešitev

Odvisnosti:

  • podana: Založnik, Produkt, Verzija $\rightarrow$ SistemskeZahteve, Cena, Garancija
  • dodatna: Založnik $\rightarrow$ Garancija (vsi produkti istega založnika imajo enako garancijo)

Saiedian-Spencer:
$\mathcal{L}$: Založnik, Produkt, Verzija
$\mathcal{R}$: SistemskeZahteve, Cena, Garancija
$\mathcal{B}$: $-$
Edini ključ: Založnik, Produkt, Verzija

Normalizacija (glede na primarni ključ):

  1. NO: je
  2. NO: ni, zaradi druge odvisnosti. Po normalizaciji dobimo:
    (Založnik, Garancija)
    (Založnik, Produkt, Verzija, SistemskeZahteve, Cena)
  3. NO: je
  4. BCNO: je

4.1 Podano imamo relacijsko shemo in funkcionalne odvisnosti

R(D, O, N, T, C, R, Y)

D, O $\rightarrow$ N, T, C, R, Y
D $\rightarrow$ N

Določite vse ključe (Saiedian-Spencer) in jo normalizirajte do Boyce-Coddove normalne oblike.

Rešitev

Saiedian-Spencer:
$\mathcal{L}$: D, O
$\mathcal{R}$: N, T, C, R, Y
$\mathcal{B}$: $-$
Edini ključ: D, O

Normalizacija (glede na primarni ključ):

  1. NO: je
  2. NO: ni, zaradi druge odvisnosti. Po normalizaciji dobimo:
    (D, N)
    (D, O, T, C, R, Y)
  3. NO: je
  4. BCNO: je

4.2 Podano imamo relacijsko shemo in funkcionalne odvisnosti

R(D, O, N, T, C, R, Y)

D, O $\rightarrow$ N, T, C, R, Y
D $\rightarrow$ N
N $\rightarrow$ D

Določite vse ključe (Saiedian-Spencer) in jo normalizirajte do Boyce-Coddove normalne oblike.

Rešitev

Saiedian-Spencer:
$\mathcal{L}$: O
$\mathcal{R}$: T, C, R, Y
$\mathcal{B}$: D, N
Ključa: D, O in N, O

Normalizacija (glede na primarni ključ):

  1. NO: je
  2. NO: ni, zaradi druge odvisnosti. Po normalizaciji dobimo:
    (D, N)
    (D, O, T, C, R, Y)
  3. NO: je
  4. BCNO: je

Normalizacija (glede na vse ključe):

  1. NO: je
  2. NO: je
  3. NO: je
  4. BCNO: ni, zaradi druge in tretje odvisnosti. Po normalizaciji dobimo:
    (D, N) Ključa: D in N
    (D, O, T, C, R, Y)

Kompleksnejša normalizacija

4.3 Podano imamo relacijsko shemo in funkcionalne odvisnosti

R(D, O, N, T, C, R, Y)

D, O $\rightarrow$ N, T, C, R, Y
D $\rightarrow$ N
N $\rightarrow$ D
C, R $\rightarrow$ D

Določite vse ključe (Saiedian-Spencer) in jo normalizirajte do Boyce-Coddove normalne oblike.

Rešitev

Saiedian-Spencer:
$\mathcal{L}$: O
$\mathcal{R}$: T, Y
$\mathcal{B}$: D, N, C, R
Ključi: D, O; N, O in C, R, O

Normalizacija (glede na primarni ključ):

  1. NO: je
  2. NO: ni, zaradi druge odvisnosti. Po normalizaciji dobimo:
    (D, N)
    (D, O, T, C, R, Y)
  3. NO: je
  4. BCNO: ni, zaradi četrte odvisnosti.
    (D, N)
    (C, R, D)
    (O, T, C, R, Y)

Normalizacija (glede na vse ključe):

  1. NO: je
  2. NO: ni, zaradi četrte odvisnosti
    (C, R, D)
    (N, O, T, C, R, Y) Ključa: N, O in C, R, O
  3. NO: je
  4. BCNO: je

5. Podano imamo relacijsko shemo in funkcionalne odvisnosti

Shipping (ShipName, ShipType, VoyageID, Cargo, Port, Date)

ShipName $\rightarrow$ ShipType
VoyageID $\rightarrow$ ShipName, Cargo
ShipName, Date $\rightarrow$ VoyageID, Port

Določite vse ključe (Saiedian-Spencer) in jo normalizirajte do Boyce-Coddove normalne oblike. Date je datum prihoda ladje v pristanišče (Port).

Rešitev

Saiedian-Spencer:
$\mathcal{L}$: Date
$\mathcal{R}$: ShipType, Cargo, Port
$\mathcal{B}$: ShipName, VoyageID
Ključa: Date, ShipName in Date, VoyageID

Shipping (ShipName, ShipType, VoyageID, Cargo, Port, Date)

Normalizacija (glede na primarni ključ):

  1. NO: je
  2. NO: ni, zaradi prve odvisnosti. Po normalizaciji dobimo:
    (ShipName, ShipType)
    (ShipName, Date, VoyageID, Cargo, Port)
  3. NO: ni, zaradi druge odvisnosti (VoyageID $\rightarrow$ Cargo)
    (ShipName, ShipType)
    (VoyageID, Cargo)
    (ShipName, Date, VoyageID, Port)
  4. BCNO: ni, zaradi druge odvisnosti (VoyageID $\rightarrow$ ShipName) .
    (ShipName, ShipType)
    (VoyageID, Cargo)
    (VoyageID, ShipName)
    (ShipName, Date, VoyageID)

Normalizacija (glede na vse ključe):

  1. NO: je
  2. NO: ni, zaradi prve in druge odvisnosti (VoyageID $\rightarrow$ Cargo)
    (ShipName, ShipType)
    (VoyageID, Cargo)
    (ShipName, Date, VoyageID)
  3. NO: je
  4. BCNO: ni, zaradi druge odvisnosti (VoyageID $\rightarrow$ ShipName) .
    (ShipName, ShipType)
    (VoyageID, Cargo)
    (VoyageID, ShipName)
    (ShipName, Date, VoyageID)

6. Volitve v Sloveniji

Imejmo (v Sloveniji skoraj vsako leto aktualno) relacijo Volitve z atributi

ImeStranke, DatumVolitev, ImePredsednikaStranke, VolilniRezultatStranke, ŠteviloPoslancevStranke, ŠifraStranke,

kjer veljajo naslednje funkcionalne odvisnosti:

ImeStranke, DatumVolitev $\rightarrow$ ImePredsednikaStranke
ImeStranke, DatumVolitev $\rightarrow$ VolilniRezultatStranke
ImeStranke, DatumVolitev $\rightarrow$ ŠteviloPoslancevStranke
ImeStranke, DatumVolitev $\rightarrow$ ŠifraStranke
ŠifraStranke $\rightarrow$ ImeStranke

a. Skušajte si razložiti pomen funkcijskih odvisnosti.
b. Poiščite vse ključe in preverite, v kateri normalni obliki se nahaja relacija Volitve (2. NO, 3. NO, BCNO).
c. Normalizirajte relacijo v Boyce-Coddovo normalno obliko.

Rešitev

Saiedian-Spencer:
$\mathcal{L}$: DatumVolitev
$\mathcal{R}$: ImeStranke, ImePredsednikaStranke, VolilniRezultatStranke, ŠteviloPoslancevStranke, ŠifraStranke
$\mathcal{B}$: ImeStranke, ŠifraStranke
Ključa: DatumVolitev, ImeStranke in DatumVolitev, ŠifraStranke

Volitve(ImeStranke, DatumVolitev, ImePredsednikaStranke, VolilniRezultatStranke, ŠteviloPoslancevStranke, ŠifraStranke)

Normalizacija (glede na primarni ključ):

  1. NO: je
  2. NO: ni, zaradi odvisnosti ŠifraStranke $\rightarrow$ ImeStranke. (ŠifraStranke, ImeStranke)
    (DatumVolitev, ŠifraStranke, ImePredsednikaStranke, VolilniRezultatStranke, ŠteviloPoslancevStranke)
  3. NO: je
  4. BCNO: je

Normalizacija (glede na vse ključe):

  1. NO: je
  2. NO: je
  3. NO: je
  4. BCNO: ni, zaradi odvisnosti ŠifraStranke $\rightarrow$ ImeStranke. (ŠifraStranke, ImeStranke)
    (DatumVolitev, ŠifraStranke, ImePredsednikaStranke, VolilniRezultatStranke, ŠteviloPoslancevStranke)