在sql数据上强制执行业务规则的最有效方法

时间:2014-05-17 00:44:09

标签: sql triggers business-logic

所以我有一个Employees表,其中包含字段EmployeeId(GUID),EmployeeNumber(字符串)和IsActive(位)等字段。我希望SQL Server强制执行一条规则,其中任意数量的记录可以具有相同的员工编号,但给定员工编号的一条记录可能会将IsActive位设置为时间。

我正在尝试确定让SQL服务器执行此操作的最有效或最有效的方法,但到目前为止,我只想出使用触发器的想法。考虑到触发器,我想我可能需要使用游标迭代inserted表中的每一行并单独检查每一行。这让我担心表现。

我考虑使用约束,但显然我不能使用UNIQUE约束,因为我只允许两条记录。有没有更好的方法来处理这个而不是触发?

2 个答案:

答案 0 :(得分:1)

一个(不太优雅)的解决方法是使用数字字段{activity_level},因此{EmployeeNumber,activity_level}是唯一的。然后,您应该定义MAX_INTEGER,或0,或MIN_INTEGER或您想要的任何值作为活动标志(具有此值的员工是活动的,所有其他值都不是)。我知道它不是很干净,但是如果你找不到更好的东西它可以做到这一点......

答案 1 :(得分:1)

以下链接说明了如何基于位/布尔字段强制执行条件唯一约束

SQL Server - conditional unique constraint

甲骨文 - Conditional unique constraint in oracle db

PostgreSQL的 - PostgreSQL: Conditional unique constraint

的MySQL - 似乎不可能