在 SQL Server 2014 中将一个外键引用到多个主键

Reference one foreign key to multiple primary keys in SQL Server 2014

我的数据库中有三个 table。

  1. MedicalTest [MedicalTestID PK]
  2. SportTest [SportTestID PK]
  3. GeneralNeeds [GeneralNeedsID PK]

GeneralNeeds里面有ProcessID需要保留MedicalTestIDSportTestIDGUID。

一旦我从 table 中插入一个现有的 GUID,我就会收到 "Conflict" 错误消息,我认为这意味着给定的 GUID 在另一个 table 中不存在.

例如:如果我从 MedicalTest 插入 GUID,那么它会告诉我 SportTest 没有给定的 GUID。

是否可以将多个键引用到一列?

我在这里推荐的设计是 table/sub-table 解决方案。这意味着,引入第 4 个 table、TestTest table 只是作为一个 table 将所有不同的测试类型链接在一起。如果您熟悉面向对象编程,可以将其视为基本类型。因此,从本质上讲,您的 ProcessID 指向 Test,然后指向其中一种特定的测试类型(SportsTest、MedicalTest、WhateverTest)。如果愿意,您还可以在 Test table 中包含一个 Type 以帮助您了解它是哪种类型的测试。这里有一个关键的事情:在MedicalTestSportsTesttable中,主键(比如MedicalTestID)也是指向[=19=的外键] 在 Test。通过这种方式,您可以在 GeneralNeeds 中使用单个列,因为引用是对单个 table 类型 Test 的引用。由于 Test 和相应的 MedicalTestSportsTest 具有相同的主键,您可以轻松地进行查询所需的连接。

这是一个示例图来说明它:

简单的例子: 假设您有一个 ID 为 1 的 MedicalTest(让我们暂时忘记 GUID 以使其更易于阅读) 然后,您还会在 Test 中拥有 ID 为 1 的记录。 然后 1 的 ProcessID 确实指向 Test 记录,然后您可以将其加入 MedicalTest 记录。

如果您仍然感到困惑,请告诉我,我会尝试添加更多细节,但希望这能让您朝着可行的方向前进。