我有一个表“富”,看起来像Postgres的:如何防止INSERT在特殊情况下
ID | NAME
------+----------------------------
123 | PiratesAreCool
254 | NinjasAreCoolerThanPirates
和第二表“酒吧”
SID | ID | created | dropped
------+------+------------+-----------
9871 | 123 | 03.24.2009 | 03.26.2009
9872 | 123 | 04.02.2009 |
bar.ID
是一个参考(国外键)到foo.ID
。
现在我想阻止你可以插入一个新的记录到'栏',当有一个记录具有相同的ID和bar.dropped为空记录。
所以,当“酒吧”看起来像上面
INSERT INTO BAR VALUES ('9873','123','07.24.2009',NULL);
应该被禁止,但
INSERT INTO BAR VALUES ('9873','254','07.24.2009',NULL);
应该被允许(因为没有“打开”栏中记录为“NinjasAreCoolerThanPirates “)。
我该怎么做? 我希望我的问题很清楚,有人可以帮助我。
对空列的唯一索引不会这样的。 – Draemon 2009-07-24 14:36:30
是的,更新了答案。不知道这只是Postgres的事情,我记得它在其他地方工作。 – 2009-07-24 14:52:19
好吧,经过一些测试“在条形码(id)上创建唯一索引ix_open_bar,其中drop为null;”似乎是最好的解决方案。谢谢。 – sloth 2009-07-24 15:00:46