1

我意识到这种类型的问题之前已经被问过好几次了,但是由于有很多不同的答案,我想找出最适合我的情况的答案。

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

  1. 在存储所有用户患者及其笔记的同一数据库中有 1 个表。
  2. 为每个用户创建一个单独的表格,并将他们的所有患者放在该表格上。
  3. 为每个用户提供一个单独的数据库,并为该数据库中的每个患者提供一个表格。

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

我在 SO DB 设计上看到了这个问题:一个面向所有客户的大型数据库或许多小型数据库,我只是不确定它是否也适用于我的情况。我还看到了各种关于使用 InnoDB 分区的参考资料,以便将所有患者和笔记放在一张表上。如果建议这样做,您是否还可以包括一些资源或教程,因为我在这方面找到的信息是有限的,而且对我来说有点太复杂了。

4

1 回答 1

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,因为之前笔记的链接会丢失。)

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

于 2012-05-01T20:37:58.030 回答