【发布时间】:2017-08-11 12:36:37
【问题描述】:
我有一个用于书籍、书籍类别和类别的表格
看起来像这样
Book
Id uniqueidentifier,
Title varchar(255),
Author varchar(255),
Deleted datetime
BookCategory
BookId
CategoryId
Category
Id uniqueidentifier
Name varchar(255)
Deleted datetime
我想编写一个约束,如果该书的类别存在,则可以防止删除该书
意思是,如果一本书(比如说哈利波特)有一个虚构的类别,例如,表 BookCategory 将包含两个 ID。如果用户想要删除具有特定类别的图书,他将无法执行此操作。
有人可以帮我吗?
PS当我删除项目时,我实际上并没有删除它们,而是将属性设置为日期时间。
【问题讨论】:
-
"当我删除项目时,我并没有真正删除它们,而是将属性设置为 datetime。"然后你必须使用
UPDATE触发器;约束对你没有帮助。 -
更新触发器是什么意思? @JeroenMostert
-
我会加我的 5 美分。 @JeroenMostert 的意思是您没有实际删除记录,因此外键(人们建议您使用)不会以这种方式提供帮助,而实现这一目标的唯一方法是使用不带约束的触发器。在那里你需要实现检查是否有任何记录使用它的逻辑。
-
我确实知道它不起作用。我的意思是他是否可以为我的案例展示任何示例@DmitrijKultasev
-
如果您确实选择使用触发器路线,如果您希望强制执行(大多数人通常这样做),您还必须为
BookCategory表编写额外的触发器也不允许在该表中创建引用已删除行的新行。
标签: sql sql-server constraints