我有以下数据库架构:
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
表中创建外键,以基于 memberid
和 membertypeid
对引用来实现引用完整性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/