预订表查询

时间:2019-05-11 21:29:19

标签: sql sql-server

当我执行预订表查询时,出现错误。

有帮助吗?

这是我的预订表查询

CREATE TABLE RESERVATION 
(
    NUMCHAMBRE INT FOREIGN KEY REFERENCES CHAMBRE (NUMCHAMBRE) ,
    NUMHOTEL INT FOREIGN KEY REFERENCES HOTEL (NUMHOTEL),
    NUMCLIENT INT FOREIGN KEY  REFERENCES CLIENT (NUMCLIENT),
    DATEARRIVE DATE,
    DATEDEPART DATE, 

    PRIMARY KEY (NUMHOTEL, NUMCLIENT, DATEARRIVE)
);

这是我得到的错误:

  

消息1776,级别16,状态0,第2行
  在引用表“ CHAMBRE”中没有与外键“ FK__RESERVATI__NUMCH__2BFE89A6”中的引用列列表匹配的主键或候选键。

     

消息1750,级别16,状态0,第2行
  无法创建约束或索引。查看以前的错误。

2 个答案:

答案 0 :(得分:2)

根据您的评论,chambre上的主键是复合键。因此,外键引用需要包括所有列:

CREATE TABLE RESERVATION (
    NUMCHAMBRE int,
    NUMHOTEL int Foreign Key REFERENCES HOTEL (NUMHOTEL),
    NUMCLIENT int Foreign Key  REFERENCES CLIENT (NUMCLIENT),
    DATEARRIVE date,
    DATEDEPART date, 
    foreign key (numhotel, numchambre) references chambre (numhotel, numchambre);
)

答案 1 :(得分:0)

您在表NUMCHAMBRE中引用的列CHAMBRE必须是主键列,即您不能仅引用任何列。

您可以像这样将其声明为主键:

alter table CHAMBRE add primary key (NUMCHAMBRE);

主键列必须为not null,因此,如果NUMCHAMBRE可为空,则上述命令将失败。

更新

根据下面的评论,您的表定义应如下所示,即您需要引用主键的两列:

CREATE TABLE RESERVATION (
NUMCHAMBRE int,
NUMHOTEL int not null Foreign Key REFERENCES HOTEL (NUMHOTEL),
NUMCLIENT int not null Foreign Key  REFERENCES CLIENT (NUMCLIENT),
DATEARRIVE date not null,
DATEDEPART date, 

PRIMARY KEY (NUMHOTEL,NUMCLIENT,DATEARRIVE),
Foreign Key (NUMCHAMBRE,NUMHOTEL) REFERENCES CHAMBRE (NUMCHAMBRE,NUMHOTEL)
);

请注意其他非空约束,因为使用SQL Server在此表上创建主键是必需的。