我有一个包含以下表格的数据库:
表顺序:
表客户:
现在我必须确保我只能删除没有状态为“打开”的订单的客户。
有没有创建触发器的解决方案?但如果不是......触发器必须如何?
答案 0 :(得分:0)
从数据库一致性的角度来看,您可能不希望删除任何已下订单但未删除订单的客户。如果您允许删除拥有“付款”订单的客户,则您的“订单”表中包含您无法找到客户的记录;这反过来意味着每次查询订单和客户表时,您都需要记住进行外连接。
如果满足以上条件,则可以使用数据库引擎的参照完整性约束来强制执行该规则。
如果上述情况不属实,您实际上可以实施触发器。您没有提到您的RDBMS引擎,因此语法会有所不同,但您需要为客户的“删除”事件创建一个触发器,并检查在订单表中找不到deleted:id,其中status不是“开”。