gpt4 book ai didi

MySQL 性能设计 - 许多表和数据库或一个数据库中的 2 个大表

转载 作者:行者123 更新时间:2023-11-30 23:31:26 24 4
gpt4 key购买 nike

我意识到此类问题之前已被问过多次,但由于有太多不同的答案,我想找出最适合我的情况的答案。

我正在为心理学家设计在线期刊。我计划在主数据库中有一个表来存储所有用户(心理学家)信息,然后我不确定如何处理用户想要输入的患者数据(注释)。我应该:

  1. 在同一个数据库中有 1 个表,用于存储所有用户患者及其注释。
  2. 为每个用户准备一个单独的表格,并在该表格上显示他们的所有患者。
  3. 为每个用户创建一个单独的数据库,并为该数据库中的每个患者创建一个表。

就数据大小而言,我假设大约有 1000 名用户,每个用户有 300-400 名患者,每个患者平均有 100 个笔记(这是几段数据,每个笔记是整个咨询 session 的内容)。

我在 SO DB design: one large DB for all customers or many small DBs 上看到了这个问题我只是不确定它是否也适用于我的情况。我还看到了各种关于使用带分区的 InnoDB 的引用资料,也许可以将所有患者和注释放在一张表上。如果推荐这个,您是否也可以包括一些资源或教程,因为我在这方面找到的信息有限而且对我来说有点太复杂了。

最佳答案

对于这样一个相对较小的数据集,您不需要 InnoDB 分区之类的东西。我建议使用四个 InnoDB 表:

1) psychologists: id (auto-increment, primary key), name, address, ...
2) patients: id (auto-increment, primary key), name, address ...
3) psych-patients: id (auto-increment, primary key), psychologist-id (foreign key reference to `psyschologists`.`id`, patient-id (foreign key reference to `patients`.`id), with a unique constraint spanning the columns `psychologist-i` and `patient-id`
4) notes: patient-id, psychologist-id, date, text

这使您可以干净利落地分离数据。需要第三张表,以便患者可以更换医生;如果您在表 patients 中包含 psychologist-id,则必须为此创建一个新记录。 (您将无法简单地更新 ID,因为指向先前笔记的链接将会丢失。)

当然,您正在处理医疗数据,因此您需要尽一切努力确保这些私有(private)笔记的安全。然而,这是您应该在应用程序层而不是数据库层处理的事情。为每个心理学家使用不同的数据库似乎是一个更安全的解决方案,但它可能并非如此,而且您的软件很难让患者在记笔记时更换心理学家。

关于MySQL 性能设计 - 许多表和数据库或一个数据库中的 2 个大表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com