我手头有一个问题,我需要将分配给经理的项目数量限制在3个。表格是:
{{1}}
有人可以建议采取什么方法来实现这个目标吗?
答案 0 :(得分:3)
“我如何将限制实施到0,3?”
这需要一个断言,它在SQL标准中定义但在Oracle中没有实现。 (虽然有moves to have them introduced)。
您可以使用物化视图来透明地执行它。
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 )
/
如果管理器的项目计数超过3,则此检查约束将阻止实例化视图刷新,该故障将导致触发插入或更新失败。不可否认,这并不优雅。
因为mview在提交时刷新(即事务性地),所以你需要在project
表上构建一个日志:
create materialized view log on project
答案 1 :(得分:0)
我会做以下事情:
projects_taken
(tinyint
)(1
)(取值1
,2
或3
) 0
。 1
projects_taken
是否等于或小于3
。答案 2 :(得分:0)
我会做以下事情: