Hacer esto para que sea sólido y correcto incluso cuando varias sesiones están realizando actualizaciones no es fácil. Te meterás en un lío si intentas esto con disparadores, y las restricciones declarativas de Oracle no son lo suficientemente poderosas para expresar esto.
Se puede hacer de la siguiente manera:-
- Cree un registro de vista materializado en las tablas principal y secundaria
- Cree una vista de unión materializada que los una y cuente el número de hijos agrupados por el padre. Esto debe ser ACTUALIZAR RÁPIDAMENTE EN COMMIT
- Imponga una restricción en la vista de combinación materializada de que el recuento de registros secundarios debe ser igual a "n" (la constante de su base de datos)
Luego puede hacer una serie de declaraciones de inserción/actualización/eliminación. Cuando se comprometa, la vista materializada se actualizará y, si no se cumple la condición, obtendrá un error de infracción de restricción en ese momento.
Un pequeño truco adicional es incluir solo las filas que fallan la restricción en la vista materializada (TENIENDO recuento (Id. de niño) <> 5) para que no desperdicie espacio de almacenamiento.