Ansicht
Dokumentation

ABENDB_INTEGRITY - DB INTEGRITY

ABENDB_INTEGRITY - DB INTEGRITY

SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Datenbankintegrität

Eine Datenbank stellt ein Modell für einen bestimmten Teil der realen Welt dar. Sie soll zum einen in sich stimmig sein und zum anderen mit dem modellierten Abschnitt der Realität inhaltlich übereinstimmen. Die Wahrung dieser Datenintegrität zählt deshalb zu den wichtigsten Aspekten, die bei der Programmierung von Anwendungssoftware zu beachten sind. Bei der Integritätssicherung unterscheidet man

  • semantische Integrität
  • relationale Integrität
  • operationale Integrität

Semantische Integrität

Semantische Integrität bedeutet die inhaltliche Korrektheit und Vollständigkeit der Daten. Beispielsweise muss in einem Flugreservierungssystem - falls man keine überbuchten Flüge wünscht - für jeden Flug der Inhalt des Feldes 'belegte Plätze' kleiner oder gleich dem Inhalt des Feldes 'maximale Anzahl Sitzplätze' sein. Ist dies nicht der Fall, sind die Daten inkonsistent. Außerdem muss jede neue Buchung in der Tabelle der Flugreservierungen zu einer entsprechenden Erhöhung des Inhalts des Feldes 'belegte Plätze' für den gebuchten Flug in der Tabelle der Flüge führen. Beide Operationen bilden zusammen eine Einheit: Wird nur eine der beiden Operationen ausgeführt, so befindet sich die Datenbank in einem unvollständigem Zustand.

Semantische Integritätsbedingungen lassen sich in vielen Datenbanksystemen mit Constraints oder durch Trigger prüfen. Wegen ihrer mangelnden Normierung werden diese Methoden in einem AS ABAP jedoch nicht verwendet. Die semantische Integrität der Datenbank muss also in einem AS ABAP durch den Programmierer der Anwendungsprogramme verifiziert werden.

Wie das Beispiel der Flugreservierung zeigt, können sich die Daten im Verlauf einer Transaktion in der Regel in einem inkonsistenten oder unvollständigen Zustand befinden. Es ist deshalb für den Anwendungsprogrammierer notwendig, das Ende der Transaktion und damit die Wiederherstellung der semantischen Integrität der Daten bestätigen zu können. Diese Bestätigung ist der Datenbank-Commit.

Relationale Integrität

Relationale Integrität bedeutet die Einhaltung der Integritätsregeln des relationalen Modells. Da die Modellierung in einem AS ABAP auf dem relationalen Datenmodell beruht, müssen diese Regeln eingehalten werden. Dazu gehören:

  • Primärschlüsselintegrität
Jedes Objekt der Datenbank muss eindeutig durch einen Primärschlüssel identifiziert werden.
In den meisten Datenbanksystemen können - im Gegensatz zur Theorie des relationalen Datenmodells - Tabellen ohne Primärschlüssel angelegt werden. Im ABAP Dictionary muss jede Tabelle einen Primärschlüssel besitzen. Die Primärschlüsselintegrität ist deshalb automatisch gegeben.
  • Wertebereichsintegrität
Jeder Wert eines Tabellenfeldes muss in der Wertemenge dieses Feldes vorhanden sein. Beispielsweise muss in einem Flugreservierungssystem zwischen Privat- und Geschäftskunden unterschieden werden: Das Feld 'Geschäfts-/Privatkunde' in der Kundentabelle darf deshalb genau die beiden Werte 'B' für "Geschäftskunde" und 'P' für "Privatkunde" besitzen.
In den meisten Datenbanksystemen können bei der Definition eines Tabellenfeldes Wertebereiche als Constraint angegeben werden. Das Datenbanksystem verhindert dann automatisch, dass ein unzulässiger Wert in einer Datenbanktabelle vorkommt. Wegen ihrer mangelnden Normierung wird diese Methode in einem AS ABAP jedoch nicht verwendet. Trotzdem können im ABAP Dictionary für Domänen und damit für Datenbankfelder Wertebereiche definiert und zur Sicherung der Integrität der Datenbank verwendet werden: In Dialogtransaktionen wird dieses Wissen dann zur Prüfung der Benutzereingaben und zur Anzeige der Eingabemöglichkeiten genutzt.
  • Fremdschlüsselintegrität (Referenzielle Integrität)
Jeder Fremdschlüssel muss einen existierenden Primärschlüssel referenzieren. So muss in einem Flugreservierungssystem für jeden Flug der Inhalt des Feldes 'Fluggesellschaft' in der Tabelle der Fluggesellschaften vorhanden sein.
In den meisten Datenbanksystemen können Fremdschlüsselbeziehungen bei der Definition einer Tabelle als Constraint angegeben werden. Das Datenbanksystem verhindert dann automatisch, dass eine unzulässige Zeile in einer Datenbanktabelle vorkommt. Wegen ihrer mangelnden Normierung wird diese Methode in einem AS ABAP jedoch nicht verwendet. Trotzdem können Fremdschlüsselbeziehungen zwischen Tabellen im ABAP Dictionary definiert und zur Sicherung der Integrität der Datenbank verwendet werden: In Dialogtransaktionen wird dieses Wissen dann zur Prüfung der Benutzereingaben und zur Anzeige der Eingabemöglichkeiten genutzt.

Operationale Integrität

Operationale Integrität ist die Aufgabe, den Datenbestand bei gleichzeitigem Zugriff mehrerer Benutzer vor Inkonsistenzen zu schützen. dass dies tatsächlich notwendig ist, zeigt das nächste Beispiel: Sachbearbeiter S1 und S2 wollen in einem Flugreservierungssystem gleichzeitig eine Buchung hinzufügen.

  • S1 liest die Zeile des geplanten Fluges aus der Tabelle der Flüge. 'belegte Plätze' ist kleiner als 'maximale Anzahl Sitzplätze'.
  • S2 liest die Zeile des geplanten Fluges aus der Tabelle der Flüge. 'belegte Plätze' ist kleiner als 'maximale Anzahl Sitzplätze'.
  • S1 fügt eine neue Flugreservierung hinzu.
  • S1 erhöht 'belegte Plätze' um den Wert 1.
  • S2 fügt eine neue Flugreservierung hinzu.
  • S2 erhöht 'belegte Plätze' um den Wert 1.

Da beide Sachbearbeiter den gleichen Wert im Feld 'belegte Plätze' finden, kann der Flug nun überbucht sein.

Datenbanksysteme gewährleisten die operationale Integrität automatisch, indem sie konkurrierende Zugriffe serialisieren. Diese Serialisierung erfolgt durch den Datenbanksperrmechanismus. Wie dies ausgenutzt werden kann, zeigt die folgende Variante des obigen Beispiels:

  • S1 liest die Zeile des geplanten Fluges aus der Tabelle der Flüge mit Änderungsabsicht. 'belegte Plätze' ist kleiner als 'maximale Anzahl Sitzplätze'.
  • S2 liest die Zeile des geplanten Fluges aus der Tabelle der Flüge mit Änderungsabsicht. Die Zeile ist durch S1 gesperrt, S2 muss warten.
  • S1 fügt eine neue Flugreservierung hinzu.
  • S1 erhöht 'belegte Plätze' um den Wert 1.
  • S1 beendet die LUW und gibt damit seine Datenbanksperren frei.
  • S1 erhält die Zeile des geplanten Fluges aus der Tabelle der Flüge. 'belegte Plätze' ist kleiner als 'maximale Anzahl Sitzplätze'.
  • S2 fügt eine neue Flugreservierung hinzu.
  • S2 erhöht 'belegte Plätze' um den Wert 1.
  • S2 beendet die LUW und gibt damit seine Datenbanksperren frei.





Addresses (Business Address Services)   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 9170 Date: 20240523 Time: 172606     sap01-206 ( 160 ms )