我目前正在从事一个保健项目,而我对DB不太熟悉。由于DB是该项目的基础,所以我仍在努力工作。
这是我的问题。根据我的经验,设置外键FK是数据库设计的良好实践。然而,在部署了OpenEMR (一个开放源代码的病人概要系统)之后,我看到创建了几十个表,而其中没有一个表具有FK,甚至从patient_data到patient_profile都没有。
有什么原因吗?
提前谢谢。
发布于 2016-01-08 09:50:18
数据库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)。
因此,这只是与开始时的发动机选择有关。
发布于 2016-01-08 09:57:14
我们没有在其中一个系统中使用外键的一个原因是,我们从一个有点不可靠的源系统中导入数据。源系统负责维护系统的完整性。
但有时却失败了。通常情况下,这对我们的系统来说并不是灾难性的,所以我们仍然可以导入数据。通常情况下,我们导入的文件是无序约束的,因此我们可能首先得到病人日记记录,几分钟后得到病人自己。
把这两点加起来,我们就知道了:
因此,只要继续使用受约束破坏的数据库(=不添加外键)运行我们的系统就没有什么坏处了,如果由于某种原因失败了,那么我们就不能修复完整性。
人们可能会问,为什么源系统不能只修复其约束问题,这将是一个完全有效的问题。不过,这个问题是经济社会的,不是技术性的,不适合堆叠溢出。
https://stackoverflow.com/questions/34673701
复制相似问题