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?

enter image description here

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 columna mgr_ssn a la columna ssn en la mesa employeeCon el on 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 tabla EMPLOYEE, lo que indica que el campo Super_ssn debe coincidir con un valor de Ssn en la tabla EMPLOYEE. La opción ON DELETE CASCADE especifica que, si se elimina una entrada de la tabla EMPLOYEE que tiene un valor de Ssn que coincida con un valor de Super_ssn en la tabla EMPLOYEE, también se eliminarán las entradas de EMPLOYEE que tengan ese valor de Super_ssn.

    Esto significa que:

    Si se elimina un empleado que es gerente (es decir, tiene un valor de Ssn que coincide con el valor de Super_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