`

关于数据库的外键

 
阅读更多

一般情况下,去掉外键的原因都是想要提高性能,但是在哪里提高性能呢?如果说每一次操作外键都会帮我们检查约束,那么

我们自己维护数据完整性的话不是也要么?

1、当批量插入的时候,每一次数据库都会去检测外键的约束,而我们代码可能只需要检测一次。

试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不止一个字段有外键,这样扫描的数量是成级数的增长!我的一个程序入库在3个小时做完,如果加上外键,需要28个小时!

2、 当系统庞大的时候,如果让代码来维护外键,软件方面的效率,可以通过加几台服务器来处理,使得效率提高,而数据库如果只有1份的话,那么数据库承受的压力必然很大。


=========================================================================

下面的内容是转自:http://apps.hi.baidu.com/share/detail/15593176


对于主/外键/索引来说,在一些开发团队中被认为是处理数据库关系的利器,也被某些开发团队认为是处理某些具体业务的魔鬼,您的观点呢?在实际应用中您会采取哪种方式?


大家共同观点:

主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作,

矛盾焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是第一条对性能的影响。


正方观点:

1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。

eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用也许是不同的开发团队来做的。他们如何协调保证数据的完整性,而且一年以后如果又增加了C应用呢? 

2,有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。

3,外键在一定程度上说明的业务逻辑,会使设计周到具体全面。


反方观点:

1,可以用触发器或应用程序保证数据的完整性

2,过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题

3,不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert,   update,   delete   数据的时候更快)

eg:在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不止一个字段有外键,这样扫描的数量是成级数的增长!我的一个程序入库在3个小时做完,如果加上外键,需要28个小时!  


结论:

1,在大型系统中(性能要求不高,安全要求高),使用外键;在大型系统中(性能要求高,安全自己控制),不用外键;小系统随便,最好用外键。

2,用外键要适当,不能过分追求

3,不用外键而用程序控制数据一致性和完整性时,应该写一层来保证,然后个个应用通过这个层来访问数据库。





 

分享到:
评论

相关推荐

    数据库外键约束方式

    数据库外键约束方式 外键约束是数据库中实现参照完整性的重要手段,它能够确保数据的一致性和正确性。外键约束方式有多种,包括级联、置空和禁止三种方式。 级联(Cascade)方式是指当主表中的记录被删除或更新时...

    数据库外键约束的作用与实现

    外键约束是数据库中维护数据完整性和一致性的重要工具。通过合理使用外键约束,可以有效...本文详细介绍了外键约束的作用、实现方法和性能优化策略,并提供了代码示例,希望能帮助读者更好地理解和应用数据库外键约束。

    如何处理数据库中的外键

    以下是一些关于如何处理数据库中外键的重要知识点: 1. **外键定义**:外键(Foreign Key)是一个字段或一组字段,其值参照另一个表(主表)中的主键值。它建立了一个表与另一个表之间的引用关系,确保数据的准确性...

    java获取数据库主外键

    **数据库元数据**是指关于数据的数据,即用来描述数据本身的信息。对于数据库来说,元数据包括数据库名、表名、列名、列类型、约束(如主键、外键)等信息。通过JDBC API可以方便地获取这些元数据。 #### 三、编写...

    数据库主外键详解

    数据库外键(Foreign Key)是表中的一个字段,它用于引用另一个表中的主键,用于建立表之间的关系。外键的目的是为了维护数据的一致性和完整性,避免数据中的不一致和错误。 创建外键约束时,需要指定引用哪个表的...

    在标准的三层架构中用GridViwe显示数据库外键的数据

    外键是数据库设计中的一个重要概念,用于维护表之间的关系,通常用于实现一对多或多对多的关系。在ASP.NET中,我们可以通过以下步骤实现: 1. **创建数据模型**:根据数据库结构,创建对应的实体类,包括外键字段。...

    达梦数据库查询所有表的主外键.sql

    达梦数据库

    数据库新手入门之MySQL中如何定义外键

    数据库新手入门之MySQL中如何定义外键 本文介绍了在MySQL数据库中定义数据表、设置索引、定义外键、级联等操作。下面将详细说明标题和描述中所说的知识点。 首先,文章中提到了创建数据表的过程,例如创建parts表...

    数据库外键,用还是不用?

     对于主/外键/索引来说,在一些开发团队中被认为是处理数据库关系的利器,也被某些开发团队认为是处理某些具体业务的魔鬼,您的观点呢?在实际应用中您会采取哪种方式?  大家共同观点:  主键和索引是不可...

    数据库主键和外键设计的原则.doc

    数据库主键和外键设计的原则

    mysql数据库设置外键应该注意的几点

    以上就是在设置MySQL数据库外键时需要注意的关键点。理解并正确应用这些知识点,能够帮助我们构建出高效、稳定且具有良好数据完整性的数据库系统。在实际操作中,应结合具体业务场景进行灵活调整和优化。

    根据hibernate配置文件生成数据库.zip

    这是一个链接,很可能指向一个关于数据库外键约束的重要资源。在ORM中,外键约束用于保持数据的一致性和完整性。通过在Hibernate映射文件中定义外键,可以确保对象间的关联在数据库层面得以体现。外键约束在多表...

    数据库外键的设置与使用

    数据库外键是数据库管理系统中一个重要的概念,它用于在关系数据库中维护数据的完整性和一致性。外键的主要作用是建立并约束两个表之间的关联,确保数据间的引用完整性。当一个表(主键表)的某一列是另一表(外键表...

    关于数据库主键和外键 终于弄懂啦.doc

    关于数据库主键和外键 终于弄懂啦

    关于关系型数据库基本知识(主键、外键、一对一、一对多、多对一等).docx

    关系型数据库是现代数据存储和管理的核心,它采用关系模型,将数据组织成二维表格的形式。关系模型由关系、元组、属性、域和关键字等基本概念构成。关系即为表格,元组代表表格中的一行,属性表示一列,域指属性的...

    删除数据库的所有表、存储过程、主键、外键、索引等

    这个过程通常涉及删除数据库中的所有表、存储过程、主键、外键以及索引等对象。下面我们将详细探讨这些概念及其在数据库中的作用,以及如何安全有效地执行删除操作。 首先,让我们逐一了解这些数据库元素: 1. 表...

    如何在MySQL数据库中定义外键

    ### 如何在MySQL数据库中定义外键 #### 定义数据表 假设某电脑生产商的数据库中包含了整机产品信息和配件供货信息。为了更好地管理这些信息,我们需要创建两个数据表:`pc` 表用于存储整机产品信息,而 `parts` 表...

    数据库删除所有外键脚本.sql

    Mysql数据库如何删除某一个数据库的所有外键并不删除相应的索引,一个sql脚本解决,无需知道外键的名称。

Global site tag (gtag.js) - Google Analytics