【发布时间】:2020-12-18 08:00:54
【问题描述】:
问题:我想知道我在这里的设计是否可以改进为对我的用例更有效的东西。我相信有更好的选择,我希望在答案中提出。但如果没有,我想知道我的哪个选项最适合以下用例。
我正在为一个医生预约应用程序设计该系列。我有两种选择,但我不知道哪一种最有效,因为我是 NoSQL 的新手。
现在,我需要介绍的用例是:
- 查询特定日期的约会
- 查询医生预约情况
- 查询患者预约情况
我已经收集了患者、医生、MedicalUnit 和时间表。设计如下。我只包括了必要的:
// patient
{
_id: id
name: string
// etc
}
// doctor
{
_id: id
name: string
// etc
}
// medicalUnit
{
_id: id
name: string
// etc
}
// schedule
{
_id: id
date: date
event: {
place: medicalUnit
time: time
duration: int
}
attendingPhysicianId: doctor._id
}
选项 1
我相信这个选项在读取查询方面给了我很好的性能,比如按日期或按病人查询的用例。我也可以通过医生查询,但我需要先通过主治医师ID从日程数据库中获取,然后使用日程表ID。不利的一面是,我认为我可能会将一致性置于风险之中,尤其是当有人更新时间表时(例如更换主治医师)。
{
_id: id,
date: date,
scheduleId: schedule._id
examInfo: {
doctorName: doctor.name
medicalUnitName: medicalUnit.name
}
patientId: patient._id
}
选项 2
这个会有更好的一致性,但是我需要从多个集合中多次读取。例如,按日期查询约会意味着我需要先按日期获取日程,然后使用 scheduleId 从该集合中检索。另外,由于计划集合中的医生信息非常少,因此我还需要获取医生集合。
{
_id: id,
scheduleId: schedule._id
patientId: patient._id
}
医生集合可能很少更新,所以你们中的一些人可能会提出一个用于 inmem 缓存的选项。是的,应该可以,但我想看看是否有可能没有其他附加组件。
【问题讨论】:
-
投反对票:为什么投反对票?我做了我的研究,只在事情陷入困境时才问,至少解释一下你为什么不投票!
标签: mongodb database-design nosql