Запрос таблицы резервирования - PullRequest
0 голосов
/ 12 мая 2019

когда я выполняю запрос к таблице бронирования, я получаю сообщение об ошибке.

Любая помощь?

Это мой запрос к таблице бронирования

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 ]

2 голосов
/ 12 мая 2019

Согласно вашему комментарию, первичный ключ на 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);
)
0 голосов
/ 12 мая 2019

Столбец 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...