2012-11-18 47 views
122

Nếu tôi có hai mối quan hệ trong một cơ sở dữ liệu, như thế này:SQL ON DELETE CASCADE, Đường nào xảy ra?

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

và tôi thiết lập một mối quan hệ chính nước ngoài giữa hai, như thế này:

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

Sau đó, bạn có thể thấy rằng Course thuộc tính trong quan hệ BookCourses tham chiếu thuộc tính Code trong mối quan hệ Courses.

Câu hỏi của tôi là khi việc xóa xảy ra ở một trong hai mối quan hệ, cách xóa bỏ thác? Nếu tôi xóa một tuple trong mối quan hệ Courses, nó sẽ xóa tất cả các tham chiếu tuple trong mối quan hệ BookCourses, hay nó là một cách khác xung quanh?

Cảm ơn bạn đã dành thời gian.

+7

Người ta chỉ tự hỏi tại sao 'Categories' bảng có một' CourseID' như Primary Key trong khi 'Courses' bảng có' EntryID'. Bạn nghiêm túc cần phải suy nghĩ lại lựa chọn đặt tên của bạn. –

+4

Vui lòng sử dụng tên cột thích hợp để tránh nhầm lẫn và cấu trúc DB rõ ràng. –

Trả lời

152

Cascade sẽ hoạt động khi bạn xóa nội dung nào đó trên bảng Courses. Mọi bản ghi trên bảng BookCourses có tham chiếu đến bảng Courses cũng sẽ bị xóa.

Nhưng khi bạn cố gắng xóa trên bàn BookCourses chỉ bảng riêng của mình bị ảnh hưởng và không phải trên Courses

theo dõi câu hỏi: tại sao bạn có CourseID trên bàn loại?

Có lẽ bạn nên tái cấu trúc giản đồ của bạn vào đây,

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; 
+5

Tuyệt vời! Cảm ơn bạn. * theo dõi câu trả lời: Bởi vì tôi đã nghĩ về nó. Cố định ngay bây giờ ... và trong DB của tôi * –

+51

Câu trả lời này có tên bảng và cấu trúc khác với câu hỏi ... Làm cho nó ít hữu ích hơn. –

+0

Không hoạt động ... – user3177068

Các vấn đề liên quan