我的数据库中有三个表。


MedicalTest [MedicalTestID PK]
SportTest [SportTestID PK]
GeneralNeeds [GeneralNeedsID PK]


sql-server - 将一个外键引用到SQL Server 2014中的多个主键-LMLPHP

GeneralNeeds内部有ProcessID,需要保留MedicalTestIDSportTestID GUID。

一旦我从两个表中插入一个现有的GUID,我就会收到“冲突”错误消息,我相信这意味着给定的GUID在另一个表中不存在。

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

sql-server - 将一个外键引用到SQL Server 2014中的多个主键-LMLPHP

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

sql-server - 将一个外键引用到SQL Server 2014中的多个主键-LMLPHP

最佳答案

我在这里推荐的设计是表/子表解决方案。就是说,引入第四个表TestTest表仅用作将所有不同测试类型链接在一起的表。如果您熟悉面向对象的编程,请将其视为基本类型。因此,基本上,您的ProcessID指向Test,然后该Type指向一种特定的测试类型(SportsTest,MedicalTest,WhateverTest)。如果愿意,还可以在Test表中包含一个MedicalTest,以帮助您了解它是哪种测试类型。这里有一个关键的事情:在SportsTestMedicalTestID表中,主键(例如TestID)也是指向TestGeneralNeeds的外键。这样,您可以在Test中使用单个列,因为引用是针对单个表类型Test的。由于MedicalTest和相应的SportsTestMedicalTest将具有相同的主键,因此您可以轻松地执行查询所需的联接。

这是说明它的示例图:sql-server - 将一个外键引用到SQL Server 2014中的多个主键-LMLPHP

简单的例子:
假设您有一个ID为1的Test(让我们忘记GUID一分钟,以便于阅读)
然后,您还将在ProcessID中有一个ID为1的记录。
那么Test为1时实际上指向MedicalTest记录,然后可以将其加入记录。

如果您仍然感到困惑,请告诉我,我将尝试添加更多细节,但希望这可以使您朝着可行的方向发展。

关于sql-server - 将一个外键引用到SQL Server 2014中的多个主键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32429732/

10-10 20:20