Cómo eliminar registros de forma permanente en caso de tablas vinculadas?
-
25-09-2019 - |
Pregunta
Vamos a decir que tengo estas 2 tablas QuesType y Ques: -
QuesType
QuestypeID|QuesType |Active
------------------------------------
101 |QuesType1 |True
102 |QuesType2 |True
103 |XXInActiveXX |False
Ques
QuesID|Ques|Answer|QUesTypeID|Active
------------------------------------
1 |Ques1|Ans1 |101 |True
2 |Ques2|Ans2 |102 |True
3 |Ques3|Ans3 |101 |True
En la Tabla QuesType: - QuesTypeID es una clave principal
En la Tabla Ques: - QuesID es una clave primaria y QuesType ID es la clave externa que refernces QuesTypeID de la Tabla QuesType
Ahora soy incapaz de eliminar registros de la tabla QuesType, sólo puedo hacer QuesType inactiva mediante el establecimiento de activos = Falso. Soy incapaz de eliminar QuesTypes forma permanente debido a la relación de clave externa que tiene con Ques tabla. Por lo tanto, me acaba de establecer la columna Activo = falsas y aquellos Questypes entonces no se ven en mi red cuando su límite.
Lo que quiero hacer es ser capaz de eliminar cualquier QuesType permamnently. Ahora sólo se puede eliminar si no está siendo utilizado en cualquier parte en la tabla de Ques, ¿verdad?
Así que para eliminar cualquier QuesType permanentemente pensé que esto es lo que podría hacer: -
En la cuadrícula que muestra QuesTypes, que tienen esta casilla de verificación para Active y un botón para delete.What me pareció, cuando un usuario hace que algunas inactiva QuesType continuación OnCheckChanged () evento se ejecutará y que tendrá el código para eliminar todas las preguntas Ques en la tabla que están usando esa QuesTypeID. A continuación, en la parrilla QuesType, que QuesType mostraría como Desactivado y sólo a continuación, un usuario puede eliminar de forma permanente.
estoy pensando correctamente?
Actualmente en mi DeleteQuesType procedimiento almacenado lo que estoy haciendo es: -
Configuración de la Activa = falso y Configuración QuesTye = alguna cadena como XXInactiveXX
¿Hay alguna otra manera?
editar ¿Qué pasa si quiero aplicar solamente de esa manera, como primer conseguir que el usuario desactive el QuesType y sólo si está desactivado que el usuario puede eliminar de forma permanente. Es que la lógica correcta?
Solución
Creo que lo que hay que hacer es poner el
ON DELETE CASCADE
cláusula en su restricción de clave externa. Esto filas automáticamente eliminar de la tabla Ques cuando se elimina su fila QuesType correspondiente.
Otros consejos
Es posible eliminar sólo el QuesTypes
desactivada.
Antes de eliminar un QuesType
que tendrá que consultar la base de datos y ver si QuesType.Active = false
. Si es así, puede eliminar todas las filas de la tabla secundaria que la referencia que QuesType.Id
(esto se conoce como un cascada Eliminar). También puede establecer un valor nulo en la columna QuesTypeID en las filas secundarias.
Leer este libro en línea para aprender acerca de la CASCADA eN ELIMINAR | cláusula SET NULL. Esta cláusula le permitirá hacer lo que quiera.