# Anomalie (Informatik)

In der Informatik bezeichnen Anomalien in relationalen Datenbanken Fehlverhalten der Datenbank durch Verletzung der Regel "every information once". Das bedeutet, dass das zugrunde liegende Datenmodell Tabellen mit Spalten gleicher Bedeutung und darüber hinaus auch noch mit abweichenden (anomalen) Inhalten zulässt, so dass nicht mehr erkennbar ist, welche Tabelle bzw. Spalte den richtigen Inhalt enthält (Dateninkonsistenz). Man unterscheidet zwischen Anomalien im Einbenutzerbetrieb und Mehrbenutzerbetrieb.
Im Einbenutzerbetrieb können Anomalien durch nicht normalisierte bzw. denormalisierte Datenstrukturen entstehen und führen zu Inkonsistenzen. Man unterscheidet Einfüge-, Änderungs- und Lösch-Anomalien.
Im Mehrbenutzerbetrieb einer Datenbank treten Anomalien durch unzulässigen parallelen Datenbankzugriff auf.

## Anomalien im Einbenutzerbetrieb
### Einfüge-Anomalie

Beim Einfügen von Daten in eine Datenbank spricht man von einer Einfüge-Anomalie (Insertion-Anomalie), wenn ein neues Tupel in die Relation nicht oder nur schwierig eingetragen werden kann, weil nicht zu allen Attributen (Spaltenüberschrift) des Primärschlüssels Werte vorliegen (was Voraussetzung ist, um einen Datensatz eintragen zu können). So können beispielsweise Informationen nicht aufgenommen werden, da andere, in diesem Zusammenhang uninteressante bzw. diesem Zeitpunkt unbekannte Angaben fehlen.
Beispiel:
In dieser Tabelle wird für Fahrzeuge der jeweilige Fahrer angegeben. Die Attribute (Kennzeichen, Nachname) seien Identifikationsschlüssel. Hier treten Einfügeanomalien auf, wenn ein neues Fahrzeug eingefügt werden soll, aber noch kein Fahrer bestimmt wurde. Das Einfügen von Datensätzen ohne den Schlüssel (oder einen Teil des Schlüssels) ist unmöglich.
| Kennzeichen | Hersteller | Vorname | Nachname |
| K-KJ 321 | VW | Peter | Schmidt |
| CW-CD 29 | Audi | Chayenne | Müller |
| FDS-MG 113 | BMW | Marie | Maier |
| B-MD 321 | BMW | Tom | Lehmann |
| A-BC 123 | Škoda | ? | ? |
| A-BC 456 | Škoda | ? | ? |

### Änderungs-Anomalie

Beim Ändern von Daten in einer Datenbank spricht man von einer Änderungs-Anomalie (Update-Anomalie), wenn nicht alle (redundanten) Vorkommen eines Attributwertes zugleich geändert werden. Dieses führt zu inkonsistenten Daten.
Beispiel:
| Kennzeichen | Hersteller | Farbe | Vorname | Nachname |
| K-KJ 321 | VW | Blau | Peter | Schmidt |
| H-CH 333 | Opel | Rot | Fritz | Schneider |
| B-MD 321 | BMW | Schwarz | Max | Maier |
| B-MM 473 | Peugeot | Grün | Max | Maier |
Es wird in dieser Tabelle davon ausgegangen, dass die Erwähnungen von „Max Maier“ für ein und dieselbe Person gelten. Wird der Name „Maier“ in „Meier“ geändert, muss dieses an zwei Stellen geschehen. Geschieht dieses nicht, spricht man von einer Update-Anomalie. Die Tabelle enthält nun inkonsistente Daten.
Um dieses Problem zu verhindern, sollte die Tabelle in die 3. Normalform überführt werden, um die Fahrerdaten losgelöst von den Fahrzeugdaten betrachten zu können.
Beispiel in 3. Normalform:
Fahrzeug :
| Kennzeichen | Hersteller | Farbe | Fahrer_ID |
| K-KJ 321 | VW | Blau | 318 |
| H-CH 333 | Opel | Rot | 37 |
| B-MD 321 | BMW | Schwarz | 93 |
| B-MM 473 | Peugeot | Grün | 93 |
Fahrer :
| Fahrer_ID | Vorname | Nachname |
| 318 | Peter | Schmidt |
| 37 | Fritz | Schneider |
| 93 | Max | Maier |
Weil Fahrer_ID in der Tabelle "Fahrzeug" als Fremdschlüssel aus der Tabelle "Fahrer" eingesetzt wird, tritt die Update-Anomalie nicht mehr auf. Die Daten werden nun an zentraler Stelle und nicht mehr redundant abgelegt.

### Lösch-Anomalie

Eine Lösch-Anomalie (Delete-Anomalie) entsteht, wenn durch das Löschen eines Datensatzes mehr Informationen als erwünscht verloren gehen. Sie entsteht, wenn ein Datensatz mehrere unabhängige Informationen enthält. Durch das Löschen der einen Information wird dann auch die andere gelöscht, obwohl diese noch benötigt wird.
Beispiel:
| Kennzeichen | Hersteller | Farbe | Vorname | Nachname |
| K-KJ 321 | VW | Blau | Peter | Schmidt |
| H-CH 333 | Opel | Rot | Fritz | Schneider |
| B-MD 321 | BMW | Schwarz | Max | Maier |
Hier kann das Fahrzeug B-MD 321 nicht gelöscht werden, ohne den Fahrer ebenfalls zu löschen.
Um das Problem zu vermeiden, muss die Tabelle in die 3. Normalform überführt werden.
Beispiel in 3. Normalform:
Fahrzeug :
| Kennzeichen | Hersteller | Farbe | Fahrer_ID |
| K-KJ 321 | VW | Blau | 318 |
| H-CH 333 | Opel | Rot | 37 |
| B-MD 321 | BMW | Schwarz | 93 |
Fahrer :
| Fahrer_ID | Vorname | Nachname |
| 318 | Peter | Schmidt |
| 37 | Fritz | Schneider |
| 93 | Max | Maier |

## Anomalien im Mehrbenutzerbetrieb

Im Mehrbenutzerbetrieb einer Datenbank treten Anomalien durch unzulässigen parallelen Datenbankzugriff auf. Man unterscheidet grob in vier Grundprobleme: Verlorenes Update, Schreib-Lese-Konflikt, Nichtwiederholbares Lesen und Phantomproblem. Es sind jedoch noch weitere feinere Unterscheidungen und Spezifikationen möglich.

### Verlorenes Update (Lost update)

Ein Verlorenes Update (engl. Lost Update) bezeichnet ein Problem, das auftritt, wenn mehrere parallele Schreibzugriffe auf eine gemeinsam genutzte Information auftreten können. Wenn zwei Transaktionen dieselbe Information verändern, dann können die Änderungen der ersten sofort durch die Änderungen der zweiten überschrieben werden.

### Schreib-Lese-Konflikt (Dirty Read)

Ein Schreib-Lese-Konflikt (engl. Dirty Read) bezeichnet ein Problem, das auftritt, wenn von zwei gleichzeitig ablaufenden Transaktionen die eine Daten liest, die von der anderen geschrieben werden, jedoch noch nicht bestätigt (committed) sind.

### Nichtwiederholbares Lesen (Non-Repeatable Read)

Ein Nichtwiederholbares Lesen (engl. Non-Repeatable Read) bezeichnet ein Problem, das auftritt, wenn innerhalb einer Transaktion dieselbe Leseoperation nacheinander unterschiedliche Ergebnisse liefert.

### Phantomproblem (Inconsistent Read)

Ein Phantomproblem (inconsistent read) bezeichnet ein Problem, das bei mehreren parallelen Datenbankzugriffen auftreten kann. Werden während einer Transaktion, die sich auf mehrere Datensätze mit einer angegebenen Eigenschaft bezieht, in einer gleichzeitig ablaufenden Transaktion neue Datensätze mit dieser Eigenschaft eingefügt, kann dies inkonsistente Daten der ersten Transaktion zur Folge haben.