modelar relacionamento sem perder integridade
Pessoal estou com o seguinte problema:
- Tenho os pedidos e esses pedidos geram ordem de serviço(OS)
- Uma OS pode ter varios pedidos, mais não pode existir OS sem pedido
- Um pedido pode ficar sem OS até que seja tirada
como ficariam as tabelas para manter o relacionamento e a integridade do banco???
ajudem po favor!!! :oops:
- Tenho os pedidos e esses pedidos geram ordem de serviço(OS)
- Uma OS pode ter varios pedidos, mais não pode existir OS sem pedido
- Um pedido pode ficar sem OS até que seja tirada
como ficariam as tabelas para manter o relacionamento e a integridade do banco???
ajudem po favor!!! :oops:
Mrcdlf
Curtidas 0
Respostas
Beppe
29/04/2005
A chave estrangeira OrdemID em Pedido pode ser null. Não haverá chaves apontando para Pedido.ID na tabela OrdemDeServiço. O dodói é que não pode haver checagem de integridade logo que uma OS for adicionada, quando obviamente não terá pedidos para ela. A checagem será check(exists(select 1 from Pedido P, OrdemDeServiço OS where P.OrdemID = OS.ID)).
GOSTEI 0
Mrcdlf
29/04/2005
A chave estrangeira OrdemID em Pedido pode ser null. Não haverá chaves apontando para Pedido.ID na tabela OrdemDeServiço. O dodói é que não pode haver checagem de integridade logo que uma OS for adicionada, quando obviamente não terá pedidos para ela. A checagem será check(exists(select 1 from Pedido P, OrdemDeServiço OS where P.OrdemID = OS.ID)).
bem na verdade eu já estava trabalhando assim... mais eu vi que meu banco não estava seguro ne seguinte sentido:
- Se alguem for manipular o banco via sql e não conhece-lo direito vai poder apagar um pedido e se tiver uma OS com ele, ela vai continuar existindo! :shock: enquanto na verdade deveria ser ao contrario, uma OS poderia ser apagada e não o pedido, até que a OS não existisse mais...
:?:
GOSTEI 0
Gandalf.nho
29/04/2005
Não seria possível usar uma trigger para verificar essa integridade? Assim, mesmo com edição direta, a trigger seria disparada.
GOSTEI 0
Mrcdlf
29/04/2005
Não seria possível usar uma trigger para verificar essa integridade? Assim, mesmo com edição direta, a trigger seria disparada.
vc poderia me dar um exemplo?
eu nunca fiz uma trigger para verificar a integridade e não sei direito como seria... se puder dar um exemplo vai clarear bastante!!!
obrigado!
GOSTEI 0
Gandalf.nho
29/04/2005
Tb nunca fiz uma trigger para isso, mas não deve ser difícil.
Crie uma trigger BEFORE DELETE para a tabela de Pedidos. Essa trigger vai verificar a existência de uma OS vinculada ao pedido, se houver ela irá gerar uma exceção, impedindo a exclusão.
Crie uma trigger BEFORE DELETE para a tabela de Pedidos. Essa trigger vai verificar a existência de uma OS vinculada ao pedido, se houver ela irá gerar uma exceção, impedindo a exclusão.
GOSTEI 0
Mrcdlf
29/04/2005
Tb nunca fiz uma trigger para isso, mas não deve ser difícil.
Crie uma trigger BEFORE DELETE para a tabela de Pedidos. Essa trigger vai verificar a existência de uma OS vinculada ao pedido, se houver ela irá gerar uma exceção, impedindo a exclusão.
ok mais como posso gerar essa exceção???
desculpa mais eu não sei como faz mesmo...
GOSTEI 0
Gandalf.nho
29/04/2005
Vc tem que criar uma exceção com o comando CREATE EXCEPTION e depois na sua trigger teste a existência da OS, se existir chame a exceção com EXCEPTION nome_exceção
GOSTEI 0
Mrcdlf
29/04/2005
Vc tem que criar uma exceção com o comando CREATE EXCEPTION e depois na sua trigger teste a existência da OS, se existir chame a exceção com EXCEPTION nome_exceção
eu fiz uns testes aqui e funcionou legal, acho q vai resolver o problema sim...
valeu pela força!
GOSTEI 0