如何确保依赖值的参照完整性

时间:2019-05-31 08:23:15

标签: sql sql-server

假设我有一个表Level1

Id int PK
Deleted bit

和另一个表Level2

Id
Level1id

我可以在FK上添加Level2,以使Level1idLevel1.Id匹配 很好。

但是,如果我要确保INSERTed中的记录Level2仅与Level1中的记录{em>匹配,其中Deleted位= 0,该怎么办? ?我该怎么办?

我猜想我可能必须编写一个触发器,但是希望有一个更优雅的解决方案...

1 个答案:

答案 0 :(得分:0)

我认为这不是很优雅,但是可行。

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会遇到问题。