MySQL的性能设计 - 一个DB中有许多表和DB或2个大表

时间:2012-05-01 19:55:00

标签: mysql

我意识到此类问题之前已被问过好几次,但由于我想找出哪些答案过多,我想找出最符合我情况的答案。

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

  1. 在同一个数据库中有一个表,用于存储所有用户及其注释。
  2. 为每位用户提供一张单独的表格,并将所有患者放在一起。
  3. 为每个用户设置一个单独的数据库,并为该数据库中的每位患者提供一个表格。
  4. 就数据大小而言,我假设每位患者约有1000名总用户,每名患者有300-400名患者,平均有100名说明(这是几段数据,每条说明是整个咨询会议的内容)。

    我在SO DB design: one large DB for all customers or many small DBs上看到了这个问题,我不确定它是否也适用于我的情况。我还看到了使用带有分区的InnoDB的各种参考,或许在一张桌子上拥有所有患者和笔记。如果这是推荐的,你还可以包括一些来源或教程,因为我发现的信息有限,对我来说有点过于复杂。

1 个答案:

答案 0 :(得分:0)

对于这样一个相对较小的数据集,您不需要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

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

当然,您正在处理医疗数据,因此您需要尽一切努力保证这些私人笔记的安全。但是,您应该在应用程序层而不是数据库层中处理这些问题。为每个心理学家使用不同的数据库似乎是一个更安全的解决方案,但它可能不是,而且它使您的软件难以让患者在用笔记记录时让心理学家转换。

相关问题