没有唯一约束匹配给定表的给定键

时间:2014-11-26 22:23:58

标签: postgresql

我有一个postgresql表:

    CREATE TABLE Appointments(
        DateAndTime timestamp,
        RoomNumber integer,
    PRIMARY KEY(DateAndTime, RoomNumber));

我正在尝试使用引用第一个

的字段创建下表
    CREATE TABLE AttendsAppointment(
        DateAndTime timestamp REFERENCES Appointments(DateAndTime),
        RoomNumber integer REFERENCES Appointments(RoomNumber),
    PRIMARY KEY(DateAndTime, RoomNumber));

这是抛出标题中列出的错误,但我无法弄清楚原因。有人知道吗?

1 个答案:

答案 0 :(得分:4)

正如消息所示:没有与给定密钥匹配的唯一密钥。您想引用约会的DateAndTime,但它不是唯一的。

外键引用另一个表的唯一键(通常是主键)。因此,可能有一个表DateAndTimes保存所有DateAndTime值,而Appointments和AttendsAppointment可以引用该表。

或者AttendsAppointment可以引用约会,但是你会在两个字段上构建一个外键。两个列在表约会中都是唯一的。

CREATE TABLE AttendsAppointment
(
  DateAndTime timestamp,
  RoomNumber integer,
  PRIMARY KEY(DateAndTime, RoomNumber),
  FOREIGN KEY(DateAndTime, RoomNumber) REFERENCES Appointments(DateAndTime, RoomNumber)
);