使用相同的自动递增主键和名称创建三个表

时间:2018-10-14 05:51:42

标签: sql tsql sql-server-2017

在网上找不到合适的答案。我需要在下面创建三个表作为示例,一个具有自动增量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)
)

1 个答案:

答案 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的评论,但谨慎使用级联删除。通过指定级联删除,您告诉数据库引擎在删除父记录时删除相关记录。如果您尝试删除另一个表引用的记录,则不具有该层叠删除选项只会引发错误。这迫使您作为开发人员考虑从父表中删除行的副作用,并且基本上充当“您确定要删除吗?”的作用。防止不必要的删除。