Wymaga to potwierdzenia, które jest zdefiniowane w standardzie SQL, ale nie jest zaimplementowane w Oracle. (Chociaż istnieją ruchy, które należy wprowadzić ).
To, co możesz zrobić, to użyć zmaterializowanego widoku, aby w przejrzysty sposób go egzekwować.
create materialized view project_manager
refresh on commit
as
select Project_manager_employee_id
, count(*) as no_of_projects
from project
group by Project_manager_employee_id
/
Magia to:
alter table project_manager
add constraint project_manager_limit_ck check
( no_of_projects <= 3 )
/
To ograniczenie sprawdzania zapobiegnie odświeżeniu zmaterializowanego widoku, jeśli liczba projektów dla menedżera przekroczy trzy, co spowoduje niepowodzenie wyzwalania wstawiania lub aktualizacji. Trzeba przyznać, że nie jest elegancki.
Ponieważ mview jest odświeżany przy zatwierdzeniu (tj. transakcyjnie), będziesz musiał zbudować log w project
tabela:
create materialized view log on project