Einzelnen Beitrag anzeigen

jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: Tabellen richtig mit Constaints darstellen

  Alt 1. Jan 2015, 18:16
Für was habe ich dann die Constraints in der
Datenbank ?
Du hast 2 Arten Constraints verwendet (laut den Scripts oben):
Primärschlüsselconstraints und Fremdschlüsselconstraints.

Sie haben in der Tat nichts mit dem Delphicode und der Master Detail Mechanik, die Du erzielen möchtest zu tun. Du kannst die Constraints löschen, ohne dass die Funktion Deines Programms beeinträchtigt ist.

Diese beiden und andere Arten von Constraints definieren serverseitige Regeln, die in Deinem Fall u.a. die Datenkonsistenz garantieren! Ja, garantieren. Klingt vielleicht banal, ist es aber nicht.
Beispiel 1:
Deinem Delphiprogramm ist es vermutlich erstmal egal, wenn ein Masterdatensatz gelöscht wird, auch wenn noch Detaildatensätze angezeigt werden. Dein Programm wird diese Daten auch nie wieder anzeigen, also könnte es fast egal sein.
Machst Du aber bspw. einen Report über Deine Daten, wirst Du nie auf die richtigen Zahlen kommen. Weil Du Leichen im Keller hast.

Ein DB Server speichert eben nicht nur stumpf Daten, es geschieht viel mehr, sofern definiert. Und das unabhängig davon, wie gut oder schlecht das zugreifende Programm ist.
Kleiner Wermutstropfen:
Der Server garantiert zwar die Einhaltung gewisser Regeln, er nimmt Dir aber leider nicht ab, die aus Regelverletzung resultierenden Fehler abzufangen.

Beispiel 2:
Löscht Du bei der Constraint Definition oben einen Datensatz aus der Mastertabelle, auf den bereits Detaildatensätze verweisen, wird der Server einen Fehler erzeugen (eine häßliche Meldung auswerfen, die eigentlich niemand sehen will) und den Datensatz nicht löschen. Probier es aus, entferne den Foreign Key Constraint und von da an, ist dem Server egal, was Du löscht.
Umgekehrt kannst Du die Foreign Key Definition so erweitern, das abhängige Datensätze gleich mitgelöscht werden, praktisch, aber vielleicht etwas überraschend für den Anwender.

Dinge wie automatisch erzeugte Indizes auf Schlüsselfeldern sind ein (meist sinnvolles) Geschenk der DB Hersteller. Eigentlich macht man auch das häufig selbst, da man dann z.B. die Namensgebung des Index und seine Art kontrollieren kann.
Gruß, Jo
  Mit Zitat antworten Zitat