Update-anomalie

Uit Wikipedia, de vrije encyclopedie
Naar navigatie springen Naar zoeken springen

Een update-anomalie is een fout die optreedt bij een afwijking van de standaardwerkwijze bij het vernieuwen (updaten) van gegevens in een database. Dit fenomeen treedt op door onvoldoende normalisatie. Naast de overkoepelende term update-anomalie worden ook de specifiekere termen invoeganomalie en verwijderanomalie gebruikt voor anomalieën die zich voordoen specifiek bij het invoegen en verwijderen van gegevens. Sporadisch wordt in het Nederlands de term modificatie-anomalie gebruikt.

In een genormaliseerd gegevensmodel kunnen de gegevens van één entiteit met één simpele schrijfopdracht worden opgeslagen. Soms wordt echter om technische of praktische redenen voor een databaseontwerp gekozen waarbij het invoegen, verwijderen of veranderen van gegevens extra actie vergt om alle gegevens consistent te houden. Een dergelijk model noemt men gedenormaliseerd: het heeft één of meer update-anomalieën.

Voorbeeld[bewerken]

Een database bevat gegevens over klanten en hun projecten, er zijn twee tabellen.

klanten
klantnr klantnaam klantplaats
1 Janssenes en Zn. Wierden
2 Ter Vanen B.V. Garenshorst
projecten
projectnr klantnr projectnaam
1 1 Aanpassen website
2 1 Maken huisstijl
3 2 Maken nieuwe website

Een gebruiker van dit systeem wil -natuurlijk- een lijst zien van projecten met de bijbehorende klantnamen. Om aan deze wens te voldoen koppelt de database bij elke opvraag de twee tabellen aan elkaar door bij elk project het klantrecord te zoeken, en de gegevens samen te voegen. Indien deze koppeling te veel tijd vergt kan gekozen worden om de klantnaam toe te voegen aan het projectrecord.

klanten
klantnr klantnaam klantplaats
1 Janssenes en Zn. Wierden
2 Ter Vanen B.V. Garenshorst
projecten
projectnr klantnr klantnaam projectnaam
1 1 Janssenes en Zn. Aanpassen website
2 1 Janssenes en Zn. Maken huisstijl
3 2 Ter Vanen B.V. Maken nieuwe website

Het opvragen van alleen de projectrecords volstaat nu om de lijst te produceren. Het is een noodzaak om bij het wijzigen van de klantnaam ook alle projectrecords aan te passen. Indien de klantnaam niet ook in de projectentabel wordt gewijzigd zou er sprake zijn van een update-anomalie. De klantnaam in het projectrecord noemt men redundant: dezelfde informatie is immers vele malen aanwezig. Formeel gesproken is het attribuut klantnaam in de relatie projecten niet alleen functioneel afhankelijk van de primaire sleutel (projectnr), maar ook van het attribuut klantnr. De relatie projecten is daardoor niet in de derde normaalvorm, waarvoor wordt geëist dat attributen alleen afhankelijk zijn van de primaire sleutel.

Invoeg- en verwijder-anomalie[bewerken]

Wanneer men in het voorbeeld het veld (kolom) klantnaam uit de klantentabel verwijderd, ontstaan een invoeg- en een verwijderanomalie:

  • Bij het invoegen van een nieuwe klant is tegelijkertijd een projectrecord nodig. Immers anders kan de klantnaam niet worden opgeslagen.
  • Na het verwijderen van het laatste projectrecord van een klant is de klantnaam niet meer beschikbaar.