【发布时间】:2013-01-23 17:56:01
【问题描述】:
例如,如果关系数据库有一个表Suppliers,其中Suppliers.ID 的值用于其他表的列中,例如Invoice.Supplier,如果用户想要“删除供应商 15 来自系统"?
【问题讨论】:
标签: sql relational-database rdbms database-integrity
例如,如果关系数据库有一个表Suppliers,其中Suppliers.ID 的值用于其他表的列中,例如Invoice.Supplier,如果用户想要“删除供应商 15 来自系统"?
【问题讨论】:
标签: sql relational-database rdbms database-integrity
如果Supplier 15 在Invoice 表中有记录。 rdbms 将引发参照完整性错误,因为Supplier 15 是相关的并且在其他表中有记录。
处理这种删除将取决于您的业务规则。是先删除相关记录,还是可以阻止用户删除该记录,如果它在其他表中使用。
【讨论】:
这取决于发票和供应商之间的关系性质:
可以在没有供应商的情况下存在发票吗?如果可以,您可以决定取消所有引用已删除供应商的列。如果不能,您可以决定删除属于已删除供应商的发票(如果您可以将发票视为供应商对象的子对象),或者您可以阻止删除供应商因为有任何发票提到它。
【讨论】:
详细说明@DanBracuk 的评论。
在您的表中添加一列InActive bit NOT NULL DEFAULT 0。
当您“删除”该供应商时,将其设置为 1 并且不再在您的用户界面中显示它,除非在供应商的主列表中以便可以重新打开它
大多数商业会计软件包都使用这样的东西,在大多数情况下,如果您知道不活跃供应商的名称,您可以将其输入到下拉列表中(并且会被接受),但它不会出现在下拉列表中。
【讨论】: