将值计数限制为每组一个

时间:2019-06-27 20:56:49

标签: sql sql-server-2008

我有一个带有Employee_ID,Position_ID和Active_Status的表。 Employee_ID和Position_ID都是该表中的外键和组合键。一名员工可能担任多个职位,但在任何给定时间都不得拥有多个活跃职位。是否有可以实现此限制的约束条件?

下面的代码显然不正确,但类似

CONSTRAINT chkStatus CHECK ((SELECT COUNT(ACTIVE) FROM EMPLOYEE_DETAIL WHERE ACTIVE = 'Y' GROUP BY EMPLOYEE_ID) = 1)

1 个答案:

答案 0 :(得分:1)

任何主要的RDBMS不支持多行检查约束(即断言)。

SQL Assertions / Declarative multi-row constraints


您可以改用过滤的/部分UNIQUE索引:

CREATE UNIQUE INDEX idx ON EMPLOYEE_DETAIL(Employee_id) WHERE ACTIVE = 'Y';
  

Unique Partial Indexes

     

部分索引定义可以包含UNIQUE关键字。如果是这样,则SQLite要求索引中的每个条目都是唯一的。这提供了一种在表中某些行子集上强制唯一性的机制。