Pregunta

  

Duplicado de: ¿Cuándo / por qué usar cascada en SQL Server?

Siempre tuve demasiado miedo de usar DELETE CASCADE, pero a medida que tengo más confianza (pereza: D), estoy pensando en lo malo que puede ser, ¿es una buena práctica usarlo o debería evitarlo y limpiar mis claves foráneas, etc., a la antigua usanza (con procedimientos almacenados)?

¿Fue útil?

Solución

ON DELETE CASCADE está bien, pero solo cuando las filas dependientes son realmente una extensión lógica de la fila que se está eliminando. Por ejemplo, está bien que ELIMINAR PEDIDOS elimine los ORDER_LINES asociados porque claramente desea eliminar este pedido, que consiste en un encabezado y algunas líneas. Por otro lado, ELIMINAR CLIENTE no debe eliminar los PEDIDOS asociados porque los PEDIDOS son importantes por derecho propio, no son solo atributos de un cliente.

Una forma de pensar en esto es: si publico DELETE X y también elimina Y, ¿estaré feliz o infeliz? Y si publico DELETE X y me dicen "no puedo eliminar X porque Y existe" ¿Me alegraré de la protección o me irritará la incoveniencia?

Otros consejos

Prefiero tener control sobre exactamente lo que se elimina (declarándolo explícitamente), por lo que generalmente opto por eliminar mediante procedimientos almacenados y no usar eliminaciones en cascada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top