[英]Oracle SQL constraint to check data before allowing INSERT
对 SQL 有点陌生,所以在这里需要一些帮助。 首先,请参考我的桌子(BED 桌子、WARD 桌子、PATIENT 桌子)的图片。
我使用Oracle SQL Developer 版本 19.4.0.354作为学习工具。
================================================== ====================
编辑:所以我改变了表格如下:
床位(床位号、床位_占用日期、病房号、患者号)
患者(PATIENTNO,FIRSTNAME,LASTNAME,地址,性别,DATEOFBIRTH,MARITALSTATUS,PHONENO,REGISTEREDDATE,WAITINGLISTDATE,EXPECTEDSTAY,DATEWARDED,EXPECTEDLEAVE,DATELEFT)
病房(病房,病房名称,位置,床位数,EXTNO)
BedNo 在整个数据库中是唯一的。 编号为 1-240。 这意味着 WardA 将有 Bedno 1-10,WardB 可能有 Bedno 11-20 等等。
仅当病房有可用床位时,我如何才能允许将患者分配到病房? 因为目前,如果您参考我的 ERD,床位不会“标记”到病房。
稍微改变一下设计。
首先是病房的桌子。
CREATE TABLE ward
(wardno ...,
...
PRIMARY KEY (wardno)
...);
然后在床位表中引用使用这张床的病房而不是占用它的患者。
CREATE TABLE bed
(bedno ...,
wardno ...,
...
PRIMARY KEY (bedno),
FOREIGN KEY (wardno)
REFERENCES ward
(wardno),
...);
在患者表中,参考了患者占用的床位。 无法引用非现有床位,没有床位,患者就无法获得病房。 通过声明推荐床位的唯一性,同一床位最多只能有一名患者。 如果您不希望任何没有床的患者,您也可以声明床位引用NOT NULL
。
CREATE TABLE patient
(patientno ...,
...
bedno ... NOT NULL,
PRIMARY KEY (patientno),
FOREIGN KEY (bedno)
REFERENCES bed
(bedno),
UNIQUE (bedno),
...);
顺便说一句,如果这是ward.numberofbed
应该存储的床位,您不应该具体化病房的床位数量。 相反,您应该在需要时查询该数字。 为方便起见,您还可以使用视图,因此您无需重复此类查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.