SQL Server 多个表的外键

标签 sql sql-server tsql foreign-keys referential-integrity

我有以下数据库架构:

members_company1(id, name, ...);
members_company2(id, name, ...);
profiles(memberid, membertypeid, ...);
membertypes(id, name, ...)
[ 
       { id : 1, name : 'company1', ... }, 
       { id : 2, name : 'company2', ... }
];

因此,每个个人资料都属于 company1 或 company2 的某个成员,具体取决于 membertypeid

members_company1     —————————      members_company2     
————————————————                    ————————————————
id      ——————————> memberid <———————————         id
name               membertypeid                 name
                       /|\
                        |  
                        |  
      profiles          |  
      ——————————        |  
      memberid  ————————+  
      membertypeid

我想知道是否可以在 profiles 表中创建外键,以基于 memberidmembertypeid 对引用来实现引用完整性members_company1 或members_company2 表记录?

最佳答案

一个外键只能引用一个表,如 documentation 中所述。 (强调我的):

A foreign key (FK) is a column or combination of columns that is used to establish and enforce a link between the data in two tables.

但是,如果您想开始清理内容,可以按照 @KevinCrowell 建议创建一个 members 表,从两个 members_company 表中填充它,并将它们替换为 View 。您可以在 View 上使用INSTEAD OF 触发器将更新“重定向”到新表。这仍然需要一些工作,但这将是在不破坏现有应用程序的情况下修复数据模型的一种方法(当然,如果在您的情况下可行的话)

关于SQL Server 多个表的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15935402/

相关文章:

php - 如果项目有许多(动态)属性,则多个左连接

sql - 如何将postgres 12生成的sql文件恢复到postgres 9.6数据库中

sql - 按 desc 排序顺序未按预期工作

sql - PERSISTED 列可以引用现有的持久字段吗?

tsql - 仅通过存储过程强制插入

mysql - 将列设置为与另一个表中的列相同

sql-server - 嵌套查询中 SQL Server 的列名无效

asp.net - SQL Server 数据库在触发器执行时挂起

sql - 如何仅根据 A COLUMN 的不同值选择行

SQL:将一列数据转换为多列