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?

¿Fue útil?

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.

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