Това изисква твърдение, което е дефинирано в SQL стандарта, но не е внедрено в Oracle. (Въпреки че има ходове за въвеждането им ).
Това, което можете да направите, е да използвате материализиран изглед, за да го наложите прозрачно.
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
/
Магията е:
alter table project_manager
add constraint project_manager_limit_ck check
( no_of_projects <= 3 )
/
Това ограничение за проверка ще попречи на материализирания изглед да бъде обновен, ако броят на проектите за мениджър надвиши три, което неуспех ще доведе до неуспех на задействащото вмъкване или актуализация. Вярно е, че не е елегантно.
Тъй като mview се опреснява при извършване (т.е. транзакционно), ще трябва да изградите лог на project
таблица:
create materialized view log on project