1 回答
TA贡献1803条经验 获得超6个赞
这个想法是一个很大的“尾巴摇狗”的事情。您的业务逻辑不是决定数据库结构,而是试图根据业务结构来决定业务逻辑。
但这仍然是可能的,使用存储过程,例如:
首先,我将创建一些虚拟表:
create table CUSTOMER_CONTRACT (id int PRIMARY KEY );
create table CUSTOMER_CONTRACT_REF (id int PRIMARY KEY,
customer_id int REFERENCES CUSTOMER_CONTRACT(id));
现在到存储过程:
create or REPLACE function can_delete_contract(id int) returns boolean AS $$
BEGIN
delete from CUSTOMER_CONTRACT c
where c.ID = 1;
return true;
EXCEPTION
WHEN FOREIGN_KEY_VIOLATION then
return false;
END;
$$ LANGUAGE plpgsql;
如有异常,会自动回滚。
现在进行一些测试:
select can_delete_contract(1); // true
insert into CUSTOMER_CONTRACT values (1);
select can_delete_contract(1); // true
insert into CUSTOMER_CONTRACT values (1);
insert into CUSTOMER_CONTRACT_REF values(1, 1);
select can_delete_contract(1); // false
添加回答
举报