2017-08-03 66 views
1

我已閱讀了一些類似的問題和答案,並且我不會退出以瞭解問題。我目前的猜測之一是Potgres可能不允許外鍵輸入非主鍵。錯誤:沒有與參考表「用戶」的給定鍵相匹配的唯一約束條件

用戶:

用戶註冊,每行1個用戶,每行(串行),唯一的電子郵件(主鍵)

user_logins 1個ID:

有關用戶登錄的信息,引用了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) 
); 

回答

1

user_id必須有unique限制在users表中。否則,它會有含糊之處。

在此查詢中,我加入UNIQUE約束在user_id

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) 
); 
+0

我認爲串行已經是獨一無二的,謝謝。 –

+1

@ RobertC.Holland Serial並不保證它具有獨特的價值。你可以隨時手動設置任何數字。 – Yana

相關問題