2012-05-01 62 views
1

我意识到这种类型的问题以前曾经被问过很多次,但是由于有很多不同的答案,我想知道哪些应用最适合我的情况。MySQL性能设计 - 许多表和数据库或2个大型表格在一个数据库中

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

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

在数据大小方面,我假设每个患者约有1000名患者,每位患者有300-400名患者,平均为100条记录(这是几段数据,每条记录都是整个咨询会议的内容)每名患者。

我在SO DB design: one large DB for all customers or many small DBs上看到这个问题,我只是不确定它是否也适用于我的情况。我还看到了使用InnoDB分区的各种参考资料,可能让所有病人和笔记都放在一张桌子上。如果建议这样做,你还可以包括一些资料或教程,因为我在这方面找到的信息有限,对我来说有点太复杂。

回答

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 

这可以让你干净地分离你的数据。第三张桌是必需的,所以病人可以转换医生;如果在表patients中包含psychologist-id,则必须为此创建新记录。 (您将无法简单地更新ID,因为与之前的笔记的链接会丢失。)

当然,您正在处理医疗数据,所以您需要尽全力保持这些私密性笔记安全。不过,这应该在应用程序层而不是数据库层中处理。为每个心理学家使用不同的数据库可能看起来更安全,但它可能不是,而且它使得软件难以让患者在与他们一起记录笔记的同时切换心理学家。

+0

非常感谢您的好评。如果我只需要问一个简单的跟进问题:你是否真的推荐InnoDB而不是MyISam?或者你只是重复我提到的内容? – trendicoff

+0

我肯定会推荐InnoDB。它支持MyISAM不支持的事务,行级锁定和外键关系。 [本文在MySQL文档中](http://dev.mysql.com/doc/refman/5.5/en/innodb-default-se.html)解释了使用InnoDB的好处,以及为什么它现在成为默认引擎MySQL的。所以是的,如果你可以用InnoDB去:)顺便说一句,如果你能够upvote或者接受我的回答,如果它对你有用的话,我会很感激的:) – Daan

+0

再次感谢你的帮助,对不起,我只能接受没有代表投票了)。 – trendicoff

相关问题