verwendetes Datenbanksystem: <Microsoft SQL Server Compact 3.5>
Moin
Ich habe eine einfache Datenbank:
ID
NickName
Name
Vorname
ID
PersonID
Daten
Ich habe eine 1-zu-n-Beziehung.
ID aus Person ist der Fremdschlüssel, der in Data unter PersonID eingetragen wird.
Nun will ich an der Tabelle Person eine Abfrage anhängen, die eine Zeile nach der entsprechenden ID löscht und direkt danach alle Zeilen aus der Tabelle Data, die die ID aus Person unter PersonID haben, also mit Person verknüpft sind.
Im Programmcode wäre das mit LINQ an sich kein Problem. Dann lasse ich einfach die ID als Variable speichern und mache zwei Anweisungen, die die Zeilen aus beiden Tabellen löschen.
Aber wie mache ich das als konkrete Abfrage direkt in der SQL-Datenbank?
Am besten auch noch mit Unterstützung des Abfragegenerators von Visual Studio.
Gruß
an der Tabelle Person eine Abfrage anhängen
? ? ?
die eine Zeile nach der entsprechenden ID löscht und direkt danach alle Zeilen aus der Tabelle Data
Wenn du eine Fremdschlüsselbeziehung hast (du solltest das haben), muss das andersrum sein. Erst die Daten löschen, dann die Person. Sonst verweisen Daten auf eine nicht existierende Person.
Warum brauchst du da einen Generator?
Das ist zweimal DELETE FROM Tabellenname WHERE ID = Wert
Naja, in der Übersicht von Visual Studio ist die Tabelle so dar gestellt, dass direkt darunter die ganzen Abfragen stehen.
Das meinte ich mit "Anhängen"^^
Ich habe es bisher immer mit dem Abfragegenerator überprüft, ob die auch wirklich richtig ist, nur hat der das nie akzeptiert
Du meinst also eine stored procedure? Oder eine View?
Mit einer View kannst du ein DELETE nicht realisieren.
Mit einer View kannst du ein DELETE nicht realisieren.
Doch das geht. Falls die View "einfach" genug ist. Benutz ich jeden Tag 😉
Mit "einfach" meine ich bspw., dass die View keine Group by oder ähnliche Aggregats-Funktionen besitzt.
Zurück zum O-Post: Wie schon gesagt wurde, ist ein Foreign-Key-Constraint in der Datenbank für die verknüpften Daten Pflicht. Wenn man diesen Constraint mit "cascade on delete" konfiguriert, braucht man programmseitig nur noch die Personendaten löschen -- die abhängigen Daten löscht die Datenbank automatisch mit.
Keep it simple 😉
Torsten
Wenn ich ehrlich bin, weiß ich nicht einmal, was das ist.
Mein bisheriges Wissen über MsSQL und LINQ beruht auf den Inhalt dieser Seite:
Und dann noch ein paar eigene Experimente, sowie das Theorie-Wissen über Datenbanken aus der Schule.
Hier, so sieht es im Moment bei mir aus.
Die beziehung habe ich noch nicht drin, aber die kommen noch, so wie ich es beschrieben habe und natürlich ne Fremdschlüsselbeziehung:
Da sieht man auch, was ich mit "Anhängen" meine^^
Ich klicke dann einfach mit Rechts auf eine Tabelle, dann füge ich dort eie Abfrage hinzu unf geh dann weiter, bis man den Text eingeben muss.
Nur hab ich das Gefühl, dass ich von da aus nicht auf andere Tabellen zugreifen kann.
Mit einer View kannst du ein DELETE nicht realisieren.
Doch das geht. Falls die View "einfach" genug ist. Benutz ich jeden Tag 😉
Mit "einfach" meine ich bspw., dass die View keine Group by oder ähnliche Aggregats-Funktionen besitzt.Zurück zum O-Post: Wie schon gesagt wurde, ist ein Foreign-Key-Constraint in der Datenbank für die verknüpften Daten Pflicht. Wenn man diesen Constraint mit "cascade on delete" konfiguriert, braucht man programmseitig nur noch die Personendaten löschen -- die abhängigen Daten löscht die Datenbank automatisch mit.
Keep it simple 😉
Torsten
Wenn du wirklich Recht hast, dann brauche ich mir da ja gar keine Gedanken mehr machen^^
Werd mal Testweise ein paar Daten eintragen und dann einen oder mehrere Accounts löschen.
Ok gehen mags vielleicht, aber obs sinnvoll ist?
Man kann mit Views seine Datenbank beliebig verkomplizieren. Und bei dem einfachen Aufbau, mal angenommen es ist wirklich nicht viel komplexes, würd ich das nicht machen. Jedenfalls niemals wegen zwei DELETE.
Dem Fragesteller empfehle ich, sich mit SQL zu beschäftigen. Das ist mimt Sicherheit kein Fehler wenn man mit Daten zu tun hat.
Hallo,
um das zu erledigen, musst du nichts spezielles tun. Dafür ist der Fremdschlüssel selbst verantwortlich. Stichwort: Referentielle Integrität. Siehe
http://msdn.microsoft.com/en-us/library/aa933119%28v=sql.80%29.aspx
oder auch https://de.wikipedia.org/wiki/Referentielle_Integrit%C3%A4t
Gruß
stupsnose