Wikipedia · einfach zusammengefasst · Stand
Anomalie (Informatik)
In der Informatik bezeichnen Anomalien in relationalen Datenbanken Fehlverhalten der Datenbank durch ungünstige Umstände. Es handelt sich um unerwünschtes …
Inhalt5 Abschnitte
Begriff und Ursachen
Anomalien sind in relationalen Datenbanken unerwünschte Verhaltensweisen, die durch ungünstige Umstände entstehen. Sie bedeuten in der Regel keinen Programmfehler der Datenbank. Man unterscheidet Anomalien im Einbenutzerbetrieb und im Mehrbenutzerbetrieb.
Im Einbenutzerbetrieb sind meist nicht normalisierte oder denormalisierte Datenstrukturen die Ursache. Dadurch können Daten inkonsistent werden, also widersprüchlich oder nicht mehr einheitlich sein. Dazu gehören Einfüge-, Änderungs- und Lösch-Anomalien. Im Mehrbenutzerbetrieb entstehen Anomalien durch unzulässige parallele Zugriffe mehrerer Transaktionen auf dieselbe Datenbank.
Einfügen ohne vollständigen Schlüssel
Eine Einfüge-Anomalie (Insertion-Anomalie) liegt vor, wenn ein neues Tupel, also ein Datensatz einer Relation, nicht oder nur schwer eingefügt werden kann. Der Grund ist, dass für nicht alle Attribute des Primärschlüssels Werte vorhanden sind. Werte für alle Teile des Primärschlüssels sind jedoch Voraussetzung für das Eintragen eines Datensatzes.
In einer Tabelle mit Fahrzeugen und den jeweiligen Fahrern bilden beispielsweise Kennzeichen und Nachname Identifikationsschlüssel. Soll ein neues Fahrzeug eingetragen werden, obwohl noch kein Fahrer bestimmt ist, fehlen Angaben zum Schlüssel. Das Einfügen eines Datensatzes ohne den Schlüssel oder einen Teil davon ist dann unmöglich. Unwichtige oder noch unbekannte Angaben verhindern somit, dass die vorhandene Information gespeichert werden kann.
Ändern und Löschen ohne Informationsverlust
Eine Änderungs-Anomalie (Update-Anomalie) entsteht, wenn ein Attributwert mehrfach redundant gespeichert ist und nicht alle Vorkommen gleichzeitig geändert werden. Die Daten werden dadurch inkonsistent. Wenn „Max Maier“ in einer Fahrzeugtabelle für dieselbe Person zweimal vorkommt und „Maier“ in „Meier“ geändert werden soll, muss die Änderung an beiden Stellen erfolgen. Geschieht dies nur einmal, enthält die Tabelle widersprüchliche Angaben.
Eine Lösch-Anomalie (Delete-Anomalie) liegt vor, wenn beim Löschen eines Datensatzes mehr Informationen verloren gehen als beabsichtigt. Das geschieht, wenn ein Datensatz mehrere unabhängige Informationen enthält. In einer gemeinsamen Fahrzeug-Fahrer-Tabelle kann etwa das Fahrzeug B-MD 321 nicht gelöscht werden, ohne zugleich die Information über den Fahrer Max Maier zu verlieren.
Beide Probleme lassen sich vermeiden, indem die Tabelle in die 3. Normalform überführt wird. Fahrzeugdaten und Fahrerdaten werden dabei getrennt gespeichert. Die Tabelle „Fahrzeug“ enthält etwa Kennzeichen, Hersteller, Farbe und Fahrer_ID; die Tabelle „Fahrer“ enthält Fahrer_ID, Vorname und Nachname. Die Fahrer_ID ist in „Fahrzeug“ ein Fremdschlüssel, also ein Verweis auf den zugehörigen Datensatz in „Fahrer“. Fahrerdaten liegen dadurch zentral statt redundant vor.
Grundprobleme bei parallelen Zugriffen
Bei mehreren gleichzeitigen Datenbankzugriffen werden vier Grundprobleme unterschieden: Verlorenes Update, Schreib-Lese-Konflikt, Nichtwiederholbares Lesen und Phantomproblem. Daneben sind weitere, feinere Unterscheidungen und Spezifikationen möglich.
Arten von Mehrbenutzer-Anomalien
Ein Verlorenes Update (Lost Update) kann bei parallelen Schreibzugriffen auf eine gemeinsam genutzte Information auftreten. Ändern zwei Transaktionen dieselbe Information, können die Änderungen der ersten Transaktion unmittelbar durch die Änderungen der zweiten überschrieben werden.
Ein Schreib-Lese-Konflikt (Dirty Read) liegt vor, wenn eine Transaktion Daten liest, die eine andere gleichzeitig laufende Transaktion geschrieben, aber noch nicht bestätigt (committed) hat.
Nichtwiederholbares Lesen (Non-Repeatable Read) bedeutet, dass dieselbe Leseoperation innerhalb einer Transaktion nacheinander unterschiedliche Ergebnisse liefert.
Ein Phantomproblem (Inconsistent Read) kann entstehen, wenn sich eine Transaktion auf mehrere Datensätze mit einer bestimmten Eigenschaft bezieht und eine gleichzeitig laufende Transaktion neue Datensätze mit genau dieser Eigenschaft einfügt. Für die erste Transaktion können dadurch inkonsistente Daten entstehen.