Mit Hilfe von Fremdschlüsseln definieren Sie Beziehungen zwischen Tabellen im ABAP Dictionary, legen Werteprüfungen für Eingabefelder an und verknüpfen mehrere Tabellen in einer View oder einem Sperrobjekt.
Ein Fremdschlüssel verknüpft zwei Tabellen T1 und T2 miteinander, indem Felder der Tabelle T1 den Primärschlüsselfeldern der Tabelle T2 zugeordnet werden. Die folgende Abbildung zeigt die Beziehungen zwischen den Feldern dieser beiden Tabellen.
Tabelle T1 heißt in diesem Fall Fremdschlüsseltabelle (abhängige Tabelle) und Tabelle T2 Prüftabelle (referierte Tabelle). Die einander zugeordneten Feldpaare müssen den gleichen Datentyp und die gleiche Länge besitzen. Jedem Schlüsselfeld der Prüftabelle entspricht ein Feld der Fremdschlüsseltabelle. Ein solches Feld wird als Fremdschlüsselfeld bezeichnet.
Ein Fremdschlüssel erlaubt eine Zuordnung von Datensätzen in Fremdschlüsseltabelle und Prüftabelle. Mit Hilfe der Einträge in den Fremdschlüsselfeldern identifiziert ein Satz der Fremdschlüsseltabelle eindeutig einen Satz der Prüftabelle.
Eines der Fremdschlüsselfelder ist als Prüffeld ausgezeichnet. Für dieses Feld wird die Fremdschlüsselbeziehung gepflegt.
Bei einer Eingabe in das Prüffeld wird geprüft, ob in der Prüftabelle ein Satz mit dem durch die Werte in den Fremdschlüsselfeldern vorgegebenen Schlüssel existiert. Falls ein solcher Satz existiert, ist die Eingabe zulässig, andernfalls wird die Eingabe vom System zurückgewiesen.
Die obige Abbildung illustriert die Verwendung von Prüffeldern. In diesem Beispiel würde eine Eingabe Feld2 = 2 und Feld4 = 2 zurückgewiesen, da in T2 kein Satz mit dem Schlüssel Feld5 = 2 und Feld6 = 2 vorhanden ist.
Sie haben die Möglichkeit, nicht gegen alle Schlüsselfelder der Prüftabelle zu prüfen. Um Felder der Fremdschlüsseltabelle aus der Zuordnung der Felder zur Prüftabelle auszuschließen, verwenden Sie generische und konstante Fremdschlüssel.
Aus der Definition des Fremdschlüssels wird eine SELECT-Anweisung generiert. Wenn Sie einen Wert in das Prüffeld eingeben, wird diese SELECT-Anweisung abgesetzt. Wird ein passender Satz der Prüftabelle gefunden, so ist die Eingabe zulässig. Anderenfalls wird die Eingabe zurückgewiesen.
Für die in der obigen Abbildung dargestellte Fremdschlüsseltabelle würde die entsprechende SELECT-Anweisung wie folgt aussehen:
SELECT * FROM T2 WHERE T2-FELD5 = T1-FELD2 AND T2-FELD6 = T1-FELD4.
Diese SQL-Anweisung ist ein Pseudocode, der die entsprechende Funktionalität erklärt. Die Syntax dieser Anweisung ist nicht mit der Anweisung in ABAP identisch.
Eine Eingabe in einem Dynpro für das Prüffeld Feld2 ist zulässig, wenn in der Prüftabelle ein Satz mit den auf dem Dynpro für Feld2 und Feld4 gemachten Eingaben als Schlüssel existiert.
In der Tabelle SBOOK im Flugmodell sind die Flugbuchungen des Kunden für eine Fluggesellschaft verzeichnet. Die Flugbuchungen können von Reisebüros oder direkt am Verkaufsschalter der Fluggesellschaft vorgenommen werden. Falls die Buchung an einem Verkaufsschalter vorgenommen wurde, wird in der Tabelle SBOOK dessen Nummer im Feld COUNTER zusammen mit der Buchung abgespeichert.
Sie müssen sicherstellen, dass nur korrekte Nummern von Schaltern in die Tabelle SCOUNTER eingetragen werden können. Die notwendige Werteprüfung können Sie durch Anlegen eines Fremdschlüssels für das Prüffeld COUNTNUM definieren. Dies wird in der folgenden Abbildung dargestellt.
Strukturübergreifende Fremdschlüssel
Semantische Eigenschaften eines Fremdschlüssels