我有一张这样的表:
id | person | supporter | referredby|
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
0 | ABC | DEF | |
1 | ABC | GHI | DEF |
2 | CBA | FED | |
3 | CBA | IHG | FED |
我想要完成的是,如果referredby
列中supporter
列中的值不是特定人员,我希望postgres拒绝INSERT 。 (null referredby
没问题)
例如,使用上面的数据:
4, 'ABC', 'JKL', null
:已接受(可以为空)4, 'ABC', 'JKL', 'IHG'
:拒绝(IHG未列为ABC的支持者)4, 'ABC', 'JKL', 'DEF'
:已接受(DEF被列为ABC的支持者)可能是检查约束?我不知道怎么把它拼凑起来
答案 0 :(得分:0)
添加引用person,supporter的外键。 (需要是独一无二的钥匙。)
alter table t add constraint cname unique(person, supporter);
alter table t add constraint fk foreign key (person, referredby)
references t (person, supporter);
(ANSI SQL语法,但Postgresql可能也支持。)