varias tablas registros registro postgres llave foranea eliminar eliminacion con cascada borrar sql database database-design cascade relation

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;