sup*_*r.t 2 mysql sql database
假设我有一个显示两种事件的时间线:
所以我这里有几个基础表:patients, clinics, photos.
我也有一些时间表:timeline_visit, timeline_photo.
问题是我是否被迫为每个时间线事件类型使用单独的表,然后使用它UNION来构建一个完整的时间线,或者还有一些我不知道的其他技术(将所有可能的事件存储在一个表中)?如您所见
,表timeline_visit和timeline_photo具有共同和不同的字段和键。
我会创建一个名为的表events,其中包含四列:
事件
patient_id int
id int
event_date timestamp
event_type int
Run Code Online (Sandbox Code Playgroud)
每个条目将代表一个时间点的一个患者事件。它可以是诊所访问或上传照片。将有两个表用于访问和照片:
访问
id int
event_id int
doctor_id int
decimal (10, 2) cost
double length_of_visit
Run Code Online (Sandbox Code Playgroud)
上传
id int
event_id int
image_id int
image_content blob
Run Code Online (Sandbox Code Playgroud)
现在,当您想要生成事件时间线时,您可以通过查询单个表来完成它:
SELECT *
FROM events
WHERE event_date BETWEEN NOW() AND DATE_SUB(NOW(), INTERVAL 3 HOUR)
Run Code Online (Sandbox Code Playgroud)
上述查询将为您提供过去 3 小时的时间表。如果您想了解查询中每个事件的详细信息,那么您可能必须进行巧妙的UNION查询,因为每个事件的列都不相同。