首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >允许插入前检查数据的Oracle SQL约束

允许插入前检查数据的Oracle SQL约束
EN

Stack Overflow用户
提问于 2020-03-21 17:18:35
回答 1查看 125关注 0票数 0

对SQL有点陌生,所以这里需要一些帮助。首先,请参阅我的桌子图片(床桌、病房桌、病人桌)。

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

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

编辑:因此,我已经更改了表如下:

床(BEDNO,BED_OCCUPIEDDATE,WARDNO,PATIENTNO)

PATIENTS(PATIENTNO,FIRSTNAME、LASTNAME、地址、性别、DATEOFBIRTH、MARITALSTATUS、PHONENO、REGISTEREDDATE、WAITINGLISTDATE、EXPECTEDSTAY、DATEWARDED、EXPECTEDLEAVE、DATELEFT)

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

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

,只有在病房有床位的情况下,我才能允许将病人分配到病房?因为目前,如果您提到我的ERD.,床就不会被“标记”到病房。

EN

回答 1

Stack Overflow用户

发布于 2020-03-21 17:45:38

稍微改变一下设计。

先要病房的桌子。

代码语言:javascript
运行
复制
CREATE TABLE ward
             (wardno ...,
              ...
              PRIMARY KEY (wardno)
              ...);

然后,在床的桌子上,参考使用这张床的病房,而不是占据它的病人。

代码语言:javascript
运行
复制
CREATE TABLE bed
             (bedno ...,
              wardno ...,
              ...
              PRIMARY KEY (bedno),
              FOREIGN KEY (wardno)
                          REFERENCES ward
                                     (wardno),
              ...);

在病人的桌子上参考病人所占的床。一张不存在的床不能被参考,没有床,病人就得不到病房。通过宣布裁判床是唯一的,只有一个病人可以占用同一张床。如果您不希望任何病人没有床,您也可以声明床参考NOT NULL

代码语言:javascript
运行
复制
CREATE TABLE patient
             (patientno ...,
              ...
              bedno ... NOT NULL,
              PRIMARY KEY (patientno),
              FOREIGN KEY (bedno)
                          REFERENCES bed
                                     (bedno),
              UNIQUE (bedno),
              ...);

顺便说一句,如果这是ward.numberofbed应该存储的,那么你不应该把病房里的床位数量计算出来。相反,您应该在需要时查询该数字。为了方便起见,您也可以使用视图,因此不需要重复这样的查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60790895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档