Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 仅当其中一个为true时,才向多个列添加约束_Sql_Postgresql_Constraints - Fatal编程技术网

Sql 仅当其中一个为true时,才向多个列添加约束

Sql 仅当其中一个为true时,才向多个列添加约束,sql,postgresql,constraints,Sql,Postgresql,Constraints,我有这张桌子 CREATE TABLE user ( user_id BIGINT NOT NULL, modified_date DATE NOT NULL, is_relevant BOOLEAN NOT NULL, more columns... ); 我有一个用户表,我保存用户的历史记录。当更新用户的数据时,我插入一个新行,带有修改的日期,具有相同的user\u id,但与is\u相关true。只有最后一次更新的版本在上为true,并且与相关。因此,每次

我有这张桌子

CREATE TABLE user (
    user_id BIGINT NOT NULL,
    modified_date DATE NOT NULL,
    is_relevant BOOLEAN NOT NULL,
    more columns...
);

我有一个用户表,我保存用户的历史记录。当更新用户的数据时,我插入一个新行,带有修改的日期,具有相同的
user\u id
,但与
is\u相关
true。只有最后一次更新的版本在
上为true,并且与
相关。因此,每次用户进行更新时,我都会将prev行更新为false,并用true插入新行

我想为
用户id
相关的
上的唯一键添加一个约束,前提是
相关的
为true。我希望避免出现两行用户id相同的情况,并且在
中为true与
相关


有人知道怎么做吗?

您需要一个部分唯一索引,例如:

create unique index on "user" (user_id) where is_relevant;

阅读

中的部分索引您需要一个部分唯一索引,例如:

create unique index on "user" (user_id) where is_relevant;

阅读

中的部分索引“我插入一个具有修改日期的新行,该行具有相同的用户id,但与is_相关true。只有最后一个更新的行与is_相关。因此,每次用户进行更新时,我都会将上一行更新为false,并插入具有true的新行。”-这不是设计数据库的方法-如果您需要该模型,那么您应该使用时态表,这是大多数符合ISO SQL的RDMB所支持的。PostgreSQL有一个模式:考虑创建一个只为每个用户返回最新行的视图。“我用一个新的行插入一个新的行,用相同的用户ID,但是用ISO相关的真。只有最后一个更新的与ISHO相关的是真的。所以每个用户都有更新,我将PREV行更新为false,并用TRUE插入新行。”-这不是设计数据库的方法-如果您需要该模型,那么您应该使用时态表,这是大多数符合ISO SQL的RDMB所支持的。PostgreSQL有一个模式:考虑创建只为每个用户返回最新行的视图。