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 een extra actie vergt om alle gegevens consistent te houden. Een dergelijk model noemt men gedenormaliseerd: het heeft één of meer update-anomalieën.
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 te veel tijd vergt, kan ervoor gekozen worden de klantnaam toe te voegen aan het projectrecord.
|
|
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.
Wanneer men in het voorbeeld het veld (kolom) klantnaam uit de klantentabel verwijderd, ontstaan een invoeg- en een verwijderanomalie: