改善一对多关系中的数据库结构

时间:2018-02-05 09:48:13

标签: mysql sql database database-design

我正在创建一个数据库来跟踪我自己的各种统计数据,我想知道是否有更好的方法来存储单个日期的多个条目。

E.g。从我的表中我有AllergyMedicine可以跟踪同一天采取的多种药物,有更好的方法吗?

表格Food and Allergy似乎没必要,有没有更好的方法来分组表?

任何建议表示赞赏! DB Schema

2 个答案:

答案 0 :(得分:1)

当然,如果您在一天服用多种药物,为什么不在自己的餐桌上隔离那天(=日期)?

所以你会有一个只有日期的表“天”,你要么预先填写(比如日历),要么只填写那些你真正服用该药的日子。

这样,您可以通过将日期“居中”在一个表格中并将其他所有内容与之相关联来节省大量空间。这实际上是一个非常精确的现实模型。

所有你的“FoodSnack”,“FoodMeal”,“AllergyMedicine”等等都会在其中成为简单的N:M映射表。

你甚至可以进一步抽象,减少表并只制作三个表:

  • 症状
  • 引起
  • 治疗

所有这些都与中央“日”表相关(我不会将其称为“日期”,因为这是一个关键字而且容易被误解),并且在适用的情况下相互关联。

答案 1 :(得分:1)

我发现以半结构化的方式陈述问题是有帮助的,如下所示。

The system monitors one or more **persons**.
Each person consumes zero or more **items**. Each consumption has an attribute of date and time. 
Items can be **food**, or **medicines**.
Food can be of the types **snack**, **fruit** or **meal**.
A meal has a **type**.
A person may report **symptoms**. Each report will cover a period of time, and be reported at a specific date/time.
Symptoms may be associated with zero or more **allergies**.

我不相信" date"是您架构中的实体 - 它是发生的事件的属性,例如消耗某些东西,或注意到症状。

如果上述陈述为真,则架构可能是:

  • ID
  • 名称
  • ...

FoodItemType

  • ID
  • 名称

FoodItem

  • ID
  • 名称
  • FoodItemTypeID(FK)

医学

  • ID
  • 名称

FoodConsumption

  • 是PersonID
  • FoodID
  • ConsumptionDateTime

MedicineConsumption

  • 是PersonID
  • MedicineID
  • ConsumptionDateTime

症状

  • ID
  • 名称
  • ....

SymptomObservation

  • 是PersonID
  • SymptomID
  • SymptomStartDateTime
  • SymptomEndDateTime
  • SymptomReportDateTime

过敏

  • ID
  • 名称

AllergySymptom

  • AllergyID
  • SymptomID