我的数据库中有三个表。
MedicalTest [MedicalTestID PK]
SportTest [SportTestID PK]
GeneralNeeds [GeneralNeedsID PK]
在GeneralNeeds
内部有ProcessID
,需要保留MedicalTestID
和SportTestID
GUID。
一旦我从两个表中插入一个现有的GUID,我就会收到“冲突”错误消息,我相信这意味着给定的GUID在另一个表中不存在。
例如:如果我从MedicalTest
插入GUID,它将告诉我SportTest
没有给定的GUID。
是否可以将多个键引用到一列?
最佳答案
我在这里推荐的设计是表/子表解决方案。就是说,引入第四个表Test
。 Test
表仅用作将所有不同测试类型链接在一起的表。如果您熟悉面向对象的编程,请将其视为基本类型。因此,基本上,您的ProcessID
指向Test
,然后该Type
指向一种特定的测试类型(SportsTest,MedicalTest,WhateverTest)。如果愿意,还可以在Test
表中包含一个MedicalTest
,以帮助您了解它是哪种测试类型。这里有一个关键的事情:在SportsTest
和MedicalTestID
表中,主键(例如TestID
)也是指向Test
中GeneralNeeds
的外键。这样,您可以在Test
中使用单个列,因为引用是针对单个表类型Test
的。由于MedicalTest
和相应的SportsTest
或MedicalTest
将具有相同的主键,因此您可以轻松地执行查询所需的联接。
这是说明它的示例图:
简单的例子:
假设您有一个ID为1的Test
(让我们忘记GUID一分钟,以便于阅读)
然后,您还将在ProcessID
中有一个ID为1的记录。
那么Test
为1时实际上指向MedicalTest
记录,然后可以将其加入记录。
如果您仍然感到困惑,请告诉我,我将尝试添加更多细节,但希望这可以使您朝着可行的方向发展。
关于sql-server - 将一个外键引用到SQL Server 2014中的多个主键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32429732/