To, co masz tutaj, to ograniczenie między wierszami - tzn. Nie możesz po prostu umieścić pojedynczego CONSTRAINT
Oracle w kolumnie, ponieważ mogą one jednocześnie przeglądać dane tylko w jednym wierszu.
Oracle obsługuje tylko dwa typy ograniczeń krzyżowych - unikalność (np. klucze podstawowe i ograniczenia unikatowe) oraz integralność referencyjną (klucze obce).
W twoim przypadku będziesz musiał ręcznie zakodować ograniczenie - a wraz z tym odpowiedzialność za zapewnienie, że ograniczenie nie zostanie naruszone w obecności wielu sesji, z których każda nie może zobaczyć danych wstawionych/zaktualizowanych przez inne współbieżne sesje (przynajmniej dopóki się nie zaangażują).
Uproszczone podejście polega na dodaniu wyzwalacza, który wysyła zapytanie w celu zliczenia, ile rekordów jest w konflikcie z nowym rekordem; ale to nie zadziała, ponieważ wyzwalacz nie widzi wierszy, które zostały wstawione/zaktualizowane przez inne sesje, ale jeszcze nie zostały zatwierdzone; więc wyzwalacz czasami pozwala członkom wypożyczyć 6 filmów, o ile (na przykład) mają dwóch kasjerów do wprowadzania danych w osobnych terminalach.
Jeden sposób obejście tego problemu polega na wprowadzeniu do programu jakiegoś elementu serializacji - np. wyzwalacz najpierw zażąda zablokowania rekordu członka (np. za pomocą SELECT FOR UPDATE), zanim będzie mógł sprawdzić wypożyczenia; w ten sposób, jeśli druga sesja spróbuje wstawić wypożyczenia, poczeka, aż pierwsza sesja wykona zatwierdzenie lub wycofanie.
Inny sposób obejście tego problemu jest użycie agregującego widoku zmaterializowanego, który byłby oparty na zapytaniu zaprojektowanym w celu znalezienia dowolnych wierszy, które nie przejdą testu; oczekuje się, że MV będzie pusty i nałożysz ograniczenie tabeli na MV, tak że jeśli wiersz kiedykolwiek pojawi się w MV, ograniczenie zostanie naruszone. Efektem tego jest to, że każda instrukcja, która próbuje wstawić wiersze, które naruszają ograniczenie, spowoduje naruszenie ograniczenia po odświeżeniu MV.
Pisanie zapytania w tym celu na podstawie twojego projektu jest pozostawione jako ćwiczenie dla czytelnika :)