【发布时间】:2021-11-15 06:48:00
【问题描述】:
如何使用以下规则编写约束(表级别唯一,使用 GIST 和/或 EXCLUDE )以执行重复记录验证:
- 输入的 from_date 和 to_date 值不应相等或在范围内,并且
- Employee_id 不应该相等,并且
验证后,应返回一条错误消息,说明“重复条目”。 这是在 postgreSQL 中。
注意:我是 postgreSQL 新手(曾在 MS SQL Server 和 MySQL 工作过)。
提前致谢。
【问题讨论】:
-
“不应相等或不在范围内” - 在哪个范围内?
-
这类似于重复检查,输入的 from_date 和 to_date 值不应相等或在 from_date 和 to_date 列的现有值范围内。 employee_id 不应等于现有的 employee_id 值。
-
那个描述不清楚。无论如何,我认为第三个条件(尽管它的含义尚不清楚)将无法通过约束来做到这一点。
-
当输入的 from_date 和 to_date 值相等或在现有 from_date 和 to_date 列值的范围内且输入的employee_id 不应等于现有employee_id 时,条目或记录将被视为重复值 AND 为状态列输入的值不应等于值“待定”。
-
employee_id 的非重叠范围可以很容易地使用排除约束来完成,但正如 Laurenz 已经提到的那样,仅针对
pending事件不能使用排除约束来完成 - 只有过滤的唯一索引。但这反过来又不支持排除约束。所以这三者的结合似乎不太可能。有可能防止具有相同状态的employee_id 的范围重叠(因此没有重叠的待处理,没有重叠的“最终”等)