156

次のように、データベースに 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ます。BookCoursesCodeCourses

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

4

2 に答える 2

187

テーブルで何かを削除すると、カスケードが機能しますCoursesBookCoursesテーブルを参照しているテーブルのレコードはすべて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;
于 2012-11-18T21:38:38.270 に答える