Điều này yêu cầu một xác nhận, được định nghĩa trong tiêu chuẩn SQL nhưng không được triển khai trong Oracle. (Mặc dù có động thái để giới thiệu chúng ).
Những gì bạn có thể làm là sử dụng chế độ xem hiện thực hóa để thực thi nó một cách minh bạch.
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
/
Điều kỳ diệu là:
alter table project_manager
add constraint project_manager_limit_ck check
( no_of_projects <= 3 )
/
Ràng buộc kiểm tra này sẽ ngăn chế độ xem cụ thể hóa được làm mới nếu số lượng dự án cho người quản lý vượt quá ba, điều này sẽ khiến cho việc chèn hoặc cập nhật kích hoạt không thành công. Phải thừa nhận rằng nó không thanh lịch.
Vì mview được làm mới khi cam kết (tức là theo giao dịch), nên bạn sẽ cần tạo nhật ký trên project
bảng:
create materialized view log on project