是否可以有一个包含四列的表:
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 数据库的,并且略有不同。
感谢您的任何建议!