【问题标题】:Maintain referential integrity without FK [closed]在没有 FK 的情况下保持参照完整性 [关闭]
【发布时间】:2020-08-18 05:23:41
【问题描述】:

请建议一些在现有数据库中不使用 FK 的情况下保持参照完整性的最佳方法。计划从某些表中删除 FK。我们如何保持参照完整性。

【问题讨论】:

  • 这听起来很糟糕。为什么要这么做?使用外键是 DBMS 保证参照完整性的方式。没有它们,如果 DBMS 允许,您必须自己构建此逻辑。 也许可以在触发器中查找父表的插入和更新,并在该表中不存在新值时抛出异常。我不太了解 SQL Server,无法说出这是否可能。
  • 实现参照完整性一般有两种方法:外键和触发器。所以是的,FK 不是唯一的方法,但它绝对是最便宜和最快的方法。决定删除它们的原因是什么?跟现实有关系吗?
  • 您要删除 FK 的原因是什么?也许这对于理解问题也很重要。

标签: sql sql-server database-administration


【解决方案1】:

将外键作为数据库设计的一部分是一种很好的做法。始终利用 RDBMS 开箱即用的东西会更好,而不是试图重新发明轮子。

外键除了维护数据库引用完整性外,还可以在执行查询时提供性能优势。 Read FK and performance benefits

如果您不想拥有外键并希望确保引用完整性,您可以考虑以下选项:

  • 为所有插入创建存储过程。存储过程首先检查父级的存在,然后再将记录插入到子级。否则抛出异常
  • 在父表、子表中创建 INSERT、UPDATE、DELETE 触发器并相应地处理参照完整性
  • 如果您有 ETL 负载,您可以考虑在插入数据之前使用 Lookup 来处理引用完整性。错误行可以移动到单独的错误目的地。

【讨论】:

    猜你喜欢
    • 2012-02-20
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多