假设我有以下各表如何使一个外键与PostgreSQL中对被引用表的约束
CREATE TABLE plugins (
id int primary key,
type text);
insert into plugins values (1,'matrix');
insert into plugins values (2,'matrix');
insert into plugins values (3,'function');
insert into plugins values (4,'function');
CREATE TABLE matrix_params (
id int primary key,
pluginid int references plugins (id)
);
这是预期,但我想补充一个附加的约束所有的作品一个matrix_param只能请参阅具有类型'矩阵'的pluginid。所以
insert into matrix_params values (1,1);
应该会成功,但
insert into matrix_params values (2,3);
应该失败。
对于matrix_params的简单约束不起作用,因为它无法知道相应类型在插件表中。
如果matrix_params行的引用的插件一行之后型更新,事情会不会在期望的状态;否则这个工程。 – kgrittn 2012-04-13 12:31:22
@kgrittn:你可以在'plugins'上添加一个UPDATE触发器(如果你的PostgreSQL版本支持它,可能用'WHEN old.type ='矩阵'和new.type!= old.type'条件),那个触发器可能会引发如果更新违反了'is_matrix'条件,则会发生异常。虽然这可能会变得有点难看。 – 2012-04-13 18:36:24