Si j'ai deux relations dans une base de données, comme ceci:
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
);
et j'établis une relation de clé étrangère entre les deux, comme ceci:
ALTER TABLE BookCourses
ADD FOREIGN KEY (Course)
REFERENCES Courses(Code)
ON DELETE CASCADE;
Ensuite, vous pouvez voir que l' Course
attribut dans la BookCourses
relation fait référence à l' Code
attribut dans la Courses
relation.
Ma question est lorsqu'une suppression se produit dans l'une des deux relations, de quelle manière la suppression en cascade? Si je supprime un tuple dans la Courses
relation, supprimera-t-il tous les tuples référençant dans la BookCourses
relation, ou est-ce l'inverse?
Categories
table aCourseID
comme clé primaire alors que laCourses
table a leEntryID
. Vous devez sérieusement repenser vos choix de dénomination.Réponses:
Cascade fonctionnera lorsque vous supprimerez quelque chose sur la table
Courses
. Tout enregistrement de la tableBookCourses
faisant référence à la tableCourses
sera automatiquement supprimé.Mais lorsque vous essayez de supprimer sur la table,
BookCourses
seule la table elle-même est affectée et non sur leCourses
question de suivi: pourquoi avez-vous
CourseID
sur la table Catégorie?Peut-être devriez-vous restructurer votre schéma en ceci,
la source
Voici un exemple simple pour les autres qui visitent cet ancien message, mais qui est confondu par l'exemple de la question:
Livraison -> Paquet (un -> plusieurs)
L'entrée avec la clé étrangère Delivery_Id (Package) est supprimée avec l'entité référencée dans la relation FK (Delivery).
Ainsi, lorsqu'une livraison est supprimée, les packages qui la référencent seront également supprimés. Si un package est supprimé, aucune livraison ne se produit.
la source