mysql - 最好将单个表用于当前和存档记录,还是一个用于存档,一个用于当前?
问题描述
我使用的应用程序之一是 Spring JPA 临床记录应用程序。它有两个表格来跟踪录取情况;“访问”和“录取”。Visits 是一个巨大的表格,其中包含 100,000 名患者的就诊记录。入院是一个“活动”表,仅保存当前入院患者的记录。随着患者出院,他们将从入院表格中删除。这里的想法是用户主要对当前的录取感兴趣,所以我们需要快速的当前录取搜索——因此需要更小的表格。但是,它确实增加了复杂性和开销,而在访问表上可能只是有一个“已接受”标志,并且当前允许的查询可以搜索访问,从而简化应用程序结构并可能提高性能。我在这里理解正常形式,并且跨两个表复制数据有点破坏了它。我只是想知道单个表是否是首选方法,或者当前的设计是否合适?我主要关心的是性能,并且在测试中没有显着差异(从用户的角度来看)。我不相信这个问题有任何公认的“模式” - 但可能有?
解决方案
一行代表什么?大概不是“人”,而是某种行为(访问、入院、出院等)?
访问次数会是录取人数的几倍?
招生仅限于“目前占用床位的人”吗?还是包括以前出院的患者?
为了帮助解决上述问题,请考虑需要执行哪些查询。以及这些查询中需要哪些数据。
教科书将坚持使用一种“适当”的数据库布局形式。我倾向于实用主义。以下是一些将我推向单独表格的因素:
- 例如,
visits
中的行数比 中的行数大得多admissions
。 - 两个表中都没有显示大量的列。
- 许多查询只需要查看一张表,而不需要查看另一张表。(
UNION ALL
可以在您需要两者的数据时使用。) - “公共”数据可以从两者中归一化。(例如:关于 ' 的非医院信息
person
。注意:address
等会随着时间而改变。) - 需要不同的索引来优化不同的查询。
- 也许“入场”是“访问”的超集?也就是说,每个表中可能有一行用于单个事件。(cf
JOIN
或者也许LEFT JOIN
。)
没有正确的答案。比赛中甚至可能没有明确的赢家。以一种方式实施它,但真诚的意图是在几个月内重新审视这个问题。
您提到较小的表更快 - 这取决于。正确索引,表大小对速度的影响很小。当没有可行的索引时,大小很重要。所以... 考虑一下SELECTs
现在,甚至在您设计表格之前。当然这是工作量的两倍,但它很有用——用于学习、练习和帮助做出决定。
推荐阅读
- python - 使用python将2个文本文件合并为一个文件
- php - 在 Wordpress Ajax 请求中出现 400 错误请求错误
- android - How to use retrofit to transfer parameters in parameters?
- influxdb - 用于以某种格式提取数据的 Influx Query
- model - 如何在firestore中对递归数据进行建模?
- android - android 中 Gson 和 Room 的 ID 问题(将 json 发送到客户端)
- javascript - Vue v-for 不直接更新
- css - CSS输入类型=“文件”隐藏但仅适用于1类?
- python - Python:运行 wget 命令会导致它忽略 URL 中的哈希值
- angular - Angular 9 SSR 刷新/重新加载