数据库该不该用外键

数据库该不该用外键,第1张

明确说,不该用。

1. 外键属于业务需求

2. 在数据量稍微大点的数据库极大影响性能。

3. 影响业务扩展,并且业务本身能够代替处理一致性关联。

即便业务端忘记处理关联信息的删除,也不影响最终查询结果。比如user和user_info表, user删除了,user_info忘记删除。正常关联user_info表, 左连user结果正常。仅仅增加冗余数据而已。相比检索写入性能的指数级降低,业务处理更好。况且,现在也不会真的删除一条记录,仅仅一个标记。忘记标记某给表,影响不大。

保证数据的参照完整性外键的作用很重要,最好在数据库中使用。举一个例子比较明白。比如有两张表格,一个是学生档案,另一个是上学期间的成绩单档案中会有:学号,姓名。(学号为主键)成绩单有(简化过的):学期号,学号,平均分数(学期号,学号两个同时为主键,学号同时为外键)为了保证成绩单上的数据有效,所以要求录入学号时,必需保证档案中有这个学号,否则就不能录入。从而保证了成绩单上的成绩数据的引用完整,否则将会是垃圾数据。用程序控制,有很多缺点;录入成绩单时为了保证学号有效,首先要搜索档案,当档案很大时会影响效率。程序控制并不能保证百分之百引用完整性,尤其是并发 *** 作。说一个特例(主要是说明程序控制不好):A录入成绩单,B在编辑档案。当A录入张三的成绩,保存时,搜索张三存在,于是程序下一步就要存盘,但这时B恰好把张三删除了。但A那边的程序并不知道,于是就把一条垃圾数据存进数据库中了。此例的 *** 作流程正确与否不重要,但说明了程序控制并不是好方法。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9905548.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存