问题引入
以前的意识里都是需要建立外键,外键能起到约束作用,能保证数据的完整性和一直性,比如如果没有外键约束,你自己程序控制又不到位把基本信息都删除了,详情却存在,人的基本信息不存在了,工资信息里却存在这个人,想要找这个人究竟是谁都找不到。
今天看到原来的外键都被去掉了,问了下组长,结果回答就两个字“效率”,虽然感觉很诧异,但是毕竟人家比我有经验并没有去争论,下面将站在两个对立面去赞成和反对建立外键。
建与不建
注意这里说的建与不建不是说不要外键,尽可能把表弄成一张表,而是说人为控制还是数据库使用本身外键约束。
建
利用数据库保证数据库完整性和一致性;自己用程序控制怕有疏忽,外键多起来麻烦;同一个数据库可能给不同应用用,但是开发数据库的人并不是开发应用的人,开发应用的人对数据库不够了解,就算开发数据库的人去开发应用时间长也会忘记;
不建
导数据入库要有先后顺序,而且也会检查外键是否存在,十分消耗时间;删除数据也是;还有就是可能数据建立的约束可能效率不够高,想自己建立高效的约束。
总结
我自己觉得完整性和一致性肯定是需要保证的,不然会出问题,也会影响效率,需要看你项目又多大。
小型项目就使用数据库本身的,效率追求不高,也没必要花时间自己建立约束,时间代价比较大。
较大型项目可能数据约束本身效率不够好,满足不了大项目对效率的要求,又有人力物力去支持建立自己的高效约束。
还有较大项目初期,想早点上线,效率要求没有那么大,没时间去建立高效率约束,那么就用数据库本身的约束,项目初期要求稳定一些比较好。