在网上找不到合适的答案。我需要在下面创建三个表作为示例,一个具有自动增量ID的父表,然后将其链接到具有相同确切ID的两个子表(Subject和Comment),并在删除该父ID时级联返回。 >
有什么解决方法的想法吗?
我已经用谷歌搜索,对于如何解决这一问题感到非常困惑。我在SQL方面有相当丰富的经验,但是在创建表和关系方面没有。
CREATE TABLE Parent
(
ParentID INT NOT NULL IDENTITY PRIMARY KEY,
Email VARCHAR(50) NOT NULL,...
)
CREATE TABLE Subject
(
ParentID INT NOT NULL PRIMARY KEY,
Subject
)
CREATE TABLE Comment
(
ParentID INT NOT NULL PRIMARY KEY,
Comment VARCHAR(100)
)
答案 0 :(得分:2)
对on delete cascade
使用1对1关系:
CREATE TABLE Parent(
ParentID INT NOT NULL IDENTITY PRIMARY KEY,
Email VARCHAR(50) NOT NULL,...
)
CREATE TABLE Subject(
ParentID INT NOT NULL PRIMARY KEY,
Subject,
CONSTRAINT fk_SubjectParentId FOREIGN KEY (ParentID)
REFERENCES Parent (ParentID) ON DELETE CASCADE
)
CREATE TABLE Comment(
ParentID INT NOT NULL PRIMARY KEY,
Comment VARCHAR(100),
CONSTRAINT fk_CommentParentId FOREIGN KEY (ParentID)
REFERENCES Parent (ParentID) ON DELETE CASCADE
)
这被称为1对1关系,因为外键的两端在表中是唯一的。
尽管我必须同意Mitch Wheat的评论,但谨慎使用级联删除。通过指定级联删除,您告诉数据库引擎在删除父记录时删除相关记录。如果您尝试删除另一个表引用的记录,则不具有该层叠删除选项只会引发错误。这迫使您作为开发人员考虑从父表中删除行的副作用,并且基本上充当“您确定要删除吗?”的作用。防止不必要的删除。