是否需要使用外键
最近在学习flask web开发的时候,发现在讲orm这一块的时候,大佬们都不怎么建议互联网应用使用外键,而且,我发现我现在的公司的c/s架构项目的表结构也没有一个使用外键的,于是很好奇,就查了下相关的知识,并做了个汇总分析:
首先我们的知道,外键的作用以及目的,外键主要作用是通过数据库来保证数据的一致性和完整性,通过外键我就可以少些控制数据完整性和一致性的逻辑了,这么一看的确很不错,作为程序员,能偷的懒,当然的偷了啊,既然这么方便为啥我们公司的项目却没有一个使用外键的呢?
原来,我们公司做的是医院的信息化系统,1、医院定制化需求比较多,经常会在原有的表结构的上做很多修改,而外键限定表之间的主从关系,对数据的维护工作会带来很多错综复杂的问题,对维护实施带来很多不便;2、而且我们表之间的主从关系不是很明确,比如:正常是先有医嘱,再来才是根据医嘱收费,这种情况如果建立外键的化,先有医嘱表,再有费用表,但是实际的业务上,像护士他们是没有医嘱权限的,也就是说他们的计费规则不是按照先医嘱后费用的,所以这个时候如果通过外键限定了主从关系就有问题了。
那么互联网行业又为什么不推荐外键呢?通过搜罗各方面的知识,总结了以下几个原因:
1、互联网用户量大,并发度高,他们的数据部署往往不是一个数据库,而是多个数据库集群部署的,表的数据就不仅仅只在一个数据库里面,这样通过外键实现数据的完整性和一致性,可能就比较复杂了
2、外键会带来一些额外的开销,如果一个表的外键比较多的话,我们在对这个表进行操作会校验其他三张表的数据,如果其他的表数据量也都比较大的时候,就会带来一定的损耗了,对于互联网应用来说这个损耗可能是不能接受的吧
3、作为互联网应用,最大的限制就是数据服务的器的限制了,所以宁愿把负担交给web应用而不是交给数据库服务器吧