Probablemente estoy siendo de mente estrecha, pero si creo una restricción de clave externa y una fila se actualiza o elimina, pierdo esa conexión si la columna de la tabla secundaria se establece en NULL.
¿Cuál es el propósito de mantener intencionalmente estas filas huérfanas?
foreign-key
null
Derek Downey
fuente
fuente
Respuestas:
Si
set null
es útil o no depende de lo que haya elegidonull
significar en el contexto particular: con toda la confusión y la opinión en torno a lanull
OMI, el enfoque sensato es que el DBACon esas reglas, considere el siguiente caso de uso:
null
representar una tienda independiente (es decir, una que no forma parte de una cadena)En este caso,
on delete set null
tiene sentido. Hay otras formas de modelar estas reglas comerciales, pero esta es la más simple y si se ajusta con precisión a los hechos que le interesan en el mundo real, sugiero que esté perfectamente bienfuente
La mayoría de los casos de uso que se me ocurren en general son de la forma "Bueno, podríamos hacer algo diferente, pero teníamos ganas de hacerlo".
Considere un
owner
campo para un error en un sistema de seguimiento de problemas en una empresa. Si John renuncia, seguramente todos sus problemas no deberían simplemente eliminarse cuando se elimina su cuenta. Incluso entonces, algunas bases de datos lo permitenSET DEFAULT
como acción (o hacer que un disparador realice la misma tarea), y que unNobody
empleado sea el propietario predeterminado de los problemas podría ser una opción. O podríamos tener undisabled
campo para John en lugar de eliminar su registro.fuente
RESTRICT
), ¡si no por otra razón que señalar la culpa a un viejo empleado cuando algo sale mal!