当我编写SQLSever表达式时,这是我的问题:
引用表'Room'中没有主键或候选键 与外键'FK_ Booking _RoomNo__4E298478'中的引用列列表匹配。
我的程序的一些快照:
CREATE TABLE Booking(
HotelNo NVARCHAR(4) not null,
GuestNo SMALLINT,
DateFrom DATETIME not null,
DateTo DATETIME,
RoomNo SMALLINT not null,
PRIMARY KEY (HotelNo,DateFrom,RoomNo),
FOREIGN KEY (HotelNo) REFERENCES Hotel(HotelNo),
FOREIGN KEY (GuestNo) REFERENCES Guest(GuestNo),
FOREIGN KEY (RoomNo) REFERENCES Room(RoomNo)); <---trouble on this line
CREATE TABLE Room(
RoomNo SMALLINT not null,
HotelNo NVARCHAR(4) not null,
RoomType NVARCHAR(25),
Price DECIMAL(5,2),
PRIMARY KEY (RoomNo,HotelNo),
CONSTRAINT fk_Room FOREIGN KEY (HotelNo) REFERENCES Hotel(HotelNo));
这是酒店表
CREATE TABLE Hotel(
HotelNo NVARCHAR(4) not null,
HotelName NVARCHAR(25),
City NVARCHAR(25),
PRIMARY KEY (HotelNo) );
我试图对这个问题进行一些搜索,并且它说这可能是在表Room中没有定义主键时引起的,但是如上所述,它已被定义。
有人可以帮我解决这个问题吗?
提前谢谢。
答案 0 :(得分:3)
对复合键的任何引用也必须包含两列。
FOREIGN KEY (RoomNo, HotelNo) REFERENCES Room(RoomNo, HotelNo))