wellcms 数据表为什么没有使用外键

燃烧的冰2020-10-10  88

这是我今天写的第二篇内容了,不想加Q是有原因的,这些基础知识还得靠我普及,有时真的没时间。

 

今天有同学问我,为什么 wellcms 在设计数据表的时候,没有使用 mysql 外键?凡是问这个问题,我要开喷了,你百分百没有遇到过大数据量和高并发的网站,这是个非常确定的肯定句!

 

第一、wellcms 的设计是尽可能少的依赖MYSQL自身的特性;

第二、select、update、delete大数据量的表全部由主键完成;

第三、所有的操作都向上一层反馈数据;

第四、所有MYSQL语句一律封装好再使用,业务层绝对不能使用MYSQL语句;

第五、看这个吧 http://www.wellcms.cn/read-71.html

 

mysql 赋予了开发者很多优势,这是不容置疑的,但是过多依赖它,反而会造成很多问题。

 

数据库设计是否需要外键?

有两点是必须要考虑:

1.如何保证数据库数据的完整性和一致性;

2.对性能的影响。

 

使用外键的好处:

(1) 通过外键由MTSQL自身保证数据一致性、完整性、更可靠,因为程序很难100%保证数据的完整性。而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。尤其的多团队开发时,通过外键约束,可以更好的保持数据的完整性,各方面考虑相对少太多太多;

(2) 有主外键的数据库设计可以增加ER图的可读性;

(3) 外键在一定程度上说明的业务逻辑,会使设计周到具体全面;

 

wellcms 为什么不使用外键?

(1) wellcms 是通过应用程序保持数据完整性,当然也可以使用MYSQL的触发器;

(2) 过分使用外键会增加开发难度;

(3) wellcms尽可能的使用主键操作大数据量的表,数据管理简单,操作方便,性能高(导入导出等操作,在insert/update/delete 时更快)。海量数据下,趁早打消使用外键的念头。当一个程序每天入库数百万条数据时,如果使用外键约束,每次都要去扫描数据是否一致性,一般还不止一个字段有外键,这种扫描的数量是成级数的增长,对于数据库的所有外键的每次插入、更新和删除,MYSQL进行完整性检查是一个耗费时间和资源的过程,对性能影响是非常非常非常非常非常非常非常的大。

 

什么时候使用外键合适,在我看来,性能要求不高,安全要求高,可以使用外键;性能要求高,安全自己控制,不能使用外键;玩玩的小系统请随便造,怎么搞随便你。

转载请注明原文地址: http://www.wellcms.cn/read-148.html