Как обеспечить ссылочную целостность, которая зависит от значения - PullRequest
1 голос
/ 31 мая 2019

Предположим, у меня есть таблица Level1:

Id int PK
Deleted bit

и еще один стол Level2:

Id
Level1id

Я могу добавить FK к Level2, чтобы сопоставить Level1id с Level1.Id Это отлично работает.

Однако, что если я хочу убедиться, что записи INSERTed в Level2 соответствуют только записям в Level1, где Deleted bit = 0? Как мне это сделать?

Я предполагаю, что мне, возможно, придется написать Trigger, но я надеюсь, что есть более элегантное решение ...

1 Ответ

0 голосов
/ 31 мая 2019

Не думаю, что это очень элегантно, но выполнимо.

create table Level1(
    Id int not null Primary key,
    Deleted bit not null,
constraint u1 unique (Id, Deleted)
);

create table Level2(
    Id int ,
    Level1id int,
    level1Deleted bit default(1) check (level1Deleted=1),
constraint fk1 foreign key (Level1id, level1Deleted) references Level1(Id, Deleted)
);

Используйте его с большой осторожностью, возникнут проблемы с обновлением level1.

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