Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Modelando o relacionamento um-para-constante


Não é fácil fazer isso para que seja sólido e correto, mesmo quando várias sessões estão fazendo atualizações. Você ficará em uma confusão se tentar isso com gatilhos, e as restrições declarativas do Oracle não são poderosas o suficiente para expressar isso.

Pode ser feito da seguinte forma:-
  1. Crie um registro de visualização materializado nas tabelas pai e filha
  2. Crie uma visualização de junção materializada que os una e conte o número de filhos agrupados pelo pai. Isso deve ser REFRESH FAST ON COMMIT
  3. Coloque uma restrição na visualização de junção materializada de que a contagem de registros filho deve ser igual a "n" (sua constante de banco de dados)

Você pode então fazer uma série de instruções insert/update/delete. Quando você confirmar, a visualização materializada será atualizada e, se a condição não for atendida, você receberá um erro de violação de restrição nesse ponto.

Um truque de bônus é incluir apenas as linhas que falham na restrição na visualização materializada (HAVING count(ChildId) <> 5) para que você não desperdice nenhum espaço de armazenamento.