作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常简单的数据库,其架构定义如下:
CREATE TABLE dbo.Tags
(
TagName NVARCHAR(100) PRIMARY KEY
);
CREATE TABLE dbo.Posts
(
PostSlug NVARCHAR(100) PRIMARY KEY,
Title NVARCHAR(100) NOT NULL
);
CREATE TABLE dbo.PostTagJunction
(
PostSlug NVARCHAR(100),
TagName NVARCHAR(100)
PRIMARY KEY (PostSlug, TagName),
FOREIGN KEY (PostSlug) REFERENCES dbo.Posts (PostSlug)
ON DELETE CASCADE,
FOREIGN KEY (TagName) REFERENCES dbo.Tags (TagName)
);
我想做到这一点,以便当我从 dbo.Posts
中删除帖子时,dbo.Tags
中生成的非引用标签也会被删除。
考虑以下代码:
INSERT INTO dbo.Posts
VALUES ('hello-world', 'Hello World');
INSERT INTO dbo.Tags
VALUES ('Introduction');
INSERT INTO dbo.PostTagJunction
VALUES ('hello-world', 'Introduction');
DELETE
FROM dbo.Posts
WHERE postslug = 'hello-world'
因为我使用级联删除选项,所以帖子会从 dbo.Posts 中删除,记录也会从 dbo.PostTagJunction 中删除。然而,尽管是孤儿,dbo.Tags
中的 hello-world
记录仍然存在。我也想删除标签。如何?
我应该强调,如果该标签正在被其他帖子使用,则不应将其删除。谢谢。
我使用 Dapper
和 C#
与数据库通信。
最佳答案
您可以使用触发器对数据库进行非规范化,换句话说,您可以在 dbo.Posts
上创建一个 FOR DELETE
触发器,该触发器将自动删除孤儿中的记录dbo.Tags
表,示例:
CREATE TRIGGER triggerName
ON dbo.Posts
FOR DELETE
AS
DELETE FROM dbo.Tags
WHERE TagName IN (SELECT TagName FROM DELETED)
GO
关于c# - 高级级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28668768/
我是一名优秀的程序员,十分优秀!