Normalisatie - deel 2

Post on 19-Jan-2015

3.938 views 4 download

description

 

Transcript of Normalisatie - deel 2

normalisatie – deel 2

Katrien Verbert

katrien.verbert@cs.kuleuven.be

inhoud

• decompositie: algoritmen en eigenschappen

• meerwaardige afhankelijkheden, 4e normaalvorm

• join-afhankelijkheden en 5e normaalvorm

verschillende benaderingen

1. via hoogniveau modellering (top-down)

– ER-schema bouwen

– ER-schema omzetten naar relationeel gegevensbankschema

– o.a. partiële en transitieve afhankelijkheden wegwerken

2. meteen een relationeel gegevensschema bouwen

(bottom-up)

– universeel schema met alle attributen

– technieken, algoritmes voor decompositie

decompositie:

algoritmen en eigenschappen

• Vertrek van 1 universele relatie R

– met schema SR = < UR, FR>

• Gewenst:

– decompositie (SR) = { SR1 , SR2 , ..., SRk } (met k > 1) zodat

• elke Ri in BCNF of 3NF is

• alle informatie behouden blijft

• alle functionele afhankelijkheden bewaard blijven

– Laatste 2 voorwaarden zijn niet zo evident!

behoud van informatie

• informatie blijft behouden

a.s.a.

oorspronkelijke relatie volledig gereconstrueerd kan

worden uit decompositie

• voorbeeld: EMP_LOCS en EMP_PROJ1

– oorspronkelijke relatie niet reconstrueerbaar:

join levert onechte tupels op

– dus geen volledig behoud van informatie

resultaat van natuurlijke join op de tuples boven de stippellijn: er worden onechte tupels ingevoerd

bewaren van afhankelijkheden

• functionele afhankelijkheden zijn intrarelationele restricties

– X Y: X en Y zijn attributenverz. van dezelfde relatie

• bij decompositie geven deze afhankelijkheden aanleiding tot:

– intrarelationele afhankelijkheden in Ri: URi(FR0)

• projectie van FR0 op URi :

enkel die X Y blijven over waarvoor X Y URi

– interrelationele afhankelijkheden

• deze zijn moeilijker te controleren door DBMS :

join nodig om na te gaan of nieuw toegevoegde tupels voldoen

Def: Een decompositie (SR) = {SR1 , SR2 , ..., SRk} van R bewaart de afhankelijkheden van R indien ( UR1(FR) ... URk(FR) ) + = FR

+

Als INTER INTRA+, dan zeggen we dat

(SR) de afhankelijkheden van F bewaart

decompositie-algoritme 1

• algoritme voor afhankelijkheden-bewarende

decompositie naar 3NF:

Helaas: kan tot informatieverlies aanleiding geven vb (probeer uit):

1. zoek een minimale overdekking G voor F 2. voor elke X die ergens in G voorkomt in de linkerzijde van een functionele afhankelijkheid: maak een schema {X A1 A2 ... Am} waarbij X A1, ..., X Am alle afhankelijkheden in G zijn met X als linkerlid 3. plaats alle overblijvende attributen in een enkel relatieschema

A B C D

voorbeeld

Emp_ssn Pno Esal Ephone Dno Pname Plocation

U

Afhankelijkheden

{Emp_ssn} {Esal, Ephone, Dno}

{Pno} {Pname, Plocation}

{Emp_ssn, Pno} {Esal, Ephone, Dno, Pname, Plocation}

minimale overdekking

Emp_ssn Pno Esal Ephone Dno Pname Plocation

U

Afhankelijkheden

1.{Emp_ssn} {Esal, Ephone, Dno}

2.{Pno} {Pname, Plocation}

3.{Emp_ssn, Pno} {Esal, Ephone, Dno, Pname, Plocation}

Kunnen we afhankelijkheden weglaten?

Minimale overdekking

{Emp_ssn} {Esal, Ephone, Dno}

{Pno} {Pname, Plocation}

{Emp_ssn, Pno}+={Emp_ssn, Pno, Esal, Ephone, Dno, Pname,

Plocation}

decompositie

Emp_ssn Pno Esal Ephone Dno Pname Plocation

U

Minimale verzameling G

{Emp_ssn} {Esal, Ephone, Dno}

{Pno} {Pname, Plocation}

voor elke X die ergens in G voorkomt in de linkerzijde van een functionele afhankelijkheid: maak een schema {X A1 A2 ... Am} waarbij X A1, ..., X Am alle afhankelijkheden in G zijn met X als linkerlid

Emp_ssn Esal Ephone Dno Pno Pname Plocation

oefening

Model# Serial# Price Color Name Year

Stock

afhankelijkheden

{M, S} {P, C}

{S} {Y}

{M} {N}

{N,Y} {P}

minimale verzameling

{M, S} {C}

{S} {Y}

{M} {N}

{N,Y} {P}

Model# Serial# Color

Name Year Price Model# Name

Serial# Year

Def: Een decompositie SR) = {SR1 , SR2 , ..., SRk} is verliesloos a.s.a. voor elke toegestane extensie r van R (d.i. een extensie die aan FR voldoet) geldt: UR1(r) * ... * URk (r) = r

verliesloze decomposities

• m.a.w. join van relaties in decompositie levert geen onechte tupels op (lossless of nonadditive join property)

• testen of een decompositie verliesloos is: d.m.v. het "chase" algoritme

• Dé vraag is: kan elk tupel van de originele relatie R gereconstrueerd worden op basis van de tupels in de decompositie?

het Chase-algoritme

• maakt gebruik van een matrix

– kolommen = alle attributen Aj van originele relatie R

– een rij per relatie Ri in de decompositie

• voor elke rij i:

– vul aj in op positie j als Aj in schema SRi voorkomt; anders bij

– de a's stellen de aanwezige waarden voor

• redenering:

– als X Y, en de waarden voor X zijn gelijk in 2 rijen, dan ook

die voor Y

– dit aanduiden in matrix

• doorgaan tot geen verandering meer optreedt

• 1 rij vol a's verliesloos

Algoritme: Test of decompositie D = {R1, ..., Rn} van een relatie R met afhankelijkheden F verliesloos is: maak een matrix S met 1 rij i voor elke relatie Ri in de decompositie D, en 1 kolom j voor elk attribuut Aj in R voor elke rij i : voor elke kolom j : als Aj als attribuut voorkomt in Ri dan Sij := aj anders Sij := bij herhaal tot S niet meer verandert: voor elke functionele afhankelijkheid X Y in F: voor elke verzameling rijen V in S waarvoor geldt dat de symbolen in de kolommen overeenkomend met X dezelfde zijn:

{m.a.w. i1,i2 V: j | Aj X : Si1j=Si2j} maak de symbolen in de kolommen van Y ook gelijk, als volgt: als een van de rijen in V een aj bevat dan voor elke k in V: Skj := aj anders

kies een i V voor elke k in V: Skj := bij { D is verliesloos a.s.a. er een rij bestaat die enkel a's bevat }

eigenschappen van verliesloze decomposities

• Eigenschap LJ1: Niet-additieve Join Test voor Binaire Decomposities

– (SR) = { SR1 , SR2 } is verliesloos t.o.v. F a.s.a.

– eenvoudiger test dan "chase" algoritme

– maar enkel toepasselijk op splitsing in 2 schema's

(UR1 UR2) (UR1 \ UR2) F+ of (UR1 UR2) (UR2 \ UR1) F+

voorbeeld

• UR = EMP_DEPT = {Ename, Ssn, Bdate, Address, Dnumber,

Dname, Dmgr_ssn}

• F= {Ssn {Ename, Bdate, Address, Dnumber},

Dnumber {Dname, Dmgr_ssn}}

• UR1 = ED1 = {Ename, Ssn, Bdate, Address, Dnumber}

• UR2 = ED2 = {Dnumber, Dname, Dmgr_ssn}

• (UR1 UR2) (UR1 \ UR2) F+ of (UR1 UR2) (UR2 \ UR1) F+ ?

• UR1 UR2 = {Dnumber}

• UR1 - UR2 = {Ename, Ssn, Bdate, Address}

• UR2 – UR1 = {Dname, Dmgr_ssn}

• (UR1 UR2) (UR1 \ UR2) = Dnumber Dname, Dmgr_ssn

• Verliesloos!

:= {SR} zolang er een relatieschema SRi in niet in BCNF is : zoek een functionele afhankelijkheid X Y binnen SRi die volgens BCNF niet toegelaten is vervang SRi in door twee schema’s SRi \ Y en X Y : := \ {SRi} {SRi \ Y, X Y}

Afhankelijkheden kunnen nu verloren gaan!

verliesloze decompositie van een

relatie R naar BCNF

voorbeeld van ontwerp via

decompositie

• Gegevensbank met info over huizen in een gemeente

• Universele relatie R1(O,S,H,P,W,B,D)

• UR1 = {O,S,H,P,W,B,D}

– O = identificatienr van huis

– S = straat

– H = huisnummer

– P = postcode

– W = wijk

– B = naam bouwmaatschappij

– D = directeur bouwmaatschappij

id.nr (O)

wijk (W)

directeur (D)

bouwmij (B)

huisnr (H) straatnaam (S)

postcode (P)

FR1 = { O BSH, B D, D B, SH OP, P S,

S W }

O S H P W B D

15351 Perenstraat 23 2745 DD Fruitwijk Bouwlust P. Akker

15352 Perenstraat 25 2745 DD Fruitwijk Bouwlust P. Akker

15788 Appelstraat 8 2745 EG Fruitwijk Solide Z. Glas

20371 Beukenstraat 94 2751 BE Bomenwijk Solide Z. Glas

20372 Beukenstraat 96 2751 BE Bomenwijk Solide Z. Glas

20167 Beukenstraat 1 2751 BB Bomenwijk Bouwlust P. Akker

Redundante gegevens

voorbeeld van een extensie van R1

• Relatie is reeds in 1NF

• 3 kandidaatsleutels voor R1:

– O, SH, PH

– dus O,S,H,P zijn sleutelattributen van R1; W,B,D niet

• Is R1 in 2NF?

Is R1 in 2NF?

Idnr (O) Straat (S) Huisnummer(H) Postcode(P) Wijk (W) BouwM.(B) Directeur

= { O BSH, B D, D

B, SH OP, P S,

S W }

Is R1 in 2NF?

• Nee:

– W partieel afhankelijk van kand.sleutel SH

– S W

• Normalisatie:

• W uit R1 verwijderen, resulterend in

– R2 met UR2 = { O, S, H, P, B, D }

• en

– R20 maken met UR20 = { S, W }

voorbeeld

Idnr (O) Straat (S) Huisnummer(H) Postcode(P) BouwM.(B) Directeur (D)

= { O BSH, B D, D

B, SH OP, P S,

S W } Straat (S) Wijk (W)

R2

R20

vorige voorbeeldextensie wordt nu

O S H P B D

15351 Perenstraat 23 2745 DD Bouwlust P. Akker

15352 Perenstraat 25 2745 DD Bouwlust P. Akker

15788 Appelstraat 8 2745 EG Solide Z. Glas

20371 Beukenstraat 94 2751 BE Solide Z. Glas

20372 Beukenstraat 96 2751 BE Solide Z. Glas

20167 Beukenstraat 1 2751 BB Bouwlust P. Akker

S W

Perenstraat Fruitwijk

Appelstraat Fruitwijk

Beukenstraat Bomenwijk

Alle relaties in 3NF?

Idnr (O) Straat (S) Huisnummer(H) Postcode(P) BouwM.(B) Directeur (D)

= { O BSH, B D, D

B, SH OP, P S,

S W } Straat (S) Wijk (W)

R2

R20

Alle relaties in 3NF?

• R20: ja

• R2: nee

– transitieve afh. : D is trans. afh. van O via B

– afhankelijkheid B D (en D B) afsplitsen

• (SR2) = { SR3, SR30 } met

– UR3 = UR2 \ { D } = { O, S, H, P, B }

– UR30 = { B, D }

extensie volgens huidig

gegevensbankschema – :

O S H P B

15351 Perenstraat 23 2745 DD Bouwlust

15352 Perenstraat 25 2745 DD Bouwlust

15788 Appelstraat 8 2745 EG Solide

20371 Beukenstraat 94 2751 BE Solide

20372 Beukenstraat 96 2751 BE Solide

20167 Beukenstraat 1 2751 BB Bouwlust

S W

Perenstraat Fruitwijk

Appelstraat Fruitwijk

Beukenstraat Bomenwijk

B D

Bouwlust P. Akker

Solide Z. Glas

Alle relaties in BCNF?

Idnr (O) Straat (S) Huisnummer(H) Postcode(P) BouwM.(B)

= { O BSH, B D, D

B, SH OP, P S,

S W } Straat (S) Wijk (W)

R3

R20

BouwM. (B) Directeur (D)

kandidaatsleutels van R3: O, SH, PH

R30

• Alle relaties nu in 3NF

• Ook in BCNF?

– R20 en R30 wel

– R3 niet

• kandidaatsleutels van R3: O, SH, PH

• sleutelattribuut S is transitief afh. van SH via P

• daarom P S weer afsplitsen naar extra relatie

Welke afhankelijkheden zijn "verloren gegaan"?

m.a.w. welke restricties zijn nu moeilijker te controleren?

uiteindelijke extensie van

gegevensbank

O H P B

15351 23 2745 DD Bouwlust

15352 25 2745 DD Bouwlust

15788 8 2745 EG Solide

20371 94 2751 BE Solide

20372 96 2751 BE Solide

20167 1 2751 BB Bouwlust

S W

Perenstraat Fruitwijk

Appelstraat Fruitwijk

Beukenstraat Bomenwijk

B D

Bouwlust P. Akker

Solide Z. Glas

S P

Perenstraat 2745 DD

Appelstraat 2745 EG

Beukenstraat 2751 BE

Beukenstraat 2751 BB

FR1 = { O BSH, B D, D B, SH

OP, P S, S W }

• We hebben nu

– verliesloze decompositie naar BCNF

– afhankelijkheden-behoudende decompositie naar 3NF

• Combinatie van beide mogelijk?

– m.a.w.: verliesloos en afhankelijkheden-behoudend

• Ja, maar enkel tot 3NF (BCNF niet steeds bereikbaar)

1. zoek een minimale overdekking G voor F 2. voor elke X die ergens in G voorkomt in de linkerzijde van een functionele afhankelijkheid: maak een schema {X A1 A2 ... Am} waarbij X A , ..., X Am alle afhankelijkheden in G zijn met X als linkerlid 3. plaats alle overblijvende attributen in een enkel relatieschema 4. als geen van de relatieschema's een sleutel van R bevat dan maak een extra relatieschema dat attributen bevat die een sleutel voor R vormen

verliesloze en afhankelijkheden-

bewarende decompositie naar 3NF

• zelfde algoritme als voorheen voor afh.bewarende

decompositie, met één extra stap

voorbeeld

Emp_ssn Pno Esal Ephone Dno Pname Plocation

U

Afhankelijkheden

{Emp_ssn} {Esal, Ephone, Dno}

{Pno} {Pname, Plocation}

{Emp_ssn, Pno} {Esal, Ephone, Dno, Pname, Plocation}

Emp_ssn Esal Ephone Dno

Pno Pname Plocation

Emp_ssn Pno

Minimale overdekking

{Emp_ssn} {Esal, Ephone, Dno}

{Pno} {Pname, Plocation} 1

2

4

algoritme voor vinden van een sleutel

Input: universele relatie R en verzameling functionele afhankelijkheden F

(1) K := R

(2) Voor elk attribuut A in K

bereken (K – A)+ t.o.v. F

als (K – A)+ alle attributen van R bevat, dan K := K – {A}

oefening

• R(A, B, C, D, E)

• F = {AB C, CD E, DE B}

• Kandidaatsleutel?

(1) K := R

(2) Voor elk attribuut A in K

bereken (K – A)+ t.o.v. F

als (K – A)+ alle attributen van R bevat, dan K := K – {A}

nulwaarden kunnen problemen geven

• effect van nulwaarden op aggregaatfuncties?

• ook problematisch voor reconstructie van originele relatie

uit decompositie

– nulwaarden in verwijssleutels

– bv. 2 nieuwe werknemers, nog geen dept. DNUM = nul

– * op EMPLOYEE en DEPARTMENT vermeldt die werknemers niet

– worden “dangling tuples” genoemd

– deze gaan verloren bij (inwendige) join

– uitwendige join biedt oplossing

natuurlijke join

left outer join

nadelen van decompositiemethode

• functionele afhankelijkheden moeten vooraf bekend zijn

– kan moeilijk zijn bij grote gegevensbanken met veel attributen

• de algoritmen zijn niet deterministisch

– minimale overdekking van F: meerdere oplossingen

– decompositie is afhankelijk van volgorde waarin f.a. bekeken

worden

• na decompositie (dure) joins nodig om originele info

terug te vinden

– kan performantie nadelig beïnvloeden

besluit

• methode niet blindelings toepassen

• combinatie van normalisatie en ER-ontwerp is

aangewezen

• voorbeeld:

– begin met (E)ER-model

– beeld af op relationeel model

– zoek functionele afhankelijkheden

– controleer of verdere decompositie wenselijk is

MEERWAARDIGE AFHANKELIJKHEDEN

EN VIERDE NORMAALVORM

meervoudige afhankelijkheden

• meervoudige afhankelijkheden zijn een gevolg van 1NF

• betekenis: elke docent gebruikt elke tekst

(onafhankelijkheid van Teacher en Text)

Course Teacher Text

Physics Green Brown Black

Mechanics Thermodynamics

Math white

Algebra Geometry

meervoudige afhankelijkheden

In het voorbeeld: Course ->> Teacher en Course ->>Text

Course Teacher Text

Physics Green Mechanics

Physics Green Thermodynamics

Physics Brown Mechanics

Physics Brown Thermodynamics

Physics Black Mechanics

Physics Black Thermodynamics

Math White Algebra

Math White Geometry

Def: Een attributenverzameling Y van een relatie R is meerwaardig

afhankelijk van een attributenverzameling X van R, genoteerd

X ->> Y,

a.s.a.

voor elke toegestane extensie r van R geldt :

als er 2 tupels t1 en t2 in r zijn zodat t1[X]=t2[X],

dan bestaan er twee tupels t3 en t4 in r zodat

t3[X] = t4[X] = t1[X] = t2[X] en

t3[Y] = t1[Y] en t4[Y] = t2[Y] en

t3[UR\X\Y] = t2[UR\X\Y] en t4[UR\X\Y] = t1[UR\X\Y]

meerwaardige afhankelijkheden

• X bepaalt eenduidig een verzameling Y's ( "X

multidetermineert Y")

• welke Y's bij X horen hangt niet af van andere attributen

meervoudige afhankelijkheden

• gegeven een relatie R, X en Y zijn deelverzamelingen van

attributen in R en Z= R – (X U Y)

• X ->> Y geldt als er 2 tupels t1 en t2 in r zijn zodat t1[X]=t2[X], dan

bestaan er twee tupels t3 en t4 in r zodat

– t3[X] = t4[X] = t1[X] = t2[X] en

– t3[Y] = t1[Y] en t4[Y] = t2[Y] en

– t3[Z] = t2[Z] en t4[Z] = t1[Z]

X Y Z

t1 a b1 c1

t2 a b2 c2

t3 a b1 c2

t4 a b2 c1

ENAME ->> PNAME

en ENAME ->> DNAME

voorbeeld

voorbeeld

• T-shirts van bepaald model, met maat (S,M,L,XL) en

kleur

• Model ->> Maat betekent:

– elk model wordt in welbepaalde maten geleverd, onafhankelijk

van de kleur

– Dus als 1 model in kleuren blauw en grijs bestaat, en in maten M,

L, XL, betekent dit dat elke combinatie van maat en kleur

beschikbaar is

– Anders gezegd: elke combinatie van kleur en maat is mogelijk

• dus automatisch ook Model ->> Kleur

belang

• Als X meerdere attribuutverzamelingen

multidetermineert: combinatorische explosie!

• Voorbeeld

– om < x1, { a1,a2 } , { b1,b2,b3 } , { c1,c2,c3 } > voor te stellen

– 2 x 3 x 3 = 18 tupels nodig

• Daarom mwa's weren uit relaties 4NF

Def: Een meerwaardige afhankelijkheid X->>Y in relatie R is een triviale meerwaardige afhankelijkheid a.s.a. Y X of X Y = UR

definitie van triviale mwa

• Merk op :

– X ->> UR \ X geldt steeds

ENAME ->> PNAME

en ENAME ->> DNAME

voorbeeld

vierde normaalvorm

Def: Een relatieschema SR = < U,F > is in de vierde

normaalvorm

a.s.a.

voor elke niet-triviale meerwaardige afhankelijkheid van

de vorm X->>Y van F+ geldt:

X is een supersleutel van R.

Belang van 4NF: vermijden van redundantie en anomalieën

(a) EMP relatie met MVDs: ENAME ->> PNAME en ENAME ->> DNAME

ENAME is geen supersleutel

(b) EMP geprojecteerd op EMP_PROJECTS en EMP_DEPENDENTS)

ENAME ->> PNAME en ENAME ->> DNAME zijn nu triviale MVDs

algoritme voor verliesloze

decompositie naar 4NF

• Merk op : garandeert geen behoud van

afhankelijkheden!

:= {R} zolang er een relatieschema SRi in is dat niet in 4NF is : zoek een niet-triviale mwa X->>Y binnen SRi die volgens 4NF niet toegelaten is; vervang SRi in door twee relatieschema’s SRi\Y en X Y: := \ {S Ri} {S Ri \ Y, X Y}

(a) EMP relatie met MVDs: ENAME ->> PNAME en ENAME ->> DNAME

ENAME is geen supersleutel

(b) EMP geprojecteerd op EMP_PROJECTS en EMP_DEPENDENTS)

ENAME ->> PNAME en ENAME ->> DNAME zijn nu triviale MVDs

oefening

• breng relatie in 4NF

• Course ->> Teacher en Course ->>Text

Course Teacher Text

Physics Green Mechanics

Physics Green Thermodynamics

Physics Brown Mechanics

Physics Brown Thermodynamics

Physics Black Mechanics

Physics Black Thermodynamics

Math White Algebra

Math White Geometry

JOIN-AFHANKELIJKHEDEN EN

VIJFDE NORMAALVORM

voorbeeld

Agent Company Product

Smith Ford truck

Smith GM car

Smith GM truck

Jones Ford car

voorbeeld

Agent Company Product

Smith Ford car

Smith Ford truck

Smith GM truck

Smith GM Car

Jones Ford car

Er is geen verliesloze decompositie mogelijk in 2 relaties, want

Agent Product

Smith car

Smith Truck

Jones car

Agent Company

Smith Ford

Smith GM

Jones Ford

*

=

levert onechte tupels op

voorbeeld

Agent Company Product

Smith Ford car

Smith Ford truck

Smith GM truck

Smith GM Car

Jones Ford Car

Jones Ford truck

En:

Company Product

Ford car

Ford Truck

GM car

GM truck

Agent Company

Smith Ford

Smith GM

Jones Ford

*

=

levert onechte tupels op

Join-afhankelijkheid

• Als dit het geval is, spreken we van een join

afhankelijkheid

• Voorbeeld

– als ( A = a en B = b ) samen voorkomen,

– en ( B = b en C = c ) komt voor,

– en ( A = a en C = c ) komt voor,

– dan komt ( A = a, B = b, C = c ) voor

• Voorbeeld 2

– als ( Agent = Jones en Company = Ford ) samen voorkomen,

– en ( Company = Ford en Product = Car ) komt voor,

– en ( Agent = Jones en Product = Car ) komt voor,

– dan komt ( Agent = Jones, Company = Ford, Product = Car ) voor

Voorbeeld

JD ({Agent, Company}, {Company, Product}, {Agent, Product})

voorwaarde voor het voorkomen van een combinatie is strenger

Def: Een join-afhankelijkheid JD(U1, ..., Un) in relatie R is een restrictie die aangeeft dat voor elke extensie r van R geldt: er is een verliesloze decompositie in relaties R1,...,Rn met attributen U1, U2, ..., Un; m.a.w. U1(r) U2(r) ... Un(r) = r

voorbeeld

• aanbod van T-shirts met bepaald model, maat en kleur

voldoet aan volgende restrictie:

als dergelijke tupels voorkomen in een extensie van R...

dan ook dit tupel

Dit is de join-afhankelijkheid

JD ( {Model,Maat} , {Maat,Kleur} , {Model,Kleur} )

Wat is het verschil met Model->>Maat ?

Model Maat Kleur

x y

x z

y z

x y z

triviale JD

Def: Een join-afhankelijkheid JD(U1, ..., Un) in relatie R is een triviale join-afhankelijkheid a.s.a. een van de Ui gelijk is aan UR.

als dergelijke tupels voorkomen in een extensie van R...

dan ook dit tupel

Voorbeeld van triviale JD:

Model Maat Kleur

x y

x z

x y z

x y z

Def: Een join-afhankelijkheid JD(U1, ..., Un) in relatie R is een triviale join-afhankelijkheid a.s.a. een van de Ui gelijk is aan UR.

vijfde normaalvorm

Methode om relatieschema naar 5NF te normaliseren:

voor elke JD() in FR+: splits R op volgens

Voorbeeld : T-shirts

UR = { Model, Maat, Kleur }

splits op in { Model, Maat }, { Maat, Kleur }, { Model, Kleur }

Def: Een relatieschema SR = <U,F> is in de vijfde normaalvorm (of project-join-normaalvorm) a.s.a. voor elke niet-triviale join-afhankelijkheid JD(U1, ..., Un) van F+ geldt: U1 , ..., Un zijn allemaal supersleutels van R.

ander voorbeeld: relatie SUPPLY

• Leverancier (supplier) s levert onderdeel (part) p aan

project j

• restrictie:

– als leverancier s deel p kan leveren,

– en project j gebruikt onderdeel p,

– en leverancier s levert aan project j,

– dan levert s onderdeel p aan project j

• genoteerd:

– JD ( {SNAME, PARTNAME} , {SNAME,PROJNAME},

{PARTNAME, PROJNAME} )

voorbeeld examenvraag

Gegeven de volgende relatie die gegevens bevat van koelkasten

REFRIG { ModelNr, Jaar, Prijs, Fabriek, Kleur }

met de functionele afhankelijkheden F:

– { ModelNr } { Fabriek }

– { ModelNr, Jaar } { Prijs }

– { Fabriek } { Kleur }

Gevraagd:

– Bepaal een kandidaatsleutel.

– In welke normaalvorm is de relatie REFRIG?

– Normaliseer REFRIG zover je kan en geef aan in welke normaalvorm

het resultaat is.

VRAGEN?