Ich habe eine Tabelle von Benutzern zB:
%Vor%und eine Tabelle mit Jobs:
%Vor%Die Jobs können Benutzern zugewiesen werden, aber nur für Superuser. Anderen Benutzern können keine Jobs zugewiesen werden.
Ich habe also eine Tabelle, in der ich sehe, welcher Job welchem Benutzer zugewiesen wurde:
%Vor% Aber ich möchte eine Check-Einschränkung erstellen, dass user_id
auf einen Benutzer verweist, der user.superuser = True
hat.
Ist das möglich? Oder gibt es eine andere Lösung?
Dies würde für INSERTS funktionieren:
%Vor%Und dann eine Überprüfung der Tabelle user_has_job:
%Vor%Funktioniert für Einfügungen:
%Vor%Dies ist jedoch möglich:
%Vor%Wenn Sie das Aktualisieren von Benutzern zulassen, müssen Sie daher einen Aktualisierungstrigger für die Benutzertabelle erstellen, um dies zu verhindern, wenn der Benutzer über Jobs verfügt.
Der einzige Weg, an den ich denken kann, ist das Hinzufügen einer eindeutigen Einschränkung für (id, superuser)
zur Tabelle users
und das Referenzieren der Tabelle user_has_job
durch "duplizieren" des dortigen Flags superuser
:
Aufgrund des Werts default
müssen Sie beim Einfügen in die Tabelle superuser
nicht die Spalte user_has_job
angeben. So funktioniert der folgende Einsatz:
Aber versuchen, Arthur in die Tabelle einzufügen, scheitert:
%Vor%Dies verhindert auch, dass furt zu einem Nicht-Superuser wird. Das folgende Update:
%Vor%schlägt mit dem Fehler fehl
FEHLER: Aktualisieren oder Löschen in der Tabelle "Benutzer" verletzt die Fremdschlüsseleinschränkung "user_has_job_user_id_fkey1" in der Tabelle "user_has_job"
Detail: Schlüssel (ID, Superuser) = (2, t) wird immer noch aus der Tabelle "user_has_job" referenziert.
Tags und Links sql postgresql foreign-keys check-constraints