데이터베이스에 다음과 같은 두 가지 관계가있는 경우 :
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;
그러면 관계의 속성 Course
이 BookCourses
관계 의 속성을 참조 함을 알 수 있습니다 .Code
Courses
내 질문은 두 관계 중 하나에서 삭제가 발생하면 삭제는 어떻게 진행됩니까? Courses
관계 에서 튜플을 삭제하면 관계의 모든 참조 튜플이 삭제 BookCourses
됩니까 아니면 다른 방법입니까?
답변
Cascade는 테이블에서 무언가를 삭제할 때 작동합니다 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 (패키지)가있는 항목은 FK 관계 (배달)에서 참조 된 엔터티와 함께 삭제됩니다.
따라서 배달이 삭제되면 참조하는 패키지도 삭제됩니다. 패키지가 삭제되면 배송에 아무런 영향이 없습니다.