繁体   English   中英

在允许 INSERT 之前检查数据的 Oracle SQL 约束

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM