AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ON CASCADE DELETE etc.
Thema durchsuchen
Ansicht
Themen-Optionen

ON CASCADE DELETE etc.

Ein Thema von Hansa · begonnen am 13. Feb 2003 · letzter Beitrag vom 14. Feb 2003
Antwort Antwort
Seite 1 von 2  1 2      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

ON CASCADE DELETE etc.

  Alt 13. Feb 2003, 18:35
Hi,

es geht um folgendes :

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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
delorion

Registriert seit: 26. Okt 2002
Ort: Bonn
21 Beiträge
 
Delphi 6 Enterprise
 
#2
  Alt 14. Feb 2003, 08: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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3
  Alt 14. Feb 2003, 08:42
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.

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 ?"
Gruß
Hansa
  Mit Zitat antworten Zitat
delorion

Registriert seit: 26. Okt 2002
Ort: Bonn
21 Beiträge
 
Delphi 6 Enterprise
 
#4
  Alt 14. Feb 2003, 08:59
Ja dann mal genauer

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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5
  Alt 14. Feb 2003, 09:09
Zitat von delorion:
Das vorstehende Satzmonster stammt nicht von mir sondern:

"Interbase Datenbankentwicklung mit Delphi" (Andreas Kosch)
Satzmonster Dieses Wort muß ich mir merken. Habe das Buch auch. Auf welcher Seite steht denn das Satzmonster ? Intuitiv habe ich das auch so gesehen, aber nun habe ich die gewünschte Klarheit. So ganz sicher war ich mir nämlich nicht.
Gruß
Hansa
  Mit Zitat antworten Zitat
delorion

Registriert seit: 26. Okt 2002
Ort: Bonn
21 Beiträge
 
Delphi 6 Enterprise
 
#6
  Alt 14. Feb 2003, 09:15
Auf den Seiten 67/68.


Gruß Delorion
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7
  Alt 14. Feb 2003, 09:22
Uff, das ist ja fast am Anfang. Muß mir das mal abgewöhnen Bücher von hinten nach vorne durchzulesen.
Gruß
Hansa
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#8
  Alt 14. Feb 2003, 09: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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9
  Alt 14. Feb 2003, 09: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.
Gruß
Hansa
  Mit Zitat antworten Zitat
delorion

Registriert seit: 26. Okt 2002
Ort: Bonn
21 Beiträge
 
Delphi 6 Enterprise
 
#10
  Alt 14. Feb 2003, 09:52
Hoppla, jetzt wirds aber ernst

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:41 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