考虑以下表格:
表:rates
列:id
,label
表:business_rates
列:id
,rate_id
,business_id
表:assignment_rates
列:id
,rate_id
,assignment_id
业务规则是,rates
或business_rates
可以声明来自assignment_rates
的记录。
例如,rates
中的记录id
为100
。它由business_rates
声明(例如:{id:1, business_id:1, rate_id:100}
)。如果有人试图在rate_id=100
中添加assignment_rates
,则应在数据库层引发异常。
这甚至可以在数据库层执行此操作吗?
答案 0 :(得分:1)
您应该为business_rates
和assignment_rates
表创建触发器。
assignment_rates
的触发器可能如下所示:
create or replace function assignment_rates_trigger()
returns trigger language plpgsql as $$
begin
if exists (
select 1
from business_rates
where rate_id = new.rate_id)
then
raise exception 'Rate % exists in business_rates.', new.rate_id;
end if;
return new;
end $$;
create trigger assignment_rates_trigger
before insert or update on assignment_rates
for each row execute procedure assignment_rates_trigger();
insert into assignment_rates values (1, 100, 1);
ERROR: Rate 100 exists in business_rates.
business_rates
的触发器应该类似。