Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ON CASCADE DELETE etc. (https://www.delphipraxis.net/2918-cascade-delete-etc.html)

Hansa 13. Feb 2003 17:35


ON CASCADE DELETE etc.
 
Hi,

es geht um folgendes :

SQL-Code:
ALTER TABLE ARTIKEL ADD FOREIGN KEY (ID_LIEFNR) REFERENCES LIEFERANT (ID) ON DELETE CASCADE ON UPDATE CASCADE;
Mit dem CASCADE will ich eben alles was mit einem Artikel zusammenhängt löschen / updaten. Jetzt die Frage : Geht das nur, wenn auf einem Artikel ein Foreign Key liegt ?

delorion 14. Feb 2003 07:30

Hallo Hansa

Ja, ich denke der Foreign Key ist hier notwendig.
Allerdings sehe ich noch andere Probleme.
Ich sehe bei Deinem Beispiel die Verknüpfung zum
Lieferanten. Was ist aber mit dem Kunden ?
Ich empfehle Artikel nur zu löschen wenn dafür keine
Bewegungsdaten vorhanden sind.

Gruß Delorion

Hansa 14. Feb 2003 07:42

Zitat:

Zitat von delorion
Ja, ich denke der Foreign Key ist hier notwendig.

Ab und zu denke ich auch, aber das da muß ich genauer wissen. :mrgreen:

Zitat:

Zitat von delorion
Ich empfehle Bewegungsdaten nur zu löschen wenn dafür keine Bewegungsdaten vorhanden sind.

Du meinst jetzt Stammdaten zu löschen, falls keine Bewegungsdaten vorhanden sind. Aber genau um das geht es. In diesem Punkt kommt nach der Abfrage "Wollen sie den Artikel und alle damit zusammenhängende Daten löschen ?" dann noch "Meinen Sie das wirklich ernst ?" :spin:

delorion 14. Feb 2003 07:59

Ja dann mal genauer :coder:

Die Schlüssel verschiedener, miteinander zu verknüpfenden Tabellen müssen sich einander über Fremdschlüssel zuordnen lassen.

Der Fremdschlüssel stellt sicher, dass aufgrund der Entsprechungen zu den Werten im Primärschlüssel einer anderen Tabelle die in mehreren Tabellen gespeicherten Daten wieder zusammengeführt werden können.

Das vorstehende Satzmonster stammt nicht von mir sondern:

"Interbase Datenbankentwicklung mit Delphi" (Andreas Kosch)

Gruß Delorion

Hansa 14. Feb 2003 08:09

Zitat:

Zitat von delorion
Das vorstehende Satzmonster stammt nicht von mir sondern:

"Interbase Datenbankentwicklung mit Delphi" (Andreas Kosch)

Satzmonster :shock: Dieses Wort muß ich mir merken. Habe das Buch auch. Auf welcher Seite steht denn das Satzmonster ? :lol: Intuitiv habe ich das auch so gesehen, aber nun habe ich die gewünschte Klarheit. So ganz sicher war ich mir nämlich nicht.

delorion 14. Feb 2003 08:15

Auf den Seiten 67/68.


Gruß Delorion

Hansa 14. Feb 2003 08:22

Uff, das ist ja fast am Anfang. Muß mir das mal abgewöhnen Bücher von hinten nach vorne durchzulesen. :mrgreen:

Lemmy 14. Feb 2003 08:29

Hi Hansa,

was passiert eigentlich in Deinem Beispiel bei folgendem Fall:

Lieferant L hat über Jahre hinweg Artikel A geliefert, den Du verkauft hast. Lieferant L schließt jetzt wegen Reichtum und macht mit 35 Frührente auf Jamaica. Jetzt löscht Du den Lieferanten L, gleichzeitig den Artikel A. Aber genau da klemmt es jetzt, denn Artikel A ist bei einigen Lieferungen an Kunden in der Rechnung, d.h. Du musst jetzt diese Rechnungen/Auslieferungen ändern! Dann stimmt doch Dein Datenbestand hinten und vorne nicht mehr!!!

Geh lieber wie folgt vor: Wenn Lieferant L nicht mehr im Angebot ist, dann setz bei ihm ne Markierung "inaktiv". Über eine StoredProceudre kannst Du dann auch alle Artikel auf "inaktiv-Stufe-1" setzen, d.h. sie können nicht mehr nachbestellt werden. Sobald der letzte Artikel verkauft ist, wird auf der Artikel auf "inaktiv" gesetzt (z.B. über nen Trigger), d.h. er kann auch nicht mehr verkauft werden.
Zusätzlich kannst Du immer noch eine Löschen-Funktion einbauen, für diese Lieferanten/Artikel die nicht in Bestellungen / Lieferungen aufgeführt sind.

Grüße
Lemmy

Hansa 14. Feb 2003 08:41

Hi Lemmy,

das ist schon richtig was Du sagst, da ein Artikel von mehreren Lieferanten kommen kann, wird das aber nicht kaskadiert. Zumindest nicht ON DELETE. Ich bin halt mit umfangreichen Baumaßnahmen an der DB dran. Und zwar vom Keller bis zum Dach. Deshalb ist das Thema hier schon wichtig, wegen Foreign-Keys usw.

Der konkrete Fall, wo das ganze aber schon komplett durchgezogen werden kann, ist folgender : Rechnung löschen. Dann soll die Rechnung selbst, die Rechnungspositionen, Rabattpositionen usw. auf einen Schlag ohne großen Aufwand gelöscht werden, allerdings auch wiederum nur, sofern sie bezahlt ist. :P

delorion 14. Feb 2003 08:52

Hoppla, jetzt wirds aber ernst :shock:

Hansa Du kannst doch keine bezahlte Rechnung aus ner Warenwirtschaft löschen !!!

Das ist rechtlich nicht zulässig.
Dein Kunde würde in so einem Fall vom Finanzamt notgeschlachtet.
Schon eine Lücke in laufenden Rechnungsnummern macht die Mißtrauisch.

Gruß Delorion


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 Uhr.
Seite 1 von 2  1 2      

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