sql-server - SQL Server 条件外键约束

标签 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)

每个查询只有一个联系人。两者之间的链接是 UniversalJoin 表,其中

Enquiry.Join_Ref = UniversalJoin.Join_Ref AND 
Rel_Type = 1 AND
UniversalJoin.Contact_Ref = Contact.Contact_Ref

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

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

CREATE TABLE Enquiry 
  ...
  CONSTRAINT FK_Foo 
  FOREIGN KEY (Join_Ref)
  REFERENCES UniversalJoin (JoinRef WHERE Rel_Type=1)

最佳答案

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

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

但是,我认为您试图与多个 parent 发生争吵,这是不可能的。

关于sql-server - SQL Server 条件外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2409033/

相关文章:

.net - 在 Sql Server 中查找列的默认值的最佳方法

sql - 如何在 SQL Server 中更新具有多个组合行的行

c# - 如何在不在每个过程中创建附加参数的情况下将线程文化从应用程序传递到 sql server?

mysql - Hibernate 在使用 JPA 创建表时添加 'type=MyISAM'

database - VBA for Access 2003 - 用于创建 Access 文件 : setting the Autonumber data type 的 DDL

oracle - DDL Oracle 到 Postgres 的转换

java - Postgresql,使用 JDBC 插入后获取生成的序列

c# - 如何在(rdlc)报告中水平显示表格

java - 基于 JDBC 的工具来导入/导出数据库模式

hadoop - 在 alter exchange 分区中期望 KW_EXCHANGE 接近 'table'