您可以將外鍵添加到患者表中,如下所示。道歉這個查詢是在MYSQL中。我注意到你需要Oracle。然而,邏輯是類似的:)語法需要改變。
Create table ward(
Wno varchar(15) Not null Primary Key,
Name varchar(20) Not Null,
Number_of_beds integer Not Null
);
而對於患者的表:
Create table patient(
Pid varchar(15) Primary Key,
Name varchar(20) Not Null,
Address varchar(50) Not Null,
Date_of_birth date Not Null,
WardNo varchar(15),
foreign key (wardno) references ward (wno) ' -- adds the foreign key relation
);
爲了檢查是否病房已滿,你可以有一個insert
或update trigger
免費牀位數可以通過下面的查詢來獲得:
SELECT p.wardno, (w.number_of_beds - count(pid)) as freebeds
from patient as p
left join ward as w
on p.wardno = w.wno
group by wardno
現在我們創建一個觸發器來檢查是否有任何pa tient是進入病房whre freebed數= 0
更新到Oracle版本
CREATE OR REPLACE TRIGGER FreeBedsWardTrigger
BEFORE UPDATE OR INSERT
ON patient
FOR EACH ROW
DECLARE
max_beds INTEGER; -- max number of beds for the ward
used_beds INTEGER; -- used beds for the ward
BEGIN
SELECT COUNT (pid)
INTO used_beds
FROM patient
WHERE wardno = :NEW.wardno;
SELECT number_of_beds
INTO max_beds
FROM ward
WHERE wno = :NEW.wardno;
IF (max_beds - used_beds) > 0
THEN
RETURN;
ELSE
RAISE_APPLICATION_ERROR (-100100,
'No more beds available in this ward.');
END IF;
END;
那是什麼「學生」在患者臺上在幹什麼? :P你可以在病人身上加入Wno,這樣兩個實體之間就可以有更好的關係。 – bonCodigo
對不起,這是一個錯字,意思是如果病人被分配了:P –
@CraigTraynor:你的oracle版本是什麼? –