我意识到此类问题之前已被问过好几次,但由于我想找出哪些答案过多,我想找出最符合我情况的答案。
我正在为心理学家设计一份在线期刊。我计划在主DB中有一个表来存储所有用户(心理学家)信息,然后我不确定如何处理用户想要输入的患者数据(注释)。我应该:
就数据大小而言,我假设每位患者约有1000名总用户,每名患者有300-400名患者,平均有100名说明(这是几段数据,每条说明是整个咨询会议的内容)。
我在SO DB design: one large DB for all customers or many small DBs上看到了这个问题,我不确定它是否也适用于我的情况。我还看到了使用带有分区的InnoDB的各种参考,或许在一张桌子上拥有所有患者和笔记。如果这是推荐的,你还可以包括一些来源或教程,因为我发现的信息有限,对我来说有点过于复杂。
答案 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,因为前面注释的链接将丢失。)
当然,您正在处理医疗数据,因此您需要尽一切努力保证这些私人笔记的安全。但是,您应该在应用程序层而不是数据库层中处理这些问题。为每个心理学家使用不同的数据库似乎是一个更安全的解决方案,但它可能不是,而且它使您的软件难以让患者在用笔记记录时让心理学家转换。