SQL ON DELETE CASCADE、削除はどの方法で行われますか? 質問する

SQL ON DELETE CASCADE、削除はどの方法で行われますか? 質問する

次のように、データベースに 2 つのリレーションがある場合:

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
);

そして、次のように 2 つの間に外部キー関係を確立します。

ALTER TABLE BookCourses
ADD FOREIGN KEY (Course)
REFERENCES Courses(Code)
ON DELETE CASCADE;

Courseすると、リレーション内の属性がリレーション内の属性BookCoursesを参照していることがわかります。CodeCourses

私の質問は、2 つの関係のいずれかで削除が発生した場合、削除はどの方向にカスケードされるかということです。関係内のタプルを削除するとCourses、関係内の参照タプルもすべて削除されますかBookCourses、それともその逆でしょうか。

ベストアンサー1

カスケード機能は、テーブル上の何かを削除するときに機能します。テーブルを参照するCoursesテーブル上のすべてのレコードは自動的に削除されます。BookCoursesCourses

しかし、テーブルを削除しようとすると、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;

おすすめ記事