【发布时间】:2015-07-25 12:22:03
【问题描述】:
这个问题来自Foreign Key to multiple tables 但我认为我的阐述可以使用它自己的主题。
假设我有以下架构(改编自上述链接中的@Nathan Skerl's 答案):
create table dbo.PartyType
(
PartyTypeId tinyint primary key,
PartyTypeName varchar(10)
)
insert into dbo.PartyType
values(1, 'User'), (2, 'Group');
create table dbo.Party
(
PartyId int identity(1,1) primary key,
PartyTypeid tinyint references dbo.PartyType(PartyTypeId),
unique (PartyId, PartyTypeId)
)
CREATE TABLE dbo.[Group]
(
ID int NOT NULL,
Name varchar(50) NOT NULL,
PartyTypeId as cast(2 as tinyint) persisted,
foreign key (ID, PartyTypeId) references Party(PartyId, PartyTypeID)
)
CREATE TABLE dbo.[User]
(
ID int NOT NULL,
Name varchar(50) NOT NULL,
PartyTypeId as cast(1 as tinyint) persisted,
foreign key (ID, PartyTypeId) references Party(PartyID, PartyTypeID)
)
CREATE TABLE dbo.Ticket
(
ID int NOT NULL,
[Owner] int NOT NULL references dbo.Party(PartyId),
[Subject] varchar(50) NULL
)
假设我有另一个关系,比如“Stuff”,其中“Users”可以拥有许多“Stuff”项目,但“Groups”拥有“Stuff”没有意义。我可以在“东西”引用中有一个外键只是“用户”吗?
如果有可能,那么如何去做呢?还是我必须直接通过“派对”来完成我所有的那种外键? 我自己尝试时遇到错误(引用的表“dbo.Users”中没有与外键中的引用列“ID”匹配的主键或候选键)。
提前致谢!
【问题讨论】:
标签: sql sql-server relational-database supertype