创建一个引用非主键列的表

时间:2013-10-27 06:02:05

标签: sql postgresql foreign-key-relationship

我有两张桌子用户&存储

用户表主键是地址和组合的组合。电话号码(用户通过网页注册,我不希望同一个用户注册两次),userId列是串行但不是主键

在Stores表中,ownerID的列是来自users表的userID - 但由于它不是主键,因此无法设置引用(尽管它是串行的)

我怎样才能达到这个效果?

2 个答案:

答案 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主键,以便在外键中轻松引用它。为了消除电话和地址的重复,您可以为这些列定义唯一约束或唯一索引。