2

这是我编写 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 中没有定义主键导致的,但如上所述,它已定义。

有人可以帮我解决这个问题吗?

先感谢您。

4

1 回答 1

3

Any reference to composite key must also include both columns.

FOREIGN KEY (RoomNo, HotelNo) REFERENCES Room(RoomNo, HotelNo))
于 2012-10-26T22:34:21.410 回答