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.