入学验证?

时间:2014-05-20 02:59:12

标签: sql postgresql

我甚至不确定如何标题这个问题。我仍然是数据库的新手。这是我的情况。

我有一个交叉表,

相交( foo_id bar_id

foo( foo_id alpha_fk

栏( bar_id alpha_fk

α(的 alpha_id

当我将(foo_id,bar_id)插入到交叉表中时,我需要确保给定foo_id和bar_id的foo.alpha_pk = bar.alpha_pk。

我不确定最好的方法来验证这一点。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

创建一个布尔函数,返回alpha_fk是否匹配给定的foo_id& bar_id:

CREATE OR REPLACE FUNCTION check_intersections_fooequalsbar(foo_id integer, bar_id integer)
RETURNS boolean AS
$$
SELECT (f.alpha_fk = b.alpha_fk)
    FROM foo f 
    LEFT JOIN bar b ON b.bar_id = $2
    WHERE f.foo_id = $1 FOR UPDATE
$$
LANGUAGE 'plpgsql'

然后在约束

中对交叉表应用该函数
ALTER TABLE intersect
ADD CONSTRAINT check_intersections_fooequalsbar CHECK
(check_intersections_fooequalsbar(foo_id, bar_id))