如果我在数据库中有两个关系,如下所示:
CREATE TABLE Courses (
CourseID int NOT NULL PRIMARY KEY,
Course VARCHAR(63) NOT NULL UNIQUE,
Code CHAR(4) NOT NULL UNIQUE
);
CREATE TABLE BookCourses (
EntryID int NOT NULL PRIMARY KEY,
BookID int NOT NULL,
Course CHAR(4) NOT NULL,
CourseNum CHAR(3) NOT NULL,
CourseSec CHAR(1) NOT NULL
);
我在两者之间建立了外键关系,如下所示:
ALTER TABLE BookCourses
ADD FOREIGN KEY (Course)
REFERENCES Courses(Code)
ON DELETE CASCADE;
然后您可以看到 BookCourses
关系中的 Course
属性引用了 Courses
关系中的 Code
属性。
我的问题是当两个关系中的任何一个发生删除时,删除会以哪种方式级联?如果我删除 Courses
关系中的元组,它会删除 BookCourses
关系中的所有引用元组,还是相反?
Categories
表有一个 CourseID
作为主键,而 Courses
表有 EntryID
。你真的需要重新考虑你的命名选择。
当您删除表 Courses
上的某些内容时,级联将起作用。表 BookCourses
上任何引用表 Courses
的记录都将被自动删除。
但是,当您尝试在表 BookCourses
上删除时,只有表本身受到影响,而 Courses
后续问题:为什么表类别中有 CourseID
?
也许你应该把你的模式重组成这个,
CREATE TABLE Categories
(
Code CHAR(4) NOT NULL PRIMARY KEY,
CategoryName VARCHAR(63) NOT NULL UNIQUE
);
CREATE TABLE Courses
(
CourseID INT NOT NULL PRIMARY KEY,
BookID INT NOT NULL,
CatCode CHAR(4) NOT NULL,
CourseNum CHAR(3) NOT NULL,
CourseSec CHAR(1) NOT NULL,
);
ALTER TABLE Courses
ADD FOREIGN KEY (CatCode)
REFERENCES Categories(Code)
ON DELETE CASCADE;
这是其他访问此旧帖子的其他人的一个简单示例,但对问题中的示例和其他答案感到困惑:
交货 -> 包裹(一个 -> 多个)
CREATE TABLE Delivery(
Id INT IDENTITY PRIMARY KEY,
NoteNumber NVARCHAR(255) NOT NULL
)
CREATE TABLE Package(
Id INT IDENTITY PRIMARY KEY,
Status INT NOT NULL DEFAULT 0,
Delivery_Id INT NOT NULL,
CONSTRAINT FK_Package_Delivery_Id FOREIGN KEY (Delivery_Id) REFERENCES Delivery (Id) ON DELETE CASCADE
)
外键 Delivery_Id (Package) 的条目与 FK 关系 (Delivery) 中的引用实体一起删除。
因此,当 Delivery 被删除时,引用它的 Packages 也将被删除。如果一个包被删除,任何交付都不会发生任何事情。