was heißt denn genau "ich habe zwei Tabellen"?
Sind dies programminterne Tabellen oder Datenbanktabellen?
Musst du diese noch anlegen, bzw. darfst du diese ändern?
Im Data Dictionary kannst du Fremdschlüssel-Beziehungen pflegen, dafür muss die zweite Tabellle natürlich ein Feld enthalten, welches den Schlüssel aus der ersten Tabelle aufnimmt.
Leider ist aus deiner Frage nicht so ganz ersichtlich, was du genau vorhast...
Davon, dass Du im ABAP Dictionary die Fremdschlüsselbeziehungen richtig pflegst, wird noch keine referentielle Integrität sichergestellt. (Dennoch solltest Du die Fremdschlüsselbeziehungen korrekt pflegen.)
Referentielle Integrität muss im ABAP-Programm (bzw. in allen ABAP-Programmen, die schreibend auf die beiden Tabellen zugreifen), sichergestellt werden, incl. korrekter Verwendung des SAP-Sperr-Mechanismus, um zu verhindern, dass 2 User in verschiedenen Sessions die gleichen Daten bearbeiten...
- Durch die Fremdschlüsselbeziehung die ich auf Tabellenebene festlege, kann sichergestellt werden, dass der Benutzer in der rechtsstehenden Tabelle keinen ungültigen Wert eingibt. (bei 1 : N Beziehung)
- Programmintern muss ich in der linken Tabelle beim Löschen prüfen, ob es in der rechten Tabelle eine dazugehörigen Satz gibt. (Funktioniert das einfach über
SELECT * FROM tabelle_LINKS INNER JOIN tabelle_RECHTS on Primärschl = Fremschlüssel.
Wenn sy-subrc <> 0 ist, dann darf der Datensatz aus der rechten Tabelle gelöscht werden?
==> Oder wird so etwas in der Praxis anders umgesetzt?
tja, leider kennt SAP bzw. ABAP keine Fremdschlüssel.
Die Fremdschlüssel die auf Tabellenebene festgelegt werden, dienen nur den Standard SAP Funktionen als Hilfestellung.
ad 1) Ja, sofern die Benutzer Standard-Eingabemaken (z.b. SM30) verwenden ist sichergestellt, das in der "rechtsstehenden" Tabelle keine Werte eingegeben werden können, die "links" nicht vorhanden sind.
ad 2) Für alles andere gilt: Bei jedem Zugriff der Daten ändert/hinzufügt/löscht muss der Programmierer sicherstellen, dass die Daten konsitent sind.
Hier kann man sich dadurch behelfen, dass man eine Datenklasse schreibt die die DB-Zugriff kapselt. So muss man nur einmal die ganze Fremschlüssellogik ausprogrammieren.
lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.