Fórum modelar relacionamento sem perder integridade #50773

29/04/2005

0

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:


Mrcdlf

Mrcdlf

Responder

Posts

29/04/2005

Beppe

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)).


Responder

Gostei + 0

29/04/2005

Mrcdlf

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...

:?:


Responder

Gostei + 0

29/04/2005

Gandalf.nho

Não seria possível usar uma trigger para verificar essa integridade? Assim, mesmo com edição direta, a trigger seria disparada.


Responder

Gostei + 0

29/04/2005

Mrcdlf

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!


Responder

Gostei + 0

29/04/2005

Gandalf.nho

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.


Responder

Gostei + 0

29/04/2005

Mrcdlf

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...


Responder

Gostei + 0

30/04/2005

Gandalf.nho

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


Responder

Gostei + 0

30/04/2005

Mrcdlf

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!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar