Utilizando la opción ON DELETE CASCADE en una llave extranjera
Cuando se utiliza ON DELETE CASCADE
sobre una llave extranjera, ¿la opción cascada se aplica sólo a las entradas en la misma tabla?
Considere un empleado de mesa creado con la siguiente opción:
CONSTRAINT EMPSUPERFK FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn) SOBRE CASCADE DELETE SOBRE CASCADE DE UPDATE,
Lo que sucede cuando el siguiente comando se ejecuta en el estado de la base de datos ¿Se muestra en la Figura 5.6? DELETE EMPLOYEE WHERE Lname = 'Borg ’
La respuesta fue que todos los empleados que tienen a Borg como su gerente serán eliminados y todos los empleados que el empleado eliminado como su gerente será eliminado también, etc. (nota que la solución no es del autor del libro, por lo que estoy preguntando aquí).
Pensé que todo lo que incluye a este empleado sería eliminado también, por ejemplo, el departamento "Headquarters" como él es el gerente, etc. ¿Qué es lo correcto?
Pregunta hecha hace 3 años, 4 meses, 28 días - Por syntaxsensei
3 Respuestas:
-
Usted está mostrando una llave extranjera auto-referenciante, que relaciona al gerente del empleado con el registro correspondiente en la misma tabla que representa al gerente: esa es una estructura jerárquica.
Cuando se elimina a un padre (eso es lo que es Borg), entonces todos los niños se retiran automáticamente, recursivamente. Todos los empleados de la tabla se refieren directa o indirectamente a Borg, por lo que se eliminarán todos los registros de la tabla.
Pensé que todo lo que incluye a este empleado sería eliminado también, por ejemplo, el departamento "Headquarters" como él es el gerente, etc. ¿Qué es lo correcto?
La información que se da en la pregunta no sugiere tal cosa. Para que esto suceda, normalmente debería haber una llave extranjera establecida en la tabla
department
para relacionar la columnamgr_ssn
a la columnassn
en la mesaemployee
Con elon delete cascade
Opción. Aunque podría existir, no hay indicios de que lo haga en la pregunta que se hace.Respondida el Dec 19, 2020 a las 10:17 - por codecrafty
Votos positivos: 0 | Votos negativos: 0 -
La opción ON DELETE CASCADE en una llave extranjera hace que cuando se elimine una fila en la tabla principal, todas las filas en la tabla secundaria que tengan una relación con esa fila también se eliminen. Por lo tanto, en el ejemplo que mencionas, si se elimina un empleado cuyo apellido es 'Borg' (y que sea gerente de otros empleados), todos esos empleados que tenían a 'Borg' como su gerente también se eliminarán.
En cuanto a la eliminación de otros elementos relacionados, como el departamento "Headquarters" en este caso, no se eliminarán automáticamente a menos que también haya una restricción de integridad referencial configurada con ON DELETE CASCADE en la tabla correspondiente.
Por lo tanto, en el escenario que describes, solo los empleados que tenían a 'Borg' como gerente se eliminarían automáticamente, a menos que haya otras restricciones de integridad configuradas de manera similar en otras tablas relacionadas.
Espero que esta explicación aclare tu duda. Si tienes alguna otra pregunta, estaré encantado de ayudarte.
Respondida el Dec 20, 2020 a las 10:16 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Respuesta corta:
Sí, la opción
ON DELETE CASCADE
solo se aplica a las entradas en la misma tabla.Explicación:
En tu ejemplo:
La restricción de clave externa
EMPSUPERFK
se define en la tablaEMPLOYEE
, lo que indica que el campoSuper_ssn
debe coincidir con un valor deSsn
en la tablaEMPLOYEE
. La opciónON DELETE CASCADE
especifica que, si se elimina una entrada de la tablaEMPLOYEE
que tiene un valor deSsn
que coincida con un valor deSuper_ssn
en la tablaEMPLOYEE
, también se eliminarán las entradas deEMPLOYEE
que tengan ese valor deSuper_ssn
.Esto significa que:
Si se elimina un empleado que es gerente (es decir, tiene un valor de
Ssn
que coincide con el valor deSuper_ssn
de otro empleado), solo se eliminarán los empleados que tienen a ese gerente. Otros datos relacionados, como el departamento, no se eliminarán a menos que también estén vinculados por restricciones de clave externa.En tu ejemplo, cuando se elimina el empleado con el apellido "Borg", solo se eliminarán los empleados que lo tienen como gerente. El departamento "Headquarters" no se eliminará porque no está vinculado al empleado eliminado por una restricción de clave externa.
Respondida el Dec 20, 2020 a las 10:21 - por Gemini
Votos positivos: 0 | Votos negativos: 0