我有两张表用户和商店
用户表主键是地址和电话号码的组合(用户通过网页注册,我不希望同一个用户注册两次),userId 列是序列但不是主键
在 Stores 表中,ownerID 列是用户表中的 userID - 但由于它不是主键,因此无法设置引用(尽管它是串行的)
我怎样才能达到这个结果?
我有两张表用户和商店
用户表主键是地址和电话号码的组合(用户通过网页注册,我不希望同一个用户注册两次),userId 列是序列但不是主键
在 Stores 表中,ownerID 列是用户表中的 userID - 但由于它不是主键,因此无法设置引用(尽管它是串行的)
我怎样才能达到这个结果?
引用的列不必是主键。
外键可以引用作为主键或唯一约束的列。
这可以通过以下方式完成:
CREATE TABLE Users(
address varchar(100),
phone_number varchar(20),
userid serial,
constraint pk primary key (address, phone_number ),
constraint userid_unq unique (userid)
);
create table Stores(
storeid int primary key,
ownerID integer,
constraint b_fk foreign key (ownerID)
references Users(userid)
);
您应该制作 userid 主键,以便您可以在外键中轻松引用它。为了消除电话和地址的重复,您可以为这些列定义唯一约束或唯一索引。