MySQL表设计的良好实践

时间:2016-01-08 09:37:48

标签: mysql database

我目前正在从事医疗保健项目,而我对数据库不是很熟悉。由于DB是项目的基础,我仍然在努力。

这是我的问题。根据我的经验,设置外键 FK 是数据库设计的好习惯。但是,在部署OpenEMR(一个开源的患者资料系统)后,我看到创建了数十个表,而其中没有一个表具有 FK ,即使从patient_datapatient_profile也是如此。

这有什么原因吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

数据库creation script of OpenEMR正在使用MyISAM作为存储引擎。 MyISAM本身不支持FK(阅读http://dev.mysql.com/tech-resources/articles/mysql-enforcing-foreign-keys.html),但InnoDB支持(http://dev.mysql.com/doc/refman/5.7/en/ansi-diff-foreign-keys.html)。

所以它与刚开始选择sotrage引擎有关。

答案 1 :(得分:0)

我们在其中一个系统中不使用外键的一个原因是我们从一个有些不可靠的源系统导入数据。源系统负责维护完整性。

但它有时会失败。通常以对我们的系统不是灾难性的方式,我们仍然可以导入数据。通常情况下,我们导入的文件是按顺序排列的,因此我们可能会先获取患者日志记录,然后在几分钟后获取患者本身。

加上这两点,我们得到了:

  1. 我们的系统可以在数据库约束失败的大多数情况下工作。
  2. 无论如何,我们对诚信不负责任。
  3. 因此,使用约束受损的数据库(=不添加外键)继续操作我们的系统有一些缺点,如果由于某种原因失败,我们的表不能修复完整性。

    有人可能会问为什么源系统不能只修复其约束问题,这将是一个完全有效的问题。然而,这个问题是经济社会问题,而不是技术问题,不适合Stack Overflow。