首 页 行业资讯 新车 试驾评测 养车用车 车型库

数据库中的外键是必须的吗?

发布网友 发布时间:2022-04-25 15:23

我来回答

3个回答

懂视网 时间:2022-04-30 11:45

1.通过外键,数据库自身能够保证数据的完整性与一致性,虽然我们在程序中也能够写些代码来维护,但是程序始终没有办法100%的保证数据的完整性与一致性。而外键本身属于数据库的一部分,所以在数据库服务器出现问题的时候,它也能最大限度的保存数据库的完整性与一致性。

2.有外键的数据库可以使ER图更具有可读性,数据库中表与表之间的关系更加一目了然,这对于系统的二次开发或是维护也是相当有用的。

3.在业务逻辑上,通过外键可以更加直观的理解业务逻辑,在设计功能时起到了辅助作用,让设计更加周到完善。

4.对于一个项目,开发人员总是不断变动的,开发人员的能力也是层次不齐的,那么通过代码来保证数据完整性更是难上加难的事情,有了外键在一定程度上约束了开发人员,能够避免一些低级错误而导致数据的不完整。

 

至于坏处也有以下几点:

1.过分使用外键,会让系统的开发难度增加,同时也导致表过多,增加了系统的复杂度。

2.性能问题,由于外键对数据库有了一定的约束,那么在我们每次进行数据库操作的时候必然要验证这个约束,对于数据量小的系统来说没有任何问题,但是当数据变的很庞大的时候,那么性能上的劣势就很明显了。

 

显而易见,对于外键的应用我们还是要根据具体的问题来分析。用会给我们这个系统带来什么好处,不用会给系统带来什么坏处,哪个更多一些,那我们的选择自然也就明了了。道理其实大家都明白,那我们究竟该怎么分析好与坏,或是怎么看出使用外键的时候是好处多一点还是坏处多一点呢。我认为,当我们开始做一个项目的时候,我们要从以下几个方面来分析该不该上外键约束:

1.项目业务逻辑的复杂度

   业务逻辑其实是一个项目最根本的东西,是项目的一个核型,它就像一条主线,贯穿于项目的始末。所以当业务逻辑非常复杂的时候,那么各个实体之间的关系也是非常“暧昧”的,这里之所以用“暧昧”是因为有的时候实体之间的关系错综复杂,有很多都存在关联。这个时候外键恰恰帮我们理清了他们之间的关系,同时在项目中使用外键更容易保证数据的完整性与一致性。由于关系的复杂,我们已经没有办法使用程序来100%保证数据的完整性与一致性了。相反,如果业务逻辑不复杂,关系很明了,近似于“一夫一妻制”,那么我们在程序里就可以保证完整性与一致性了,当然也没有必要用外键的了。

2.项目计划进行的时间

   程序员的流动性是很大的,也许一个项目开发到一半的时候,整个项目组除了项目经理外程序员都全部换人了,如果文档没有及时跟上,或是交接的时候不明确,那对于项目来说是很危险的。对于那些半路杀进来的程序员,虽然有经验的程序员会在编码的时候思考完整性的问题,但是由于各种原因,他们没有办法100%的通过程序保证数据的完整性与一致性。有经验的尚且如此,所以这个时候外键就为项目的完整性把好了最后一道关卡,无论他们对项目是否熟悉,在完整性与一致性的问题上面,数据库自身已经做好了充分的准备。相反,项目如果周期很短,人员变动也很小,那就可以撇开这个因素,从其他方面考虑是否需要使用外键。

3.安全性与完整性

   这个问题其实最好理解,如果项目对数据有着非常苛刻的安全性、完整性与一致性的要求,那必然要用外键,可能会缺失一部分性能,即使是这样也是值得的,这样从最大程度上满足了项目的需求,这才是关键。

4.性能

  上面第三点已经讨论的性能的问题了。对于大型的系统,如果每天有百万级的数据操作,这个时候如果使用外键,那性能就变成了致命的问题。外键就是一种约束,我们每操作一次insert、update或是delete的时候都要通过这个约束来验证数据是否完整一致。这个时候性能上的缺失可能是几小时甚至是几十个小时。

以上几点是我自己总结出来的,也许更有经验的人还会有其他方面的考虑,总而言之,技术是在不断发展的,每天都会有很多新的技术诞生,在我们了解它们之后更多的是应该去思考它们适用于哪些场合。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yangzhongwei1031/archive/2010/04/07/5459583.aspx

(转)数据库该不该用外键

标签:

热心网友 时间:2022-04-30 08:53

不必须,可以了解一下外键的作用

外键的设计初衷是为了在数据库端保证对逻辑上相关联的表数据在操作上的一致性与完整性。

优点:

热心网友 时间:2022-04-30 10:11

不是必须的
外键就是有利于数据的统一和完整,必对应着一个主键。
我的理解就是
能不用就不要用外键
因为当你做一些增删改的时候
会受到*

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com