我有一个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));
这是抛出标题中列出的错误,但我无法弄清楚原因。有人知道吗?
答案 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)
);