SQL Server条件外键约束

Ste*_*eve 5 sql-server ddl

我无法弄清楚如何创建外键约束.我的数据模型是固定的,不受我的控制,它看起来像这样:

CREATE TABLE Enquiry 
  (Enquiry_Ref INTEGER PRIMARY KEY CLUSTERED, Join_Ref INTEGER, EnquiryDate, EnquiryType...)

CREATE TABLE Contact 
  (Contact_Ref INTEGER PRIMARY KEY CLUSTERED, Surname, Forenames ....)

CREATE TABLE UniversalJoin 
  (Join_Ref INTEGER, Contact_Ref INTEGER, Rel_Type INTEGER)
Run Code Online (Sandbox Code Playgroud)

每个查询只有一个联系人.两者之间的联系是UniversalJoin表所在

Enquiry.Join_Ref = UniversalJoin.Join_Ref AND 
Rel_Type = 1 AND
UniversalJoin.Contact_Ref = Contact.Contact_Ref
Run Code Online (Sandbox Code Playgroud)

Rel_Type根据源表的不同而不同,因此在Inquiry的情况下,Rel_Type为1,但对于另一个表,它将设置为N.

我的问题是如何创建外键约束来强制实现这种关系的完整性?我想说的,但不能,是:

CREATE TABLE Enquiry 
  ...
  CONSTRAINT FK_Foo 
  FOREIGN KEY (Join_Ref)
  REFERENCES UniversalJoin (JoinRef WHERE Rel_Type=1)
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 5

不能在 SQL Server 中使用条件外键或过滤外键

在这些情况下,您可以在 (JoinRef, Rel_Type) 之间设置多列 FK,并在 UniversalJoin 中对 Rel_Type 设置检查约束以使其为 1。

然而,我认为你试图与多个父母发生争吵,这是不可能的。