【问题标题】:Database design - Subclass relation model数据库设计 - 子类关系模型
【发布时间】:2017-07-04 00:31:01
【问题描述】:

我对如何为这个示例 SQL 数据库设计我的表有点困惑。

我有Customer 实体。客户可以拥有许多Pet 实体。每只宠物都必须有自己的MedicalHistory。但是有些宠物是女性,所以他们有一个FemaleMedicalHistory。最后,每个FemaleMedicalHistory 都可以有很多Birth 记录。

所以FemaleMedicalHistory 似乎是MedicalHistory 的子类,包含相同的字段以及指向Birth 表的内容。是这样吗?

您将如何将这些关系建模为表? MedicalHistory & FemaleMedicalHistory 表是否应该共享相同的主键(例如 mid)?

编辑:

这是我的想法,但我不确定它是否适合:

【问题讨论】:

  • 家庭作业?您为什么不向我们展示您当前的解决方法。
  • @BjoernRennhak 不,它是我目前正在尝试开发的项目应用程序的数据库关系。我上传了我的第一个模式尝试,但由于某种原因它似乎不合适。你怎么看?
  • 有人吗?我认为这很简单,我只是错过了一些东西..
  • @LePhleg:“medical_history”本身就是一个非常糟糕的主意,这导致您定义了“medical_history_female”表。最好有一个只有几个字段的表——mid、pid、curdate、treatment_type 和 details——但有很多行。每一行都是每只宠物的治疗记录。

标签: database-design entity-relationship


【解决方案1】:

@LePhleg:“medical_history”本身就是一个非常糟糕的主意,这导致您定义了“medical_history_female”表。最好有一个只有几个字段的表——mid、pid、curdate、treatment_type 和 details——但有很多行。每行将是每只宠物的治疗记录。这种结构消除了对“medical_history_female”和“births”表的需要:出生是一个将存储在(新)病史中的事件。

因此,对于一只动物(假设是一只母狗),medical_history 表中可能有几个事件 - 驱虫、治疗断腿、分娩、分娩、绝育等。

【讨论】:

    【解决方案2】:

    我遵循 KISS 原则,所以我将其设计为 1:many 在 Pet 和 Birth 记录之间 - Birth 表包含有关 Pet 的信息,而不是 Medical History 吗?还有,什么是“出生”?我会为表及其属性使用更有意义的名称 - 恕我直言,尝试将每个字符保存在表/属性名称中已经是 20 世纪了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 2012-08-28
      • 2010-09-13
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      相关资源
      最近更新 更多