Integridade Referencial com Firebird
Bom dia! Estou com uma pequena dúvida sobre sobra a integridade dos dados no Firebird. O problema é simples: Tenho uma tabela de cadastro de clientes e uma de vendas, para manter a integridade quando eu apagasse um cliente; qual seria a melhor forma?
- Usando um campo do tipo "ATIVO", e não excluindo realmente o cadastro apenas marcando este campo para inativo.
- Impedindo a exclusão usando uma consulta SQL para sabe impedir registro que um registro Pai fosse apagado quando e possuir registros Filhos (Achei meio POG essa)
-Usando uma trigger, para fazer esta verificação se há registro Filhos anexados ao Pai (Essa última eu dei uma olhada como poderia ser implementada, mas não entendi muito bem)
Se alguém poder me dar uma dica, qual seria uma implementação mais correta a ser aplicada?
Obrigado
- Usando um campo do tipo "ATIVO", e não excluindo realmente o cadastro apenas marcando este campo para inativo.
- Impedindo a exclusão usando uma consulta SQL para sabe impedir registro que um registro Pai fosse apagado quando e possuir registros Filhos (Achei meio POG essa)
-Usando uma trigger, para fazer esta verificação se há registro Filhos anexados ao Pai (Essa última eu dei uma olhada como poderia ser implementada, mas não entendi muito bem)
Se alguém poder me dar uma dica, qual seria uma implementação mais correta a ser aplicada?
Obrigado
Walter Desidera
Curtidas 0
Respostas
Wilson Junior
09/06/2010
Lhe aconselho a utilizar o campo "Ativo" para possibilitar a não usabilidade deste cliente e até para um histórico (saber para quem foi a venda).
E, se a tabela de Vendas possui uma FK para a tabela de Clientes, não será possível apagar o cliente se ele possuir alguma venda, para este caso, sugiro tratar erro retornado pelo banco de dados.
Se você utilizar o componente TClientDataSet, o mesmo já possui um evento para tratar os erros retornados do banco de dados "OnReconcileError".
Espero ter colaborado.
E, se a tabela de Vendas possui uma FK para a tabela de Clientes, não será possível apagar o cliente se ele possuir alguma venda, para este caso, sugiro tratar erro retornado pelo banco de dados.
Se você utilizar o componente TClientDataSet, o mesmo já possui um evento para tratar os erros retornados do banco de dados "OnReconcileError".
Espero ter colaborado.
GOSTEI 0
Walter Desidera
09/06/2010
Fiz alguns testes aqui e essa foi realmente a solução mais correta a ser implementada. Assim posso manter um histórico para poder ser consultado sempre que necessário. Isso foi de grande ajuda. Muito Obrigado Wilson. Abraços
GOSTEI 0