4NF

Maandag, 16 september 2002
De vierde normaalvorm plaagt me al bijna 2 decennia.

Stelling

4NF is onzin voor wie
0NF, 1NF, 2NF en 3NF
goed uitvoert.

Heeft u wel een overtuigend
voorbeeld van 4NF?

Neem onmiddellijk
contact met me op!

Codd's drie normaalvormen voor logisch database ontwerp zijn volgens mij compleet.
  • Er kan niets meer af.
  • Er hoeft niets meer bij.
Een lezer van de SUMit database design methode stuurde me 2 URL's met voorbeelden van 4NF. Die voorbeelden vond ik niet overtuigend.

Zie m'n alternatieve uitwerking hieronder, geheel in lijn met m'n stelling, tot een correcte derde normaalvorm.

1. Hondjes met pakjes

Het eerste voorbeeld, op gslis.utexas.edu/.../normover.html, beschrijft een 4NF oplossing voor hondjes die
  • meerdere truukjes kunnen
  • en die meerdere pakjes passen.
Alternatieve oplossing tot correct 3NF
Begin met de juiste set data elementen in UNF, inclusief 'pakje' dat een hond kan dragen, maar zonder overbodige object-ids. Kies de juiste keys in FNF zodat voor gegeven key waarden ieder data element slechts 1 waarde kan hebben. Haal partkeys dependencies eruit in SNF. Hondje-pakje blijft vanzelf over als koppeltabel. Maak van pakje een keyonly tabel indien de lijst met pakjes toegevoegde waarde heeft. Los de afhankelijkheid op tussen de dataelementen kennel naam en kennel adres.
0NF 1NF 2NF 3NF
puppy nummer
puppy naam
kennel naam
kennel adres
truuk naam
bekwaamheid
truuk waar geleerd
pakje naam
puppy nummer
truuk naam
pakje naam

kennel naam
puppy naam
kennel adres
bekwaamheid
truuk waar geleerd
puppy nummer
puppy naam
kennel naam
kennel adres
kennel naam
kennel adres

puppy nummer
puppy naam
* kennel naam

puppy nummer
truuk naam

bekwaamheid
truuk waar geleerd
puppy nummer
truuk naam

bekwaamheid
truuk waar geleerd
puppy nummer
pakje naam
puppy nummer
pakje naam
pakje naam pakje naam

2. Studenten die cursussen volgen

Het tweede voorbeeld, op www.cs.jcu.edu.au/.../node12.html, beschrijft 4NF als een oplossing voor afhankelijkheden tussen key elementen onderling.

Pardon? Waarom zou een element tot key promoveren in 1NF wanneer het afhankelijk is van een ander? Pas de eerste normaalvorm goed toe en 4NF is niet meer van node.
Alternatieve oplossing tot correct 3NF
Kies in UNF de complete set dataelementen. Per gegeven student nummer en cursus nummer hebben de overige elementen slechts één mogelijke waarde. student naam is slechts afhankelijk van student nummer. cursus naam is slechts afhankelijk van cursus nummer. De 3NF is in dit voorbeeld gelijk aan 2NF. Er zijn geen dataelementen met onderlinge afhankelijkheden.
0NF 1NF 2NF 3NF
student nummer
student naam
cursus nummer
cursus naam
inschrijvings datum
student nummer
cursus nummer

student naam
cursus naam
inschrijvings datum
student nummer
student naam
student nummer
student naam
cursus nummer
cursus naam

cursus nummer
cursus naam

student nummer
cursus nummer

inschrijvings datum

student nummer
cursus nummer

inschrijvings datum
Tot de volgende week,
Henk Jan Nootenboom

Speciale dank aan Denis Dougall (Kingston, Canada) voor de email discussie over 4NF.