我有两张桌子用户&存储
用户表主键是地址和组合的组合。电话号码(用户通过网页注册,我不希望同一个用户注册两次),userId列是串行但不是主键
在Stores表中,ownerID的列是来自users表的userID - 但由于它不是主键,因此无法设置引用(尽管它是串行的)
我怎样才能达到这个效果?
答案 0 :(得分:2)
参考栏不一定是主键。
外键可以引用主键或唯一约束的列。
这可以通过这种方式完成:
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)
);
答案 1 :(得分:2)
您应该创建userid主键,以便在外键中轻松引用它。为了消除电话和地址的重复,您可以为这些列定义唯一约束或唯一索引。