To vyžaduje aserci, která je definována ve standardu SQL, ale není implementována v Oracle. (I když existují pohnutky k jejich zavedení ).
Co můžete udělat, je použít materializovaný pohled k jeho transparentnímu vynucení.
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
/
Kouzlo je:
alter table project_manager
add constraint project_manager_limit_ck check
( no_of_projects <= 3 )
/
Toto kontrolní omezení zabrání obnovení materializovaného pohledu, pokud počet projektů pro manažera překročí tři, což způsobí selhání spouštěcího vložení nebo aktualizace. Je pravda, že to není elegantní.
Protože se mview obnovuje při odevzdání (tj. transakční), budete muset vytvořit protokol na project
tabulka:
create materialized view log on project