Этот вопрос связан с внешним ключом для нескольких таблиц, но я подумал, что моя разработка может использовать свой собственный предмет.
Скажем, у меня есть следующая схема (адаптированная из ответа @Nathan Skerl в приведенной выше ссылке):
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
)
И скажем, у меня было другое отношение, скажем, «Вещи», где «Пользователи» могли владеть многими элементами «Вещей», но для «Групп» не имело смысла иметь «Материалы». Могу ли я иметь внешний ключ в ссылке «Вещи» только «Пользователь»?
Если это возможно, то как это сделать? Или мне нужно делать все мои внешние ключи такого рода напрямую через «Party»? Я получил сообщение об ошибке (В ссылочной таблице 'dbo.Users' нет первичных ключей или ключей-кандидатов, соответствующих ссылочному столбцу 'ID' во внешнем ключе), когда я попробовал сам.
Заранее спасибо!