Pregunta

Tengo 3 tablas que se ven así:
(fuente: InsomniacGeek.com )

En las claves externas he puesto eliminaciones en cascada. En este momento, cuando se borra un registro en la tabla de carpetas, sólo se elimina el registro relacionado en el FolderItem.

Esto es normal y correcto.

Lo que me gustaría lograr es cuando se borra un registro en la tabla Carpeta, los registros correspondientes en la FolderItem y la tabla de artículos deberían suprimirse.

¿Cómo puedo solucionar esto? Mediante la adición de un disparador que elimina todas las instancias del elemento mediante el FolderID en cuestión? O ¿hay alguna solución mejor?

¿Fue útil?

Solución

Es necesario decidir cuál es el comportamiento que desea exactamente con el sistema. Su requisito suena un poco anormal y puede indicar un error en el diseño del esquema db. ¿Por qué quieres eliminar un elemento cuando se elimina una carpeta relacionada? ¿Qué pasa si hay otra carpeta todavía relacionada con ese tema, ya que es una relación de muchos a muchos? En ese caso, eliminar el elemento realmente causar violación de clave externa entre el punto y la FolderItem. Si los productos que realmente hacen pertenecer en una carpeta específica, también conocido como de uno a muchos, que no tendrá la tabla FolderItem en absoluto.

Creo que el caso sobre todo probable es que desea borrar el artículo si no hay otras entradas folderItem relacionados con ella. En ese caso, el disparador es la solución adecuada, pero hay que asegurarse de que está mirando para ella en la lógica de disparo.

Otros consejos

Su FK entre el elemento de carpeta y el tema debe eliminaciones en cascada también se han activado.

ACTUALIZACIÓN:
He leído tu comentario, y la respuesta alternativa. Toda la razón - no podía haber leído su pregunta correctamente. Suponiendo simples de una sola muchas relaciones que estaría bien, pero con un mucho-mucho que no es tan simple. Disparadores (o mejor aún, algo de lógica de negocio en su código) son la mejor opción para lograr lo que desea.

No se puede eliminar el registro folteritem porque si u tiene relación de m en m, se supone que el FolderItem puede estar relacionado con otro curso también. Por lo tanto, si u borrar el registro de carpeta, sólo la relación debería suprimirse, no los FolderItems relacionados. Si todos FolderItems sólo pueden estar relacionados con una sola carpeta, se debe utilizar la relación de uno a muchos y establecer la cascada en el FK FolderItem (FK -> pk en la carpeta).

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