Entwickler-Ecke

Datenbanken - Datenbankeintrag löschen mit Beziehung


PC17 - Di 25.12.12 16:05
Titel: Datenbankeintrag löschen mit Beziehung
Hallo!

Ich möchte gerne einen ganzen Datenbankeintrag löschen, mit allen unter Beziehungen.
So kann ich aus einer Tabelle die Zeile mit der id = 3 löschen, jedoch geht das in diesem Fall nicht, weil dieser Eintrag in einer Beziehung mit einer anderen Tabelle steht.

C#-Quelltext
1:
 string strSQL = "DELETE FROM Ski WHERE id=" + 3;                    


Wie kann ich jetzt alles zu diesem Eintrag löschen?

Wünsch Euch schöne Feiertage!
MfG PC17


WasWeißDennIch - Di 25.12.12 17:46

Du musst zuerst alle Detailsätze löschen, und zwar in der Reihenfolge ihrer Abhängigkeiten. Erst dann lässt sich auch der Hauptsatz löschen. Du kannst Dir u.U. diese Mühe sparen, wenn Du eine andere Löschregel (ON DELETE CASCADE) einstellst, aber das musst Du selbst entscheiden.


Martok - Di 25.12.12 17:56

user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
Du kannst Dir u.U. diese Mühe sparen, wenn Du eine andere Löschregel (ON DELETE CASCADE) einstellst, aber das musst Du selbst entscheiden.
Ergänzung: user profile iconWasWeißDennIch redet von Foreign Key Constraints. Muss man aber sehen, ob man das will [http://blog.koehntopp.de/archives/2643-Ein-paar-Gedanken-zu-Foreign-Key-Constraints.html]. Ich würd's machen, aber die Punkte im Artikel sind schon nicht ganz aus der Luft gegriffen.


WasWeißDennIch - Di 25.12.12 18:19

Richtig, man muss sich seine DB-Struktur schon sehr genau anschauen und dann entscheiden, ob man wirklich kaskadierend löschen will. Wenn es ganz blöde kommt, löscht man sich sonst Datensätze, die man eigentlich lieber behalten möchte.


Klabautermann - Mi 02.01.13 16:06

Hi,
user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
Wenn es ganz blöde kommt, löscht man sich sonst Datensätze, die man eigentlich lieber behalten möchte.

egal was man löscht, es wird immer ein Kunde kommen, der das dann doch wieder behalten wollte. Deshalb bin ich ein Freund von Deleted-Flags und echtem löschen nur in ganz seltenen Ausnahmen. Aber das ist eine andere Geschichte ;).

Gruß,
Klabautermann


Tranx - Mi 02.01.13 17:58

Ich muss Klabautermann Recht geben, denn gerade bei Kundendaten z.B. kann es sein, dass eben nicht alle Abhängigkeiten erfasst werden (Kunden - Aufträge - Auftragsdetails - Adresssen ...) so dass dann plötzlich Verweise ins Leere laufen. Besser ist bei Stammdaten (z.B. Kundendaten, diese nur über ein Deleteflag (Logisches Feld, belegt mit TRUE, automische Belegung beiom Anlegen mit FALSE) zu kennzeichnen. Dann kann dieser Datensatz wieder problemlos zurückgeholt werden. Detaildaten allerdings kann man eher real löschen, denn sonst würde man sich vielleicht Probleme einhandeln (z.B. nicht ausgeführte Aufträge).