sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cascada en Eliminar o usar disparadores?

ELIMINACIÓN EN CASCADA en MSSQL Server solo puede conectarse en cascada a una sola tabla. Si tiene dos tablas con relaciones de clave externa con una tabla de dimensiones, solo puede eliminar en cascada una de ellas. (Esto es para evitar que las eliminaciones caigan en cascada a través de múltiples rutas y creen conflictos, al igual que C++ permite la herencia múltiple pero C# solo permite la herencia única)

Cuando este es el caso, se ve obligado a usar disparadores o manejar específicamente el caso en su código.

Por este motivo he visto a mucha gente optar por utilizar disparadores en todos los casos. Incluso cuando solo hay una mesa extranjera. Esto asegura la consistencia y que las personas sepan qué buscar al mantener la base de datos.

Si uno pudiera eliminar en cascada a más de una tabla, diría que sería la opción más preferible. Esta limitación, sin embargo, enturbia las aguas y actualmente estoy más a favor de que los disparadores posean todos esos comportamientos. La sobrecarga en el uso de disparadores para eliminaciones y actualizaciones en cascada es solo menor en términos de codificación, pero permite prácticas estándar que son verdaderamente genéricas.

EDITAR:

Es posible que desee mover la 'respuesta aceptada' a otra persona, he descubierto que me equivoqué en lo anterior.

PUEDE tener múltiples tablas de hechos que tengan ON DELETE CASCADE Foreign Key Contraints en una sola tabla de dimensiones.

Lo que no puede hacer es tener una tabla de hechos que tenga restricciones de clave foránea ON DELETE CASCADE para varias tablas de dimensiones.

Entonces, por ejemplo...
- Tabla de dimensiones [Persona] (id INT IDENTITY, )
- Tabla de dimensiones [Examen] (id INT IDENTITY, )
- Tabla de caras [Exam_Score] (person_id INT, id_examen INT, puntuación INT)

Si se eliminan la Persona o el Examen, querrá que también se eliminen los registros Exam_Score asociados.

Esto no es posible usando ON DELETE CASCADE en MS SQL Server, por lo que se necesitan disparadores.

(Disculpas a Mehrdad que trató de explicarme esto, pero no entendí por completo su punto).