【问题标题】:Oracle SQL constraint to check data before allowing INSERT在允许 INSERT 之前检查数据的 Oracle SQL 约束
【发布时间】:2020-03-21 17:18:35
【问题描述】:

对 SQL 有点陌生,所以在这里需要一些帮助。 首先,请参考我的表格(BED 表格、WARD 表格、PATIENT 表格)的图片。

我正在使用 Oracle SQL Developer 版本 19.4.0.354 作为学习工具。

================================================ =======================

编辑: 所以我改变了表格如下:

BED(BEDNO, BED_OCCUPIEDDATE, WARDNO, PATIENTNO)

患者(PATIENTNO、名字、姓氏、地址、性别、出生日期、婚姻状况、电话号码、注册日期、等待名单日期、预期住宿、约会、预期离开、约会)

WARD(WARDNO、WARDNAME、LOCATION、NUMBEROFBED、EXTNO)

BedNo 在整个数据库中是唯一的。编号为 1-240。这意味着 WardA 将有 bedno 1-10,WardB 可能有 bedno 11-20 等等。

如果病房有床位,我如何才能允许将患者分配到病房?因为目前,如果您参考我的 ERD,床位不会被“标记”到病房。

【问题讨论】:

  • 请不要发布代码、数据或表格布局的图像。相反,请将它们包含为格式化文本。谢谢。
  • 几天前我在 OTN 上看到了同样的问题....community.oracle.com/thread/4321559
  • 嗨,我也是。但可能这个社区更合适。

标签: sql oracle


【解决方案1】:

稍微改变设计。

首先有病房的桌子。

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 应该存储的床位数量,您不应该具体化一个病房的床位数量。相反,您应该在需要时查询该数字。为方便起见,您还可以使用视图,因此您不需要重复这样的查询。

【讨论】:

  • 好的,是的,我可能会尝试您的建议。但最初,所有床位号码都不是唯一的。意思是说病房A将有1-10号床。病房 B 将有 1-12 床……等等。
猜你喜欢
  • 2014-03-20
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多