Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

murilo dark

Deletando registros

Recommended Posts

Pessoal estou com a seguinte dúvida em um delete.

possuo tres tabelas:

 

nota

lancamento

nota_lancamento

 

para cada registro criado em nota_lancamento ele recebe o id da nota e o id do lancamento

ou seja nota_lancamento e filha de nota e ao mesmo tempo filha de lancamento.

 

aplicando um delete cascade em nota_lancamento na fk nota, ao deletar a nota ele deleta nota_lancamento, porém gostaria, que se propagasse para o lancamento mesmo ele sendo pai de nota_lancamento, ou seja, deletar nota, deletaria nota_lacamento e lancamento mas, mantendo a estrutura acima.

 

Resumindo: Seria um delete cascade ao contrario, deletar o filho deletaria o pai.

 

Alguém poderia me ajudar?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que falta a regra de delete cascade em lançamento, e a regra de delete cascade de item deve estar ligada a lancamento e não nota.

 

Só não entendo o seguinte, deletar um item de nota não significa deletar a nota em sim.

 

É uma hierarquia

 

Nota

__lancamento

_____item

 

2 cascades, sempre apontando para a pk da tabela acima.

 

Ajudei?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

A questão não é o item da nota

Mas a relacao com os lancamentos,

Exp melhor:

 

Basicamente os lancamentos são contas a receber, estas contas a receber podem ser geradas a partir de uma nota, a partir de uma restituição, ou até mesmo sem depender de outras entidade, ser gerado diretamente.

 

O que quero é que ao gerar um lancamento a partir de uma nota seja criado na entidade nota_lancamento um registro constando que aquela nota gerou um determindo lancamento, isso é feito com o id da nota e o id do lancamento.

 

quando eu quiser identificar os lancamentos de uma determinada nota eu consulto a tabela nota_lacamento, quando eu quiser consultar uma nota que gerou um lancamento tambem consulto na tabela nota_lancamento.

 

Mas nem sempre uma nota gera um lancamento e nem sempre um lancamento gera uma nota mas, se uma nota gerar um lancamento outomaticamente será criado um registro na tabela nota_lancamento com ambos os ids.

 

Agora quando eu deletar uma nota inserindo um delete cascade em nota_lacamento, será deletado o registro mas, não será deletado o lacamento na tabela lacamento correspondente ao id do lancamento constante na tabela nota_lancamento que esta sendo deletada por 'cascade'.

 

O que gostaria é que ao deletar uma nota além de deletar todos os seus registros em nota_lancamento também delatasse os lancamentos correspondentes em cada registro de nota_lancamento.

 

Posso fazer isso com uma trigger ou até mesmo no código mas, se existir uma outra alternativa uatilizando integridade que é o caso das constraints preferiria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, creio que não, não me ocorre ao menos.

A solução poderia ser por trigger (minha 1ª ideia).

 

Mas a solução poderia estar no processo, criar a ON DELETE como restrict e obrigar a deleção de

lançamento>>item nesta ordem.

 

Inverter a dependência ? Lancamento passa a depender de item ?!

 

Mas, numa primeira analise, trigger me parece o melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tome cuidado pois a trigger vai deletar um registro que dispara o ON CASCADE da própria tabela.

 

 

 

nota_lancamento
    V
    V
    lancamento >> nota_lancamento

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu vou ter que remover o delete cascade pq a trigger não é acionada com cascade,

quando deletar a nota será deletado nota_lancamento mas, a trigger não aciona para deletar o lancamento,

neste caso terei que remover o delete cascade de nota_lancamento e utilizar uma trigger em nota e outra em nota_lancamento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.