Hoofdstuk 11. Informatiemodellering

  11.2 Redundantie, inconsistentie, dubbele kolommen

Een groenteboer koopt groenten en fruit in bij een aantal leveranciers tegen verschillende prijzen.
Hij verkoopt deze producten vervolgens weer. Hij wil een database ontwerpen waarin hij alles vastlegt.

Zijn eerste poging ziet er zo uit:

Artikelgroep Artikelnaam Verkoopprijs Inkoopprijs Mergelland Inkoopprijs Betuwe Inkoopprijs Zeeland Inkoopprijs Achterhoek
Appel Jonagold 8,50 4,75 5,50    
Appel Elstar 9,00 6,00     5,50
Peer Conference 7,50 4,00   3,50  

Deze tabel lijkt wel te voldoen, totdat er een nieuwe leverancier bijkomt.
Achteraf nog een kolom toevoegen is lastig.
En de groenteboer zou graag wat meer gegevens van de leveranciers in de database hebben, bijvoorbeeld de telefoonnummers. En dat is in dit ontwerp moeilijk te realiseren.
Ook overzichten per bedrijf zijn moeilijk te maken doordat verschillende leveranciers in verschillende kolommen staan.
Je zou voor elke leverancier een aparte query moeten maken, je kunt niet volstaan met één query die je voor alle leveranciers kunt gebruiken.
Je spreekt hier van een ontwerp met herhaalde kolommen, en dat moet je proberen te voorkomen.

Zijn tweede poging ziet er zo uit:

Artikelgroep Artikelnaam Verkoopprijs Leverancier Telefoon Inkoopprijs
Appel Jonagold 8,50 Mergelland 056-9876543 4,75
Appel Jonagold 8,50 Betuwe 012-1234567 5,50
Appel Elstar 9,00 Mergelland 056-9876543 6,00
Appel Elstar 9,00 Achterhoek 051-5432198 5,50
Peer Conference 7,50 Zeeland 06-54637842 3,50
Peer Conference 7,50 Mergelland 056-9876543 4,00

Deze tabel lijkt wel te voldoen, totdat bijvoorbeeld één van de leveranciers een ander telefoonnummer krijgt.
Dan moet bij alle artikelen, die geleverd worden door die leverancier, het telefoonnummer worden veranderd.

Het kan dan heel gemakkelijk gebeuren dat bij een artikel van die leverancier vergeten wordt die wijziging aan te brengen.
En dan bevat de tabel dus een fout. Er staat dan tegenstrijdige informatie in de tabel: bij die leverancier staan twee verschillende telefoonnummers op twee verschillende plaatsen. Als er tegenstrijdige informatie in de database staat zeggen we wel dat de database inconsistent is.

En die fout ontstaat doordat hetzelfde telefoonnummer (en nog meer gegevens trouwens) meer dan één keer in de database staat, daardoor kun je allerlei problemen krijgen.
Dezelfde gegevens meer dan één keer in de database opnemen wordt redundantie genoemd, en dat moet je dus proberen te voorkomen.