我甚至不确定如何标题这个问题。我仍然是数据库的新手。这是我的情况。
我有一个交叉表,
相交( 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。
我不确定最好的方法来验证这一点。谢谢你的帮助!
答案 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))