本来我一个小菜鸟,没有什么项目开发经验,关心这个问题也属于纸上谈兵。但自从知道有不用外键,全由程序控制数据完整性的 方法后,我在学校接受的“外键是必须的“思想就承受了一定程度的颠覆。最近又遇上类似的问题,就在网上搜罗了一下,结果百家争鸣,众说纷纭,跟华山论剑似 的,看得一头浆糊。想想算了,以后的工作中再加深体验,权且记下各方观点好了:
正方(这个必须有):
1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据 的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。
eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用也许是不同的开发团队来做的。他们如何协调保证数据的完整性,而且一年以后如果又增加了C应用呢?
2,有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。
3,外键在一定程度上说明的业务逻辑,会使设计周到具体全面
4,软件系统根本不是“开发”-》“发布”两个过程就简单完事了的;而是要经历很长的维护和反复开发测试等阶段。所以外键应该是贯穿始终都要有的。
正方(这个必须有):
1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据 的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。
eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用也许是不同的开发团队来做的。他们如何协调保证数据的完整性,而且一年以后如果又增加了C应用呢?
2,有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。
3,外键在一定程度上说明的业务逻辑,会使设计周到具体全面
4,软件系统根本不是“开发”-》“发布”两个过程就简单完事了的;而是要经历很长的维护和反复开发测试等阶段。所以外键应该是贯穿始终都要有的。
另外一个情况:当用sql语言备份数据库时,到时导入备份插入数据时,若外键表的sql数据在后,
此时插入的时候就会报错;
此时插入的时候就会报错;