tablas - SQL AL ELIMINAR CASCADE, ¿de qué manera ocurre la eliminación?
eliminar en cascada postgres (1)
Si tengo dos relaciones en una base de datos, como esta:
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
);
y establezco una relación de clave externa entre los dos, así:
ALTER TABLE BookCourses
ADD FOREIGN KEY (Course)
REFERENCES Courses(Code)
ON DELETE CASCADE;
Luego puede ver que el atributo del Course
en la relación BookCourses
referencia al atributo Code
en la relación Courses
.
Mi pregunta es cuando se produce una eliminación en cualquiera de las dos relaciones, ¿de qué manera la cascada de eliminación? Si elimino una tupla en la relación Courses
, ¿eliminará todas las tuplas de referencia en la relación BookCourses
, o será al revés?
Gracias por tu tiempo.
Cascade funcionará cuando elimine algo en los Courses
mesa. Cualquier registro en la tabla BookCourses
que tenga referencia a Table BookCourses
también será eliminado.
Pero cuando intenta eliminar en la tabla BookCourses
solo la tabla se ve afectada y no en los Courses
Pregunta de seguimiento: ¿por qué tiene CourseID
en la Categoría de la tabla?
Tal vez deberías reestructurar tu esquema en esto,
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;