我希望确保列的值可能仅以一种定义的方式更改。例如,包含状态值的列只能根据定义的状态转换进行更改),或者列可以从NULL设置为仅一次。
我想避免在应用层上实现这些检查。
我无法找到使用常规约束的解决方案。是否有另一种方法来实现这一点,或者这样的约束在数据库层上是不受支持的?
发布于 2014-07-30 13:51:30
约束只能根据行的当前值强制执行规则(检查约束)
您希望在前一状态和当前状态之间强制执行约束。这通常是用trigger实现的。
示例:
这里有很多例子。Try a search.
发布于 2020-10-21 18:52:13
我编写了一个python脚本,它根据所需的限制生成一个检查约束。这些约束强制为每个状态设置空列。
例如,当我有"Orders“表,而一个订单可以有”已付款“或”未支付“的状态时,让我们假设有一个类型为text的列"Invoice_number”。如果要将任何订单更新为“付费”状态,则check约束将不允许这样做,除非您将"Invoice_number“从NULL设置为非空值。
简单的检查如下所示:
ALTER TABLE orders ADD CONSTRAINT orders_state_paid_check CHECK ( CASE WHEN state = 'paid' AND (invoice_number is null) THEN false ELSE true END);您可以在这里查看该工具:gen
现在,它正在与postgres > 9.4一起工作。
https://stackoverflow.com/questions/25038478
复制相似问题