Не е лесно да направите това, така че да е добро и правилно, дори когато множество сесии извършват актуализации. Ще се забъркате в каша, ако опитате това с тригери, а декларативните ограничения на Oracle не са достатъчно мощни, за да изразят това.
Може да се направи по следния начин:-
- Създаване на материализиран журнал на изглед както на родителската, така и на дъщерната таблица
- Създайте материализиран изглед за присъединяване, който ги обединява и отчита броя на децата, групирани от родителя. Това трябва да е ОБНОВЯВАНЕ БЪРЗО ПРИ КОМИТ
- Поставете ограничение на изгледа на материализирано свързване, че броят на дъщерните записи трябва да е равен на "n" (константата на вашата база данни)
След това можете да направите поредица от изрази за вмъкване/актуализиране/изтриване. Когато извършите ангажимент, материализираният изглед ще се обнови и ако условието не е изпълнено, в този момент ще получите грешка при нарушение на ограничението.
Допълнителен трик е да включите само редове, които не отговарят на ограничението, в материализирания изглед (HAVING count(ChildId) <> 5), така че да не губите място за съхранение.