Dazu ist eine Assertion erforderlich, die im SQL-Standard definiert, aber in Oracle nicht implementiert ist. (Obwohl es Bemühungen gibt, sie einzuführen ).
Was Sie tun können, ist eine materialisierte Ansicht zu verwenden, um sie transparent durchzusetzen.
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
/
Die Magie ist:
alter table project_manager
add constraint project_manager_limit_ck check
( no_of_projects <= 3 )
/
Diese Prüfungseinschränkung verhindert, dass die materialisierte Ansicht aktualisiert wird, wenn die Anzahl der Projekte für einen Manager drei überschreitet, was dazu führt, dass die auslösende Einfügung oder Aktualisierung fehlschlägt. Zugegeben, es ist nicht elegant.
Da die mview beim Festschreiben (d. h. transaktional) aktualisiert wird, müssen Sie ein Protokoll für project
erstellen Tabelle:
create materialized view log on project