Составной ключ как внешний ключ из другой таблицы с составным ключом в качестве первичного ключа - PullRequest
0 голосов
/ 13 мая 2019

Привет. Я хочу создать базу данных, в которой есть данные об отеле. Проблема в том, что связь с таблицей заказов и таблицей комнат. Я хочу посмотреть, какие номера доступны в данный момент. Я знаю, что что-то не так с отношением на столе "порядок". Могу ли я добавить первичный ключ как составной и в то же время соединить их через составной внешний ключ, который указывает на столовую?

Когда я пытаюсь запустить этот код:

SELECT * FROM room LEFT JOIN order ON (room.hotelname=order.hotelname) AND (room.roomnr=order.roomnr) 

Результат - дубликат таблицы. Спасибо за внимание. Я с нетерпением жду вашего ответа!

CREATE TABLE hotel( 
hotelname varchar(50), 
location varchar(120), 
PRIMARY KEY (hotelname) 
); 

CREATE TABLE roomtype( 
roomtype varchar(50), 
PRIMARY KEY (roomtype) 
); 

CREATE TABLE hotelroomtype( 
hotellname varchar(50), 
roomtype varchar(50), 
NumberOfRoom int, 
PRIMARY KEY (hotelname, roomtype), 
CONSTRAINT FK_hotelname FOREIGN KEY (hotelname) REFERENCES hotel(hotelname), 
CONSTRAINT  FK_roomtype FOREIGN KEY (roomtype) REFERENCES roomtype(roomtype) 
); 

CREATE TABLE room( 
hotelname varchar(50), 
roomtype varchar (50), 
romnr int, 
PRIMARY KEY (hotelname, romnr), 
CONSTRAINT FK_hotelnameroomtype FOREIGN KEY (hotelname,roomtype) REFERENCES hotelroomtype(hotelname,roomtype) 
); 


CREATE TABLE user( 
username varchar(50), 
password varchar (50), 
userrole varchar(50), 
PRIMARY KEY (username) 
); 

CREATE TABLE order( 
hotelname VARCHAR (50), 
roomtype varchar (50), 
roomnr int, 
username varchar(50), 
dateArrival date, 
dateDeparture date, 
PRIMARY KEY (hotelname, roomnr); 
add CONSTRAINT FOREIGN KEY (hotelname,roomnr) REFERENCES room(hotelname ,roomnr); 
add CONSTRAINT FOREIGN KEY (roomtype) REFERENCES roomtype(roomtype); 
add CONSTRAINT FOREIGN KEY (username) REFERENCES user(username); 
);

INSERT INTO hotell values("grand hotel oslo", "oslo"),("hotel klubben tønsberg", "Tønsberg"),("radisson blu gardermoen", "ullensarker"); 

INSERT INTO romtype VALUES ("enkeltrom"),("dobbeltrom"),("familierom"),("suite");

INSERT INTO hotellromtype VALUES ("grand hotel oslo", "enkeltrom", 50), ("grand hotel oslo", "dobbeltrom", 200), ("grand hotel oslo", "suite", 10), ("hotel klubben tønsberg", "enkeltrom", 10), ("hotel klubben tønsberg", "dobbeltrom", 150), ("hotel klubben tønsberg", "familierom",50);

INSERT INTO rom VALUES ("grand hotel oslo", "enkeltrom", 101),("grand hotel oslo", "enkeltrom", 102),("grand hotel oslo", "enkeltrom", 103),("grand hotel oslo", "dobbeltrom", 201),("grand hotel oslo", "dobbeltrom", 202),("grand hotel oslo", "dobbeltrom", 203);

INSERT INTO bruker values ("a", "a","admin" );


INSERT INTO bestilling values ('1','grand hotel oslo','enkeltrom' ,102,'a', '03-08-2019', '08-09-2019');

...