首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表查找的检查约束

表查找的检查约束
EN

Stack Overflow用户
提问于 2009-09-10 17:48:12
回答 3查看 763关注 0票数 1

我有一个表,部门,有几个位字段来表示部门类型--一种是仓库(如果是,表示部门是仓库)

我还有另一张表,ManagersForWarehouses,它的结构如下:

代码语言:javascript
复制
ID autoinc
WarehouseID int (foreign key reference DepartmentID from departments)
ManagerID int (foreign key reference EmployeeID from employees)
StartDate
EndDate

为了为仓库设置新的管理器,我在这个表中插入了EndDate null,并且我有一个触发器,它为那个仓库的前一条记录设置了EndDate =新经理的StartDate,因此在特定时间出现了一个仓库管理器。

我想添加两个检查约束,如下所示,但不确定如何做到这一点

如果ManagersForWarehouses中有记录,

  1. 不允许插入到ManagersForWarehouses中,如果WarehouseID未标记为仓库
  2. ,则不允许取消对仓库的检查

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-20 21:55:53

在部门表中添加唯一约束( IsWarehouse)

  • In,IsWarehouse='Y'

  • In ManagersForWarehouses表,添加列IsWarehouse,并具有检查约束,强制执行IsWarehouse=‘Y’

  • In ManagersForWarehouses表,在(WarehouseID,IsWarehouse)上添加对部门(DepartmentID,IsWarehouse)的引用,并带有onupdating级联子句.

)。

而且你们都是100%坚如磐石的完整,没有任何漏洞。只有受信任的约束才没有任何漏洞。触发器不太可靠。

票数 1
EN

Stack Overflow用户

发布于 2009-09-10 18:58:25

你应该用触发器来做这件事。每张桌子上一张。确保对多个记录插入、更新或删除进行说明。做任何其他事情都会使你的数据处于危险之中。数据不只是从应用程序进入数据库。除非您需要不正确和无用的数据,否则您无法从应用程序中强制执行这类事情。

票数 0
EN

Stack Overflow用户

发布于 2009-09-10 17:51:18

不要将这种约束放在DB表上。

最好使用代码(业务逻辑)来执行这样的事情。

编辑:与您的问题无关,但您不应该使用触发器来执行对其他行的更新。我没有可靠的联系来支持它。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1406718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档