1

我有两张表用户和商店

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

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

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

4

2 回答 2

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)
);
于 2013-10-27T07:48:40.363 回答
2

您应该制作 userid 主键,以便您可以在外键中轻松引用它。为了消除电话和地址的重复,您可以为这些列定义唯一约束或唯一索引。

于 2015-12-14T21:43:00.440 回答