Como excluir registros permanentemente no caso de tabelas vinculadas?
-
25-09-2019 - |
Pergunta
Digamos que eu tenho estas 2 tabelas Questype e 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
Na tabela Questype:- QuestypeId é uma chave primária
Na tabela Ques:- Quesid é uma chave primária e o ID do Questype é a chave estrangeira que refere-se a QuestypeID da tabela Questype
Agora não consigo excluir registros da tabela Questype, só posso tornar o Questype inativo ao configurar ativo = false. Não consigo excluir os Questypes permanentemente por causa da relação de chave estrangeira que tem com a tabela Ques. Então, acabei de definir a coluna ativo = false e esses Questypes, em seguida, não aparecem na minha grade quando está vinculado.
O que eu quero fazer é ser capaz de excluir qualquer o Questype Permamnely. Agora ele só pode ser excluído se não estiver sendo usado em nenhum lugar da tabela de perguntas, certo?
Então, para excluir qualquer missão permanentemente, pensei que era isso que eu poderia fazer:-
Na grade que exibe missypes, eu tenho esta caixa de seleção para ativo e um botão para excluir. O que eu pensei que era, quando um usuário faz com que algum evento seja inativo, o evento OncheckChanged () será executado e isso terá o código para excluir todas as perguntas na tabela de perguntas que estão usando esse QuestypeID. Então, na grade do Questype, esse Questype mostraria como desativado e só então um usuário pode excluí -lo permanentemente.
Estou pensando corretamente?
Atualmente no meu procedimento armazenado de deleteQuestype, o que estou fazendo é:-
Definindo o Active = False e Configurando Questye = Alguma string como xxinactivexx
Existe alguma outra maneira?
Edite e se eu quiser implementar apenas dessa maneira, como primeiro o usuário desative o Questype e somente se for desativado que o usuário pode excluí -lo permanentemente. Essa é a lógica correta?
Solução
Eu acho que o que você precisa fazer é colocar o
ON DELETE CASCADE
Cláusula sobre sua restrição de chave estrangeira. Isso excluirá automaticamente linhas da sua tabela de perguntas quando a linha do Questype correspondente for excluída.
Outras dicas
Você pode excluir apenas o QuesTypes
desativado.
Antes de excluir a QuesType
você terá que consultar o banco de dados e ver se QuesType.Active = false
. Se sim, você pode excluir todas as linhas da tabela infantil que fazem referência a que QuesType.Id
(Isso é conhecido como um cascata excluir). Você também pode definir um valor nulo na coluna QuestypeID nas linhas infantis.
Ler este livro online Para aprender sobre a Cascade On Excluir | Defina a cláusula nula. Esta cláusula permitirá que você faça o que quiser.