SQL Сервер Один Внешний Ключ Из 2 Таблиц - PullRequest
0 голосов
/ 24 февраля 2020

Можно ли иметь один внешний ключ, который может ссылаться на 2 разные таблицы?

Вот что я имею в виду ...

Create Table1(id nvarchar primary key);

Create Table2(id nvarchar primary key);

Create Table3(id nvarchar foreign key references (Table1(ID) or Table2(ID)) 

Если это невозможно, есть ли рекомендуемые способ обойти это?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2020

Я предполагаю, что вы хотите непересекающиеся ссылки на первые две таблицы.

Вы можете довольно близко подойти к сохраненным вычисляемым столбцам:

Create Table1 (
    id nvarchar(255)
);

Create Table2 (
    id nvarchar(255)
);

Create Table3 (
    id nvarchar(255),
    type int not null check (type in 1, 2),
    id_1 as (case when type = 1 then id end) persisted,
    id_2 as (case when type = 2 then id end) persisted,
    foreign key (id_1) references table_1(id),
    foreign key (id_2) references table_2(id)
);

Здесь - это дБ <> скрипка. Это показывает ошибку, когда идентификатор неправильно ссылается на указанную таблицу.

2 голосов
/ 24 февраля 2020

Да, у вас может быть столбец (или набор столбцов) для ссылки на несколько таблиц в качестве внешних ключей. Я [лично] называю их «разветвлениями внешних ключей», но это только я.

Однако это ДВА отдельных ограничения, которые применяются отдельно, каждое из которых постоянно. Вы не можете иметь OR logi c.

Например.

create Table1 (id nvarchar primary key);

create Table2 (id nvarchar primary key);

create Table3 (
  id nvarchar,
  constraint fk1 foreign key (id) references Table1 (ID),
  constraint fk2 foreign key (id) references Table2 (ID)
);

Если вам нужно условие OR, тогда ответ на ваш вопрос: "нет".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...