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
>