Re: [oracle_br] Validação de master/detail pelo Oracle

2007-07-25 Por tôpico Vitor Hugo Campos
Em 25/07/07, Josinei Barbosa da Silva [EMAIL PROTECTED] escreveu:
 Boa tarde a todos?

  Tenho uma tabela de nota fiscal e outra de itens da nota. Como manda
  os bons costumes de modelagem, a minha tabela de itens tem um foreign
  key para a tabela de nota fiscal. Eu não posso permitir que uma nota
  fiscal exista sem itens. Como faço isso?
  Meu primeiro impulso foi pensar em uma trigger, mas os itens são
  incluídos depois da nota, logo não consigo executar um SELECT na
  tabela de itens durante a inclusão de uma nota.

  Como eu poderia resolver isso pelo banco de dados?

  Desde já, obrigado.

Há um link explicando isso no site do AskTom:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:42170695313022

No seu caso, você poderia criar um campo VALTOTALITENS para isso...
além de resolver seu problema, você não precisa fazer um join para
fazer consultas relativas ao total dos itens das notas!! :D

-- 
Vitor Hugo Campos
Desenvolvedor/DBA Oracle 10g

E-mail/MSN: [EMAIL PROTECTED]
Telefones: (27) 2121-5531 / 8819-2643
skype:vitorh.campos


Re: [oracle_br] Validação de master/detail pelo Oracle

2007-07-25 Por tôpico Vitor Hugo Campos
Em 25/07/07, Vitor Hugo Campos[EMAIL PROTECTED] escreveu:
 Em 25/07/07, Josinei Barbosa da Silva [EMAIL PROTECTED] escreveu:
  Boa tarde a todos?
 
   Tenho uma tabela de nota fiscal e outra de itens da nota. Como manda
   os bons costumes de modelagem, a minha tabela de itens tem um foreign
   key para a tabela de nota fiscal. Eu não posso permitir que uma nota
   fiscal exista sem itens. Como faço isso?
   Meu primeiro impulso foi pensar em uma trigger, mas os itens são
   incluídos depois da nota, logo não consigo executar um SELECT na
   tabela de itens durante a inclusão de uma nota.
 
   Como eu poderia resolver isso pelo banco de dados?
 
   Desde já, obrigado.

 Há um link explicando isso no site do AskTom:
 http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:42170695313022

 No seu caso, você poderia criar um campo VALTOTALITENS para isso...
 além de resolver seu problema, você não precisa fazer um join para
 fazer consultas relativas ao total dos itens das notas!! :D
Só explicando melhor o que o artigo sugere: em vez de você fazer uma
constraint normal (já que ao inserir a constraint já seria violada
porque seu valor é zero), colocando a constraint como DEFERRED, a
constraint só é verificada na hora do COMMIT, e como a gravação da
nota é atômica (espero eu... :P), na hora em que a constraint for
verificada (ou seja, no COMMIT), o valor já vai ter sido incrementado
pela trigger dos itens.

Essa técnica também é útil para o caso de, por algum motivo, você
precisar mudar o valor de um campo chave de uma tabela que tenha uma
FK relacionada, mas isso também permite algumas bizarrices do tipo
poder inserir em uma tabela filha antes de inserir na tabela mãe,
enlouquecendo qualquer trigger que dependa que a filha exista antes da
mãe...

-- 
Vitor Hugo Campos
Desenvolvedor/DBA Oracle 10g

E-mail/MSN: [EMAIL PROTECTED]
Telefones: (27) 2121-5531 / 8819-2643
skype:vitorh.campos