如何处理关系数据库中的删除?

时间:2013-02-08 02:05:09

标签: sql relational-database rdbms database-integrity

例如,如果关系数据库有一个表Suppliers,其中Suppliers.ID的值用于Invoice.Supplier等其他表的列中,那么如果用户需要,会发生什么? “从系统中移除供应商15”

3 个答案:

答案 0 :(得分:2)

如果Supplier 15Invoice表中有记录。由于Supplier 15是相关的并且在其他表中有记录,因此rdbms将抛出引用完整性错误。

处理此类删除取决于您的业务规则。是否应首先删除相关记录,或者如果在其他表中使用该记录,则可以阻止用户删除该记录。

答案 1 :(得分:0)

这取决于与发票和供应商之间关系的性质:

发票是否可以在没有供应商的情况下存在?如果可以,您可以决定取消引用已删除的supplir的所有列。如果不能,您可以决定删除属于已删除供应商的发票(如果您可以将发票视为供应商对象的子对象),或者您可以阻止删除供应商因为有任何发票可以参考它。

答案 2 :(得分:0)

详细说明@DanBracuk的评论。

在表InActive bit NOT NULL DEFAULT 0中添加一列。

当您“删除”该供应商将其设置为1并且不再在您的用户界面中显示它时,供应商的主列表除外,以便可以将其重新打开

大多数商业会计软件包使用类似的东西,在大多数情况下,如果您知道非活动供应商的名称,您可以将其输入到下拉列表中(并且它将被接受)但它不会出现在下拉列表中。