2012-04-05 4 views
0

Was ist die beste Einschränkung für eine Foramtabelle, in der Benutzer Kommentare hinterlassen?mySQL Cascade einschränken Keine Aktionseinstellungen

Angenommen, einige Benutzer werden zu einem späteren Zeitpunkt gelöscht. Wenn ich einen Benutzer lösche, der kommentiert hat, was passiert mit dem Benutzereintrag in der Tabelle?

Hoffe jemand kann erklären.

Antwort

1

Es gibt zwei Teile auf diese Frage:

  1. wie dies am besten zu implementieren? Sie können Benutzerzeilen "löschen". Dies hat folgende Vorteile:

    • nicht Benutzerinformationen zu verlieren
    • so dass Anwender ohne

    können Soft Löschen implementiert werden, um die Benutzer verknüpfen Daten zu verlieren un-deleted

  2. Aufrechterhaltung der referenziellen Integrität sein durch Hinzufügen einer weiteren Spalte zur Benutzertabelle mit einer dateDeleted Spalte - wenn es Null ist, dann wird der Benutzer nicht gelöscht. Ich glaube, dass SO einen solchen Mechanismus zum Löschen von Beiträgen verwendet.

  3. was macht restrict cascade no action? Die MySQL docs sagen

  • RESTRICT: Lehnt die Lösch- oder Aktualisierungsvorgang für die übergeordnete Tabelle. Die Angabe von RESTRICT (oder NO ACTION) ist gleichbedeutend mit dem Auslassen der ON DELETE- oder ON UPDATE-Klausel.

  • KEINE AKTION: Ein Schlüsselwort aus Standard-SQL. In MySQL entspricht dies RESTRICT. InnoDB weist die Lösch- oder Aktualisierungsoperation für die übergeordnete -Tabelle zurück, wenn in der referenzierten Tabelle ein verwandter Fremdschlüsselwert vorhanden ist. Einige Datenbanksysteme haben aufgeschobene Prüfungen, und KEINE AKTION ist eine verzögerte Prüfung . In MySQL werden Fremdschlüsseleinschränkungen sofort überprüft, daher ist NO ACTION dasselbe wie RESTRICT.

Mit anderen Worten, wenn Sie diese verwenden, werden Sie nicht in der Lage Zeilen löschen, wenn so referentielle Integrität brechen würde tun.

+0

Vielen Dank dafür. Welche Einschränkung ist am besten für die erste Option zu verwenden, die Sie für ON UPDATE und ON DELETE angegeben haben? – JamesBondInBlack

+0

@olad Wenn Sie 'InnoDB' als Speichermodul verwenden, werden Fremdschlüssel automatisch erzwungen. Daher sind die Standardeinstellungen für ON UPDATE und ON DELETE in Ordnung, da Sie die Primärschlüssel der Zeilen nicht ändern (oder zumindest nicht ändern sollten). –