【问题标题】:Oracle SQL Developer - How to add constraints to er diagramOracle SQL Developer - 如何向 er 图中添加约束
【发布时间】:2019-05-07 05:46:58
【问题描述】:

我需要使用 oracle SQL 开发人员创建一个 ER 图,我已经创建了它,但是我正在努力添加约束,有人对如何执行此操作有任何建议吗?

我正在开发一个医院数据模型。谢谢

【问题讨论】:

  • 您在寻找PK/FK 或任何类型吗?或auto generate 基于现有结构?
  • 我是 SQL 和开发模型的新手,但我已经设置了我的 pk,而且我很确定它们是正确的,我对 fk 以及任何其他类型的我可以添加的约束。
  • 主键/外键;换句话说,什么值(或多个值)唯一地定义了 PK 表中的记录,并且当将该值链接到另一个表时,PK 成为辅助表的 FK。所以想想上面有线条的发票。 Invoice # 使用 Invoice # 与 Invoice Detail 相关联,但 Invoice Detail 也有一个 Line # 以使其在该表中唯一。因此,虽然 Invoice# 和 LINE# 在 Invoice Detail 中是 PK,但 Invoice # 在 Invoice Table 中是 PK,它也是 Invoice Detail 中的 FK。
  • 谢谢你,这样更清楚了!我添加了我的图表的图像,您觉得这对吗?
  • 所以患者记录是一次“就诊”,因此您每次都会重复患者姓名 dob 性别,或者您是否有独立于就诊的患者?对我来说,患者可以多次就诊每次不同的投诉/疾病,每次访问可能超过 1 个。因此,在患者访问和投诉之间应该有一个表格,因此如果存在多个,则处理它。对于每个表格/实体,您需要询问这与另一个有什么关系实体。如果它可能是多对多,那么您需要一个关联表。我不确定您是如何提出表结构的。/

标签: oracle database-design oracle-sqldeveloper erd


【解决方案1】:

所以重新考虑你的实体从“你有什么物理对象以及这些对象能做什么”的角度来思考它

首先将它们全部识别出来,然后将相似的组合起来。

例如,工作人员、医生、全科医生和患者都是“人”,只是分享类似的信息。人只是不同的“类型”,所以将它们组合起来!

每个病房都有员工,所以你有 People、Ward 和 WardStaff 每个人都可以有地址信息。 一个人可以进入病房 一个入院的人,可以接受多个医生的治疗,同时患有多种疾病

请记住,如果您必须在多个地方更新信息以保持准确,则需要合并。

考虑实体之间的基数:病房是否必须分配护士?护士总是在病房里吗?一个病房可以有零个、一个或多个护士吗? 一个病人可以有零一种或多种疾病吗? 一个医生可以有零个或多个病人吗? 博士仅限于病房吗? 博士也有专长吗? (他们可以有多个吗?)

这是我读完之后看到的实体:

  • 病房
  • 病房类型
  • 病房职员
  • 准入
  • 人员类型
  • 地址
  • PatentAdmittanceAilments
  • 疾病类型
  • 治疗类型

然后这就是我如何看待它们的关系。重新阅读 4 页,看看这是否正确。问什么是错的,问什么是缺失的。是不是太多了?

病房

  • WardID (int) PK
  • 名称(varchar(10))
  • WardTypeID (int)

病房人员

  • WardID (int) PK
  • StaffID (Varchar(6)) PK(唯一约束)作为护士只能在 1 个病房工作
  • LeadEffective Date 显示护士成为病房主管的时间
  • LeadNurseID (varchar(6)) FK 到 PersonID

入场

  • AdmittanceID (int) PK
  • 患者 ID (VARCHAR(6))
  • WardID (Int) FK 到 Ward
  • AdmittanceDate(日期)
  • 出院日期(日期)

  • PersonID (varchar(6)) PK
  • PersonTypeID(整数)
  • 名称 (varchar(30))
  • 出生日期(日期)
  • GPID (6,0)
  • AddressID (int) FK 到地址

地址

  • AddressID (Int) PK
  • 地址# (varchar(10))
  • 建筑物名称 (varchar(30))
  • 单位# (varchar(10))
  • 城市 (Varchar(50))
  • 街道 (varchar(50))
  • 状态 (varchar(02))
  • 国家 (varchar(10))
  • 邮政编码 (varchar(10))

PatientAdmittanceAilments

  • AdmittanceID (Int) PK_1of3
  • DrID (varchar(06)) FK to Person
  • AilmentID (int) FK 到 Ailment PK2of3 不需要创建触发器来
  • 确保符合要求的 ID
  • AilmentAdditional(varchar(40)) 不与 DTS/DTE 重叠
  • TreatmentID (int) FK to Treatment
  • TreatmentAdditional(varchar(40))
  • DTS(日期)PK3of3
  • DTE(日期)

人物类型

  • PersonTypeID (Int) PK
  • 描述 (Varchar(30))(示例:工作人员、患者、医生、全科医生)

病房类型

  • WardTypeID (int) PK
  • 说明 (varchar(20))(例如:骨科、老年科...)

疾病类型

  • AilmentTypeID (int) PK
  • 说明 (varchar(40))

治疗

  • TreatmentTypeID (int) PK
  • 说明 (varchar(40))

【讨论】:

  • 非常感谢您经历这些!我现在正在经历它
  • 我可以问一下如何突出显示约束吗?
  • 文档之间的线条是 PK/FK 约束...虚线与实线定义可选与强制关系,乌鸦脚表示 1 到多个。所以他们在这方面被“强调”了。我不确定你的意思。
猜你喜欢
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 2014-05-11
  • 2016-06-21
  • 2011-09-28
  • 1970-01-01
相关资源
最近更新 更多