Valeu Vitor!

--- Em oracle_br@yahoogrupos.com.br, "Vitor Hugo Campos"
<[EMAIL PROTECTED]> escreveu
>
> 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:0::::P11_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
>


Responder a