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有一个模式:考虑创建只为每个用户返回最新行的视图。