假設我有以下各表如何使一個外鍵與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