为何【用友、金蝶】的erp系统的数据库中,不设表间的关联和约束呢?
为何【用友、金蝶】的erp系统的数据库中,不设表间的关联和约束呢?
看过拥有的财务通系列,和ERP系列(好像是T系列),他们的数据库中,
基本没有用到数据库本身的管理功能,比如表间的关联,外键约束这些“完整性”约束功能,基本从不使用,
触发器也没有,存储过程也不多。
我不理解,为何这么多的数据库管理功能,用友都不用呢?一切的完整性约束,全部通过自己的程序实现。
可以微软是强烈建议使用这些管理功能的,而且自带的实例数据库,都是带有“外键约束”的。
用友不用数据库自带的功能,这是为什么呢?
好像数据库,只用到了存储表的作用,管理作用根本不用。
但是用有的程序本身,肯定要处理复杂的表间关系呀。
为何放着现成的功能不用呀?
这里有什么原因呢?
------解决方案--------------------我只用过用友的库,多人开发的数据库最好不要用外键,本身表就一堆了,再搞些乱七八糟的外键,会头晕死的
外键除了数据完整性好些外,一大堆缺点,性能,维护,开发方面都不太好,影响开发效率,增加开发成本
------解决方案--------------------外键可以数据库服务器宕机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性,有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要,外键在一定程度上说明的业务逻辑,会使设计周到具体全面。但是外键导致表过多,开发难度加大,不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert, update, delete 数据的时候更快)
------解决方案--------------------其实不单这些,大量软件实际上是没有显式的外键关联。就好像不是所有的数据库设计非要达到第三范式一样。没有外键,对程序员的逻辑思维要求比较高,因为往往会完了级联更新等等,但是有外键,又容易造成DML的负担。这些其实没有什么标准,能满足业务需求的设计就可以了
------解决方案--------------------外键没有用,存储过程还是有不少吧.
------解决方案--------------------我工作了4年,去过3家公司,都很申请地没有用外键。
------解决方案--------------------数据库理论是有外键比较好。但外键影响效率,我试过更新一行数据,这个表有个外键,外键关联的表有三百多万数据,结果更新这条数据用了60秒,删除外键后,一秒不到
如果要外键关联的表数据不多,还是搞个外键较好。否则还是不用外键,用户更关注软件的性能
------解决方案--------------------外键就是约束,约束就是规则,规则就是防止你犯错
而当你思维清楚的话,这个就是非必要的东西了
特别是开发的时候,有许多添加修改清空操作,假如加了外键,那么你只能按那个顺序来操作,非常麻烦
再说了,假设你的程序逻辑都是合理验证过的,那么有没有外键不是一样的嘛
外键就是额外的提供给你的验证保护一样,个人认为加在已经成熟的系统上并且不影响效率才好