AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Kaskadierendes Invalidieren von Datensätzen
Thema durchsuchen
Ansicht
Themen-Optionen

Kaskadierendes Invalidieren von Datensätzen

Ein Thema von barnti · begonnen am 20. Apr 2004 · letzter Beitrag vom 21. Apr 2004
Antwort Antwort
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

Kaskadierendes Invalidieren von Datensätzen

  Alt 20. Apr 2004, 07:39
Hallo,

ich arbeite mit mysql 4.x und möchte statt Datensätzen zu löschen, diese durch ein Datumfeld als invalide kennzeichnen. Bei einer einfachen Tabelle stellt dieses kein sonderlich großes Problem dar.
Ich möchte es jetzt ermöglichen Datensätze kaskadierend zu invalidieren. Beispiel: Wenn ein Kunde Waren hat, der Kunde invalidiert wird, sollen auch seine Waren invalidiert werden.
Dieses kaskadierende Invalidieren soll natürlich Allgemeingültigkeit besitzen, egal mit welcher Tabelle man mit dem Invalidieren beginnt und egal wie weit diese Kette des Invalidierens reicht.

Ich suche Vorschläge wie man ein solches Problem angeht!

Ich dachte man könnte die 'forreign-key-constraints' meiner InnoDB-Tabellen nutzen. Diese bieten ein 'on delete (restrict|cascade|set NULL) an. Was aber ja nicht unbedingt Nutzen bringt die Datensätze zu invalidieren. Vielleicht kann man das aber irgentwie nutzen?

Wer hat Ansätze für mich dieses zu implementieren!

Danke!
Gruß,

Barnti
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Kaskadierendes Invalidieren von Datensätzen

  Alt 20. Apr 2004, 09:53
Also...ich habe da mal folgende Idee:

ich lege in meiner DB eine neue Tabelle an, in der eine Spalte mit den Tabellennamen steht. In einer weiteren Spalte verweise ich auf die Tabellen, die abhängig von der ersten, zu invalidierende Datensätze enthält.

Beispiel:

SQL-Code:
Delete_Table

Tabelle__________|__Abhängige Tabelle_____
                 |
Kunde | Waren, Ansprechpartner
Ansprechpartner | Zuständigkeiten
Waren | Unterwarengruppen
Unterwarengruppe | -
Was dann bedeutet:

Will ich einen Ansprechpartner invalidieren, so wird der Ansprechpartner invalidiert und anschließend rekursiv nach weiteren zu invalidierenden Datensätzen gesucht. Dies geschieht anhand des Verweises in der Tabelle 'Delete_Table'. Die Rekursion endet, wenn keine 'Abhängige Tabelle' gefunden wird.

Für das Invalidieren eines Kunden gilt dann:
- invalidiere den aktuellen Kunden
- invalidiere die Waren des Kunden
- invalidiere die Ansprechpartner des Kunden
- invalidiere die Zuständigkeiten des Ansprechpartners

Was haltet ihr von dieser Idee?
Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: Kaskadierendes Invalidieren von Datensätzen

  Alt 20. Apr 2004, 10:03
Meiner Meinung nach ginge es einfacher: Sobald du Waren überprüfst, schaust du nach ob der Kunde invalidiert ist. Dazu kannst du unter Umständen auch eine eigene Tabelle verwenden. Ist der Benutzer invalidiert, so sind auch die Waren invalidiert.

[edit]Ein Problem hast du, wenn du das ganze Problem mit SQL lösen willst. Aus Delphi heraus geht es ohne Probleme.[/edit]
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Kaskadierendes Invalidieren von Datensätzen

  Alt 20. Apr 2004, 10:40
Hi,
Zitat von alcaeus:
Meiner Meinung nach ginge es einfacher: Sobald du Waren überprüfst, schaust du nach ob der Kunde invalidiert ist. Dazu kannst du unter Umständen auch eine eigene Tabelle verwenden. Ist der Benutzer invalidiert, so sind auch die Waren invalidiert.

[edit]Ein Problem hast du, wenn du das ganze Problem mit SQL lösen willst. Aus Delphi heraus geht es ohne Probleme.[/edit]
Sorry, aber das habe ich noch nicht verstanden!? Was heißt: 'sobald Du Waren überprüfst...'
Was beabsichtigt ist:

Wenn man auf den Löschen-Button des DBNavigators drückt, sollen der aktive Datensatz und die abhängigen invalidiert werden.

Und was heißt: '...,wenn Du es mit SQL lösen willst'
Das muss ich wohl, denn ich arbeite mit einer Datenbank und diese spricht nunmal nur SQL.
Wahrscheinlich meinst Du wohl das ganze DB-Server-intern zu lösen, so wie mein erster Vorschlag(?).

Vielleicht kannst Du mir Deine Idee ja mal näher erläutern?
Danke.
Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: Kaskadierendes Invalidieren von Datensätzen

  Alt 20. Apr 2004, 14:53
Sorry, vielleicht habe ich mich nur undeutlich ausgedrückt.

Also, Waren die zu einem Benutzer gehören müssen ja nicht unbedingt gelöscht werden,oder? Anstatt also lange alle Waren eines Benutzers zu suchen und zu markieren, kannst du einfach den Benutzer als invalidiert markieren. Um dann zu sehen ob die Waren markiert sind, suchst du einfach den Benutzer heraus und schaust nach, ob der Benutzer invalidiert ist.

Zitat von barnti:
Und was heißt: '...,wenn Du es mit SQL lösen willst'
Das muss ich wohl, denn ich arbeite mit einer Datenbank und diese spricht nunmal nur SQL.
Wahrscheinlich meinst Du wohl das ganze DB-Server-intern zu lösen, so wie mein erster Vorschlag(?).
Ja, ich meinte Server-intern, sorry für die falsche Ausdrucksweise, ich schäme mich zutiefst.
Nach weiterer Überlegung könntest du es aber auch Server-intern lösen, das kommt auf das DB-Design an. Ich hoffe diese Erklärung war etwas besser.
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Kaskadierendes Invalidieren von Datensätzen

  Alt 21. Apr 2004, 10:37
Hi,

ja so habe auch ich es verstanden. Ich denke aber das ist eine unbefriedigende Lösung.

Ich habe jetzt die Idee, wie oben beschrieben, verfolgt. Für jede Tabelle existiert jetzt ein Eintrag in meiner Konfigurationstabelle, wie mit dem Löschen von Datensätzen in den verschiedenen Tabellen umgegangen wird.
So kann ich Bedingungen explizit festlegen. Über die Rekursion werden die direkt und indirekt abhängigen Records mitinvalidiert.

Ich teste noch, es sieht aber gut aus!

Danke für Deine Mühe!
Gruß,

Barnti
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz