时间轴的数据库表示

时间:2016-06-18 09:47:15

标签: mysql sql database

假设我有一个显示两种事件的时间轴:

  1. 一位病人去过一家诊所。这样的事件涉及患者和诊所。
  2. 患者上传了一张照片。这样的事件引用了病人和照片。
  3. 所以我在这里有一些基础表:patientsclinicsphotos
    我还有一些时间表:timeline_visittimeline_photo

    问题是我是否被迫为每个时间轴事件类型使用单独的表格,然后使用UNION来构建完整的时间表,或者还有其他一些我不了解的技术(存储所有内容)一张表中的可能事件)?
    表格timeline_visittimeline_photo包含常见且不同的字段和键,如您所见。

1 个答案:

答案 0 :(得分:3)

我会创建一个名为events的表,其中包含四列:

<强>事件

patient_id int
id int
event_date timestamp
event_type int

每个条目代表一个时间点的一个患者事件。它可以是诊所访问或上传照片。访问和照片会有两个表格:

<强>访问次数

id int
event_id int
doctor_id int
decimal (10, 2) cost
double length_of_visit

<强>上传

id int
event_id int
image_id int
image_content blob

现在,当您想要生成事件的时间轴时,您可以通过查询单个表来完成它:

SELECT *
FROM events
WHERE event_date BETWEEN NOW() AND DATE_SUB(NOW(), INTERVAL 3 HOUR)

上述查询会为您提供过去3小时的时间表。如果您需要有关查询中每个事件的详细信息,那么您可能必须执行一个聪明的UNION查询,因为每个事件的列都不相同。