
1. 外键属于业务需求
2. 在数据量稍微大点的数据库极大影响性能。
3. 影响业务扩展,并且业务本身能够代替处理一致性关联。
即便业务端忘记处理关联信息的删除,也不影响最终查询结果。比如user和user_info表, user删除了,user_info忘记删除。正常关联user_info表, 左连user结果正常。仅仅增加冗余数据而已。相比检索写入性能的指数级降低,业务处理更好。况且,现在也不会真的删除一条记录,仅仅一个标记。忘记标记某给表,影响不大。
保证数据的参照完整性外键的作用很重要,最好在数据库中使用。举一个例子比较明白。比如有两张表格,一个是学生档案,另一个是上学期间的成绩单档案中会有:学号,姓名。(学号为主键)成绩单有(简化过的):学期号,学号,平均分数(学期号,学号两个同时为主键,学号同时为外键)为了保证成绩单上的数据有效,所以要求录入学号时,必需保证档案中有这个学号,否则就不能录入。从而保证了成绩单上的成绩数据的引用完整,否则将会是垃圾数据。用程序控制,有很多缺点;录入成绩单时为了保证学号有效,首先要搜索档案,当档案很大时会影响效率。程序控制并不能保证百分之百引用完整性,尤其是并发 *** 作。说一个特例(主要是说明程序控制不好):A录入成绩单,B在编辑档案。当A录入张三的成绩,保存时,搜索张三存在,于是程序下一步就要存盘,但这时B恰好把张三删除了。但A那边的程序并不知道,于是就把一条垃圾数据存进数据库中了。此例的 *** 作流程正确与否不重要,但说明了程序控制并不是好方法。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)