【问题标题】:Make field unique per user Id in Sequelize?在 Sequelize 中使每个用户 ID 的字段唯一?
【发布时间】:2018-03-04 07:00:23
【问题描述】:

场景:

用户有 3 个选择,第 1 选择,第 2 选择,第 3 选择。每个选项都保存在数据库中,带有选项编号和用户 ID。

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

阅读文档,您似乎只能放入一列,例如电子邮件。

【问题讨论】:

    标签: sql database postgresql sequelize.js unique-constraint


    【解决方案1】:

    这是你想要的吗?

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

    SQL Fiddle

    PostgreSQL 9.6 架构设置

    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')
    

    Results查询 2

    select * from t
    

    Results

    | 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')
    

    Results

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

    【讨论】:

    • 不确定,结果如何。用户#和选择#是否是唯一的,所以可以有 b 用户#2 + 选择#1 和用户#3 + 选择#1.. 但不是用户#2 + 选择#1 和用户#2 + 选择#1
    猜你喜欢
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2017-02-09
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多