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:-
- Crie um registro de visualização materializado nas tabelas pai e filha
- 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
- 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.