我有一个带有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)
答案 0 :(得分:1)
任何主要的RDBMS不支持多行检查约束(即断言)。
SQL Assertions / Declarative multi-row constraints
您可以改用过滤的/部分UNIQUE
索引:
CREATE UNIQUE INDEX idx ON EMPLOYEE_DETAIL(Employee_id) WHERE ACTIVE = 'Y';
部分索引定义可以包含UNIQUE关键字。如果是这样,则SQLite要求索引中的每个条目都是唯一的。这提供了一种在表中某些行子集上强制唯一性的机制。