【问题标题】:How to handle deletion in relational databases?如何处理关系数据库中的删除?
【发布时间】:2013-01-23 17:56:01
【问题描述】:

例如,如果关系数据库有一个表Suppliers,其中Suppliers.ID 的值用于其他表的列中,例如Invoice.Supplier,如果用户想要“删除供应商 15 来自系统"?

【问题讨论】:

    标签: sql relational-database rdbms database-integrity


    【解决方案1】:

    如果Supplier 15Invoice 表中有记录。 rdbms 将引发参照完整性错误,因为Supplier 15 是相关的并且在其他表中有记录。

    处理这种删除将取决于您的业务规则。是先删除相关记录,还是可以阻止用户删除该记录,如果它在其他表中使用。

    【讨论】:

    • 如果业务规则说如果供应商有相关记录就保留供应商,请考虑停用它。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      详细说明@DanBracuk 的评论。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-24
        • 1970-01-01
        • 2018-10-19
        • 2019-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-04
        相关资源
        最近更新 更多