我已经阅读了一些类似的问题和答案,但我并没有放弃了解这个问题。我目前的一个猜测是,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)
);
答案 0 :(得分: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)
);