Kann man Tabellen mit referentieller Integrität erstellen?

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
4 Beiträge • Seite 1 von 1
4 Beiträge Seite 1 von 1

Kann man Tabellen mit referentieller Integrität erstellen?

Beitrag von WSchmidt ( / / 0 / 3 ) »
Ist es möglich eine Tabelle mit einem referentieller Integrität zu einer anderen Tabelle zu erstellen?
z.B.
es existiert ein ZTAB1-Eintrag mit MATNR 1234 und in ZTAB2 existiert ebenfalls ein Eintrag mit MATNR 1234. Die ZTAB2 hat als Fremdschlüssel die ZTAB1-MATNR und eine 1:1 Beziehung.
Durch die Fremschlüssel kann man in ZTAB2 nur Einträge anlegen die auch in ZTAB1 enthalten sind.
Leider kann man trotz des Fremdschlüssels den Eintrag aus ZTAB1 löschen ohne einen Hinweis zu erhalten das in ZTAB2 noch ein Eintrag mit dieser MATNR existiert.
Gibt es eine systemseitige Möglichkeit diese Löschungen zu verhindern?

mfg
Walter

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
Keine wirklich brauchbare.

In der SM30-Pflege könnte man im Exit-Zeitpunkt, der beim Löschen prozessiert wird, eine entsprechende Prüfung einbauen.
Hilft aber allenfalls, wenn auch beim Pflegen einer Tabelle immer beide gesperrt werden.
Ansonsten Pflegt User1 einen neuen Eintrag in Tabelle2, bevor er sichert, löscht User2 den passenden Eintrag aus Tabelle1, ...

Und dann muss man noch den EXIT-Zeitpunkt zur Aufnahme eines Tabelleneintrags in einen Transport anpassen, damit im Zielsystem keine Inkonsistenzen entstehen können, ...
(Hindert aber trotzdem niemanden, Einträge R3TR TABU ... manuell in einen Auftrag aufzunehmen.)

Wenn gar keine (per SM30 pflegbaren) Customizing-Tabellen gemeint sind, müsste man die Prüfung in dem Programm vornehmen, das die Einträge löschen will.
Wenn es aber mehrere Große Tabellen mit entsprechenden Fremdschlüssel-Beziehungen gibt, müsste man jede Menge zusätzlicher Sekundär-Indizes anlegen.
Und da wieder eine zeitliche Differenz zwischen "User löscht Eintrag oder User erzeugt neuen Eintrag" und "Änderungen werden verbucht" gegeben ist, müsste man wieder mehrere Objekte sperren, obwohl man nur eins bearbeiten will.
Da kann es dann auch schnell zu Deadlock-Situationen kommen.

Jede Menge Aufwand für ein unsicheres Ergebnis.

Und damit die Prüfung in allen ABAPs zieht, auch wenn in den ABAPs keine entsprechenden Prüfungen vorkommen, müsste man Trigger auf DB-Ebene definieren.
Überhaupt nicht zu empfehlen. (Muss ich das wirklich begründen?)

Deswegen gibt es im SAP-Standard an etlichen Stellen "Löschkennzeichen"-Felder, d.h., ein Eintrag wird als nicht mehr für zukünftige Referenzen verwendbar markiert, bleibt aber erst mal im System.

Beitrag von WSchmidt ( / / 0 / 3 ) »
Das habe ich mir bereits gedacht.

Es müsste etwas auf Datenbankebene passieren wenn ein noch referenzierter Eintrag gelöscht werden soll.
Dazu müssten aber diese referenzielle Integrität auf DB-Ebene erstellt werden - und denke dieser Vorgang findet nicht statt.
Und dann müsste dieses Ereignis im SUBRC zurück an das ABAP-Programm durchgereicht werden.

Dann bleibt aber immer noch das Problem mit dem Löschkennzeichen (wäre in meinem Fall jetzt aber kein Problem).

Man kann doch Artikel die nicht mehr im Gebrauch sind auch löschen (archivieren). Da muß das System doch auch verschiedene Tabellen prüfen und dann die zugehörigen Einträge löschen. Kann man diese Einstellung erweitern um z.B. aus einer ZTabelle einen Artikeleintrag zu löschen?

mfg
Walter

Beitrag von Hendrik ( / / 0 / 3 ) »
Der Begriff Referentielle Integrität beschreibt nicht zwangsläufig ein Datenbank Feature.

Das ganze ist ja nur ein Konzept zur Wahrung der Aussagekraft und Logik eines Datenbestandes.

Auf Datenbankebene wurde dieses bei SAP aus einem einfachen grund nicht implementiert:
- Bei der Fülle von Datenbanktabellen, Customizingobjekten etc. wäre die Datenbank viel zu langsam, wenn sie permanent die Integrität ihrer Daten über alle Objekte/Tabellen sicherstelen müsste.
- Das Datenmodell von SAP ist an vielen Stellen nicht auf eine solche feste DB-Logik ausgerichtet (vgl. Objektschlüssel in COEP etc.)

Aus diesem Grund wird die referentielle Integrität bei SAP in der Anwendungslogik selbst sichergestellt und zwar nur in den Komponenten, die zum Zeitpunkt der Transaktion auch wirklich (aufgrund vom Funktionsumfang der Transaktion) betroffen sind.

Aussagen wie: "SAP kennt keine Fremdschlüssel" sind unangebrachte, vorschnelle und unkorrekte Aussagen.
Sap verwendet lediglich nicht die Integritätslogik der darunter liegenden Datenbank, sondern hat diese selbst implementiert.

Und dieses ist eben auch vom Anwendungsentwickler durch zuführen.

Und das Löschkennzeichen dient vielmehr dazu, das OLTP-System nachvollziehbar zu gestalten und zwar zu allen Zeitpunkten. Dieses sind Grundsätze ordnungsgemäßer Datenhaltung bei SAP. Die "Lösung" eines Integritätsproblems stand dabei nicht im Vordergrund.

Seite 1 von 1

Vergleichbare Themen

5
Antw.
1859
Views
Erstellen dynamischer Tabellen
von Steffi221185 » 02.08.2006 09:01 • Verfasst in ABAP® Core
4
Antw.
2066
Views
Frage zu rererentieller Integrität
von Mark33 » 06.03.2012 16:46 • Verfasst in ABAP® für Anfänger
4
Antw.
2046
Views
Referenzielle Integrität bei INSERT-Operationen
von yuro » 09.02.2015 18:24 • Verfasst in ABAP Objects®
2
Antw.
4105
Views
Prüfung von TvKs an externe Systeme auf syntaktische Integrität
von IHe » 04.05.2023 13:56 • Verfasst in Basis
3
Antw.
2974
Views

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

FOR mit CORRESPONDING
vor 2 Tagen von sap_enthusiast 11 / 2105
Netzplan drucken
vor 2 Tagen von sap_enthusiast 2 / 271
SALV: Titel zu lang
vor 5 Tagen von ralf.wenzel 3 / 830
Web Feature Services (WFS) im SAP
vor einer Woche von msfox 1 / 1339
WM: Transportauftrag quittieren - drucken
vor einer Woche von JHM 4 / 3271

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

FOR mit CORRESPONDING
vor 2 Tagen von sap_enthusiast 11 / 2105
Netzplan drucken
vor 2 Tagen von sap_enthusiast 2 / 271
SALV: Titel zu lang
vor 5 Tagen von ralf.wenzel 3 / 830
Web Feature Services (WFS) im SAP
vor einer Woche von msfox 1 / 1339
WM: Transportauftrag quittieren - drucken
vor einer Woche von JHM 4 / 3271

Unbeantwortete Forenbeiträge

Web Feature Services (WFS) im SAP
vor einer Woche von msfox 1 / 1339
Erweiterung in ME51N/ME52N:
vor 4 Wochen von ABAPlerv 1 / 3673
Erweiterung in ME51N/ME52N:
vor 4 Wochen von ABAPlerv 1 / 3575