![]() |
ON CASCADE DELETE etc.
Hi,
es geht um folgendes :
SQL-Code:
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 ?
ALTER TABLE ARTIKEL ADD FOREIGN KEY (ID_LIEFNR) REFERENCES LIEFERANT (ID) ON DELETE CASCADE ON UPDATE CASCADE;
|
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 |
Zitat:
Zitat:
|
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 |
Zitat:
|
Auf den Seiten 67/68.
Gruß Delorion |
Uff, das ist ja fast am Anfang. Muß mir das mal abgewöhnen Bücher von hinten nach vorne durchzulesen. :mrgreen:
|
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 |
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 |
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 07:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz