小编Bra*_*ham的帖子

基于其他行中的值对行值的约束

是否可以有一个包含四列的表:

CREATE TABLE accrual (
    add_date date NOT NULL,
    user_id integer NOT NULL,
    rate integer NOT NULL,
    amount numeric(7,3)
); 
Run Code Online (Sandbox Code Playgroud)

然后对其进行限制,以便如果我已经有一个条目,例如

('2016-04-01', 3, 120, 25.6)
Run Code Online (Sandbox Code Playgroud)

尝试插入具有相同日期和 user_id 但不同速率的另一个条目会失败吗?IE

('2016-04-01', 3, 140, 15)
Run Code Online (Sandbox Code Playgroud)

会失败,但是

('2016-04-02', 3, 140, 15)
Run Code Online (Sandbox Code Playgroud)

或者

('2016-04-01', 4, 140, 15)
Run Code Online (Sandbox Code Playgroud)

或者

('2016-04-01', 3, 120, 15)
Run Code Online (Sandbox Code Playgroud)

会好吗?

需要明确的是,日期和 user_id 基本上就像一个索引,除了重复索引完全没问题,只要费率相同。金额不受限制。

我正在使用 postrgesql 9.5 数据库,并且使用 PHP。我的猜测是,最简单的方法是编写一些 PHP 代码来执行检查。我能找到的最接近的问题是这个:

触发或检查约束根据其他值的存在插入值

但它是关于 Oracle 数据库的,并且略有不同。

感谢您的任何建议!

postgresql exclusion-constraint check-constraints

5
推荐指数
1
解决办法
2600
查看次数