Update-anomalie
Een Update-anomalie is een afwijking van de 'standaard werkwijze' bij het vernieuwen (updaten) van gegevens in een database. Naast de overkoepelende term update-anomalie worden ook de specifiekere termen invoeg-anomalie en verwijder-anomalie 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 opdracht worden opgeslagen. Soms wordt om technische of praktische redenen een ontwerp gekozen waarbij het invoegen, verwijderen of veranderen van gegevens meer actie vergt om alle gegevens consistent te houden. Een dergelijk model noemt men gedenormaliseerd, het heeft een of meer update-anomalieën.
[bewerk] Voorbeeld
Een database bevat gegevens over klanten en hun projecten, er zijn twee tabellen.
|
|
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 teveel tijd vergt kan gekozen worden om de klantnaam toe te voegen aan het projectrecord.
|
|
Het opvragen van alleen de projectrecords volstaat nu om de lijst te produceren. De update-anomalie komt tot uiting in de noodzaak om bij het wijzigen van de klantnaam ook alle projectrecords aan te passen. De klantnaam in het projectrecord noemt men redundant, dezelfde informatie is vele malen aanwezig. Formeel gesproken is het attribuut klantnaam in de relatie projecten niet functioneel afhankelijk van de primaire sleutel (projectnr). De relatie projecten is daardoor in de eerste normaalvorm.
[bewerk] Invoeg- en verwijder-anomalie
Wanneer men in het voorbeeld het veld klantnaam uit het klantrecord zou halen, ontstaan een invoeg- en een verwijder-anomalie:
- Bij het invoegen van een nieuwe klant is direct een projectrecord nodig anders kan de klantnaam niet worden opgeslagen.
- Na het verwijderen van het laatste projectrecord van een klant, is de klantnaam niet meer beschikbaar.