【问题标题】:SQL server, data integrity - table referenced by many tablesSQL server,数据完整性——多表引用的表
【发布时间】:2015-08-04 22:59:33
【问题描述】:

我有一个包含一些通用数据的表,必须由多个其他表引用。不能简化被引用表以适应引用表的列。在这种情况下如何强制执行数据完整性和关系?

编辑

说表不能简化,我的意思是不可能把需要的数据存储在需要该数据的表中,并摆脱引用的表。

【问题讨论】:

  • 为什么需要在引用的表中添加列来存储引用它的表的数据?那是零意义。
  • 我的意思是将数据添加到引用表本身,而不是创建外部表,而不是引用表。
  • 请编辑您的问题并提供示例数据。这将有助于澄清您要做什么。

标签: sql sql-server foreign-keys data-integrity


【解决方案1】:

执行 RI 的两种非常灵活的方法是:

  1. 检查约束 - 您可以编写封装要强制执行的逻辑的 UDF,并且约束仅检查 UDF 的真假。

  2. 触发器 - 将 RI 逻辑写入触发器代码。

【讨论】:

  • 每种方式各有利弊吗?
  • 一般不,不。您的问题非常笼统,因此您可以自行查看要强制执行的每个特定 RI 需求,并决定在每种情况下哪个是最好的。
  • 为什么要从复杂且可能非常昂贵的方法开始?像 SQL Server 这样的 RDBMS 旨在解决的特定问题之一是使用 PK/FK 的 RI。它非常轻巧,与自定义编码约束不同,崩溃的可能性很小。如果引用的表真的很忙,您可能会遇到很难调整的性能问题。此外,触发器可以提高事务日志的增长率,因此您也必须对其进行调整。与在表之间定义本机 PK/FK 约束相比,不明白为什么这是一个好的起点。我错过了什么?
  • am 使用 FK 来处理关系,但在这种特殊情况下,我需要一些更复杂的逻辑,所以我不会丢失对象的跟踪,这些对象没有孩子就毫无意义。
【解决方案2】:

-> 必须被多个其他表引用。

好的,所以“一个表”和“其他表”之间必须有公共列,以便您可以创建外键关系。

-> 引用表无法简化以适应引用表的列。

真的不知道你在这里的意思,所以请把它拼出来。如果您不能有通用列,那么您需要根据您的要求进行设计更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2011-06-04
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多