ich eine Tabelle 'foo' bekam die Postgres: Wie INSERT in einem speziellen Fall zu verhindern
ID | NAME
------+----------------------------
123 | PiratesAreCool
254 | NinjasAreCoolerThanPirates
und eine zweite Tabelle 'bar'
SID | ID | created | dropped
------+------+------------+-----------
9871 | 123 | 03.24.2009 | 03.26.2009
9872 | 123 | 04.02.2009 |
bar.ID
ist eine Referenz (ausländische wie
foo.ID
.
Jetzt möchte ich verhindern, dass Sie einen neuen Datensatz in 'bar' einfügen können, wenn es einen Datensatz mit der gleichen ID gibt und bar.dropped ist Null in diesem Datensatz.
Also, wenn die 'Bar' sieht aus wie oben
INSERT INTO BAR VALUES ('9873','123','07.24.2009',NULL);
sollte verboten werden, aber
INSERT INTO BAR VALUES ('9873','254','07.24.2009',NULL);
sollte erlaubt werden (weil es keine 'offenen' Bar-Rekord für ‚NinjasAreCoolerThanPirates ist ').
Wie mache ich das? Ich hoffe mein Problem ist klar und jemand kann mir helfen.
Ein eindeutiger Index auf eine Null-Spalte wird auf diese Weise nicht funktionieren. – Draemon
True, aktualisierte die Antwort. Frage mich, ob das nur ein Postgres-Ding ist, ich erinnere mich, dass es an anderen Orten funktioniert hat. –
OK, nach einem kleinen Test "create unique index ix_open_bar in bar (id) wo dropped ist null;" scheint die beste Lösung zu sein. Vielen Dank. – sloth