2010-08-26 23 views
5

Quizás sea una pregunta ingenua ... pero creo que siempre deberíamos tener eliminaciones y actualizaciones en cascada. Pero quería saber si hay problemas con eso y cuándo no deberíamos hacerlo. Realmente no puedo pensar en un caso en este momento en el que no quieras hacer una eliminación en cascada, pero estoy seguro de que hay uno ... pero ¿qué pasa con las actualizaciones si se hicieran siempre?¿Cuáles son los pros y los contras de la eliminación y las actualizaciones en cascada?

¿Puede alguien enumerar los pros y los contras de las eliminaciones en cascada y las actualizaciones? Gracias.

Respuesta

7

Pros:

  • Cuando se elimina una fila de la tabla primaria de todas las filas de clave externa se eliminan
  • Esto es generalmente más rápido que la implementación de este con disparadores
  • filas huérfanos son poco probable

Contras

  • Los huérfanos son posibles
  • Si por error se elimina una fila de la tabla padre se eliminarán todas las filas de las tablas secundarias correspondientes y será PITA de averiguar lo que ha eliminado
1

Pros:

  • de integridad de datos - puede ayudar a evitar situaciones en las que un registro se refiere a algo que ya no está allí.

Contras:

  • Rendimiento - eliminaciones en cascada/actualizaciones pueden ser sloooooooooooooooooooow.
  • Complejidad: parece que la mayoría de las personas con las que trabajo no están acostumbradas a las cascadas, así que cuando les das un nuevo proyecto que las tiene, se sorprenden un poco la primera vez que activan una de estas cascadas.
  • Como otros ya han mencionado, realmente pueden ensuciar las cosas cuando se usan incorrectamente.
+1

O, en forma estándar, SLW O20 – jball

+1

Su punto sobre el rendimiento no tiene sentido. Las eliminaciones/actualizaciones en cascada manualmente son más lentas que dejar que la base de datos lo maneje. – Gili

5

Esto depende de las entidades que están en las tablas: si el lado de la clave externa no puede existir sin el lado de la clave principal, tiene sentido haber eliminado en cascada.

E. g .: una línea de factura no tiene ningún derecho a sobrevivir si se elimina la factura.

Pero si tiene una clave externa utilizada para la relación "funciona para" para la relación entre un empleado y su jefe, ¿le gustaría eliminar al empleado si el jefe deja la empresa?

Además: un problema técnico es que algunas herramientas ORM (asignación relacional de objetos) se confunden si las entradas de la tabla dependiente cambian sin que ellas sean responsables de eso.

+0

No estoy seguro de que eliminaría el jefe exactamente por este motivo, probablemente desactivaría la fila – SQLMenace

+0

@SQLMenace ¿Conservaría a todos los empleados anteriores para siempre en una tabla de empleados? Pero espero que veas el punto: hay situaciones en las que el niño tiene una existencia por sí mismo, incluso si el padre se elimina. – Frank

+0

No estoy llamando su respuesta, solo digo lo que haría ... registramos todos los cambios de todos modos y van a una tabla de Historia ... de acuerdo con la política de la compañía es posible que no se le permita borrar filas – SQLMenace

-1

Pro: permite usted para reducir la cantidad de declaraciones SQL necesarias para realizar acciones de eliminación.

Con: puede eliminar datos que de alguna manera pueden ser importantes para la auditoría en un momento posterior.Por lo tanto, es importante mantenerlo incluso si la fila principal se ha eliminado. En este caso, la clave externa debería recibir un valor NULO, por ejemplo.

Cuestiones relacionadas