在 Sequelize 中使每个用户 ID 的字段唯一



场景:

用户有3种选择,第一选择,第二选择,第三选择。每个选项都保存在数据库中,其中包含选项编号和用户 ID。

如何进行唯一的验证,以便用户#11不能有两个选择#2。

阅读文档似乎您只能像电子邮件一样放置一列。

这是你想要的吗?

CREATE UNIQUE INDEX idxu_user_choice ON my_table(choice_id, user_id);

SQL 小提琴

PostgreSQL 9.6 Schema Setup

CREATE TABLE t
    ("user_id" int, "choice_id" int, "comment" varchar(8))
;
CREATE UNIQUE INDEX idxu_user_choice ON t(choice_id, user_id);
INSERT INTO t
    ("user_id", "choice_id", "comment")
VALUES
    (1, 1, 'azer'),
    (1, 2, 'zsdsfsdf'),
    (2, 1, 'sdghlk')
;

查询 1

INSERT INTO t ("user_id", "choice_id", "comment")
VALUES (2, 2, 'dfgdfgh')

结果查询 2

select * from t

结果

| user_id | choice_id |  comment |
|---------|-----------|----------|
|       1 |         1 |     azer |
|       1 |         2 | zsdsfsdf |
|       2 |         1 |   sdghlk |
|       2 |         2 |  dfgdfgh |

查询 3

INSERT INTO t ("user_id", "choice_id", "comment")
VALUES (1, 2, 'cvbkll')

结果

ERROR: duplicate key value violates unique constraint "idxu_user_choice" Detail: Key (choice_id, user_id)=(2, 1) already exists.

最新更新