Robienie tego tak, aby było prawidłowe i prawidłowe, nawet gdy wiele sesji wykonuje aktualizacje, nie jest łatwe. Wpakujesz się w bałagan, jeśli spróbujesz tego z wyzwalaczami, a deklaratywne ograniczenia Oracle nie są wystarczająco silne, aby to wyrazić.
Można to zrobić w następujący sposób:-
- Utwórz dziennik widoku zmaterializowanego zarówno w tabeli nadrzędnej, jak i podrzędnej
- Utwórz widok złączenia zmaterializowanego, który łączy je ze sobą i zlicza liczbę dzieci pogrupowanych według rodzica. To musi być SZYBKIE ODŚWIEŻANIE PO ZAKOŃCZENIU
- Nałóż ograniczenie na widok zmaterializowanego łączenia, że liczba rekordów podrzędnych musi być równa „n” (stała Twojej bazy danych)
Następnie możesz wykonać serię instrukcji wstawiania/aktualizowania/usuwania. Po zatwierdzeniu widok zmaterializowany zostanie odświeżony, a jeśli warunek nie zostanie spełniony, w tym momencie pojawi się błąd naruszenia ograniczenia.
Dodatkowym trikiem jest uwzględnienie w zmaterializowanym widoku tylko wierszy, które nie spełniają ograniczenia (HAVING count(ChildId) <> 5), aby nie marnować miejsca.