【问题标题】:ERROR: there is no unique constraint matching given keys for referenced table "users"错误:没有唯一约束匹配引用表“用户”的给定键
【发布时间】:2017-08-03 02:35:11
【问题描述】:

我已经阅读了一些类似的问题和答案,但我并没有完全理解这个问题。我目前的一个猜测是 Potgres 可能不允许非主键的外键。

用户:

用户注册,每行1个用户,每行1个id(序列),唯一电子邮件(主键)

user_logins:

关于用户登录的信息,从用户中引用 user_id 作为外键,其余列一起构成复合主键


CREATE TABLE users
(
    unique_email    TEXT NOT NULL,
    password        TEXT NOT NULL,
    user_id         SERIAL,
    created_date    TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT LOCALTIMESTAMP,    

    CONSTRAINT emailPK
                    PRIMARY KEY(unique_email)
);


CREATE TABLE user_logins
(
    user_id         SERIAL,
    login_date      TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT LOCALTIMESTAMP,
    login_ip        INET,

    CONSTRAINT user_idFK
                    FOREIGN KEY (user_id)
                    REFERENCES users(user_id)
                    ON DELETE CASCADE
                    ON UPDATE CASCADE,
    CONSTRAINT composit_PK_logins
                    PRIMARY KEY(user_id, login_date, login_ip)
);

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    user_idusers 表中必须有unique 约束。否则,就会产生歧义。

    在这个查询中,我在user_id 中添加了UNIQUE 约束

    CREATE TABLE users
    (
        unique_email    TEXT NOT NULL,
        password        TEXT NOT NULL,
        user_id         SERIAL UNIQUE,
        created_date    TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT LOCALTIMESTAMP,    
    
        CONSTRAINT emailPK
                        PRIMARY KEY(unique_email)
    );
    

    【讨论】:

    • @RobertC.Holland Serial 不保证它具有独特的价值。您可以随时手动设置任何数字。
    猜你喜欢
    • 1970-01-01
    • 2016-08-13
    • 2012-08-11
    • 2021-06-24
    • 2014-12-23
    • 1970-01-01
    相关资源
    最近更新 更多