Es gibt ein paar Dinge über die beiden Einschränkungen, die Sie auferlegen möchten:
-
Eine neu eingefügte Zeile darf keinen NULL-Wert für die Spalte Parent_group haben.
- Sie können einer Spalte nur dann eine NOT NULL-Einschränkung auferlegen, wenn sie alle Nicht-Null-Werte enthält. Sie benötigen einen Nullwert in dieser Spalte für den Wurzelknoten.
- Hierzu können Sie die CHECK-Einschränkung verwenden. Lesen Sie mehr über die CHECK CONSTRAINT hier .
- Sie können setzen
Dies erlaubt nur einen NULL-Wert für den Stammknoten und erzwingt einen NOT NULL-Wert für jede andere Zeile in der Tabelle.
-
Fügen Sie eine Einschränkung hinzu, damit die RootGroup-Zeile nicht gelöscht werden kann.
- Dass Sie bereits einen Fremdschlüssel zwischen
parent_group
definiert haben undpkey
, erzwingt die Datenbank automatisch die referenzielle Integrität und verbietet das Löschen des Stammknotens (oder aller übergeordneten Knoten). Die Datenbank gibt einen Fehler zurück, wenn ein DELETE auf einem übergeordneten oder Stammknoten versucht wird.
- Dass Sie bereits einen Fremdschlüssel zwischen
-
Für den im EDIT erwähnten Punkt -Abschnitt können Sie eine einfache Check-Einschränkung wie
CHECK (parent_group != pkey)
in die Tabelle einfügen . Dies sollte die Arbeit für Sie erledigen.
Lesen Sie, wie Sie Fremdschlüsseleinschränkungen definieren und wie Sie sie verwenden, um die referenzielle Integrität zu erzwingen. Gehen Sie auch den Link durch, den ich oben gepostet habe, oder hier bevor Sie diese Vorschläge anwenden.