Se eu tiver duas relações em um banco de dados, assim:
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
);
e eu estabeleço um relacionamento de chave estrangeira entre os dois, assim:
ALTER TABLE BookCourses
ADD FOREIGN KEY (Course)
REFERENCES Courses(Code)
ON DELETE CASCADE;
Então você pode ver que o Course
atributo na BookCourses
relação faz referência ao Code
atributo na Courses
relação.
Minha pergunta é quando ocorre uma exclusão em qualquer uma das duas relações. De que maneira a exclusão é em cascata? Se eu excluir uma tupla na Courses
relação, ela excluirá todas as tuplas de referência na BookCourses
relação ou será o contrário?
Categories
tabela possui aCourseID
como Chave Primária enquanto aCourses
tabela possui oEntryID
. Você realmente precisa repensar suas opções de nomes.Respostas:
O Cascade funcionará quando você excluir algo da tabela
Courses
. Qualquer registro na tabelaBookCourses
que tenha referência à tabelaCourses
será excluído automaticamente.Mas quando você tenta excluir na tabela,
BookCourses
apenas a tabela em si é afetada e não noCourses
pergunta de acompanhamento: por que você tem
CourseID
na tabela Categoria?Talvez você deva reestruturar seu esquema para isso,
fonte
Aqui está um exemplo simples para outras pessoas que visitam esse post antigo, mas está confuso com o exemplo da pergunta:
Entrega -> Pacote (Um -> Muitos)
A entrada com a chave estrangeira Delivery_Id (Package) é excluída com a entidade referenciada no relacionamento FK (Delivery).
Portanto, quando uma Entrega é excluída, os Pacotes referenciados também serão excluídos. Se um pacote for excluído, nada acontece com as entregas.
fonte