Sql 对于特定值,只允许向表中添加3行
我手头有一个问题,我需要限制分配给经理的项目数量仅为3个。各表如下:Sql 对于特定值,只允许向表中添加3行,sql,oracle,insert,sql-insert,Sql,Oracle,Insert,Sql Insert,我手头有一个问题,我需要限制分配给经理的项目数量仅为3个。各表如下: Manager: Manager_employee_id(PK) Manager_Bonus Project: project_number(PK) Project_cost Project_manager_employee_id(FK) 有人能建议采取什么方法来实现这一点吗?我会做以下几点: 创建新列projects\u take(tinyint)(1)(获取1、2或3)的默认值0 当经理接受项目时,该字段将增加1 执行
Manager:
Manager_employee_id(PK)
Manager_Bonus
Project:
project_number(PK)
Project_cost
Project_manager_employee_id(FK)
有人能建议采取什么方法来实现这一点吗?我会做以下几点:
projects\u take
(tinyint
)(1
)(获取1
、2
或3
)的默认值0
1
projects\u take
是否等于或小于3
“如何实现对0,3的限制?” 这需要一个断言,该断言在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 )
/
我会这样做:
一些建议:1。编写一个函数F来检查它,并在插入/更新
project
table时调用F。2.在project
表上使用触发器。您也可以这样做:不必在Manager
和project
表之间放置0,n
关系,您可以将其限制为0,3
@foxcy-这就是如何对约束进行建模的方法。OP询问如何实现这样的约束。我如何实现0,3的限制?这个问题不清楚。你是说正好三个,还是最多三个?请编辑你的问题,不要在评论中澄清。你在最后关卡摔倒了,真是太伤心了。如果我们在添加和填充列时遇到麻烦,为什么不在列上构建一个检查约束来强制执行限制?历史的教训是,依赖应用程序强制执行业务规则不可避免地会导致数据损坏。
create materialized view log on project