`

数据库表要不要加外键?

阅读更多
因为最近遇到了一个数据库表完全没有外键的工程,关联关系都在代码中体现。所以有此疑问,网上搜相关讨论,存之,以便参考。来源:http://blog.csdn.net/u010414666/article/details/48710385

对于主/外键/索引来说,在一些开发团队中被认为是处理数据库关系的利器,也被某些开发团队认为是处理某些具体业务的魔鬼,您的观点呢?在实际应用中您会采取哪种方式?
大家共同观点:主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作,
矛盾焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是第一条对性能的影响。
正方观点:
1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用也许是不同的开发团队来做的。他们如何协调保证数据的完整性,而且一年以后如果又增加了C应用呢?
2,有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。
3,外键在一定程度上说明的业务逻辑,会使设计周到具体全面。

反方观点:
1,可以用触发器或应用程序保证数据的完整性
2,过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题
3,不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert, update, delete 数据的时候更快)eg:在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不止一个字段有外键,这样扫描的数量是成级数的增长!我的一个程序入库在3个小时做完,如果加上外键,需要28个小时!
结论:1,在大型系统中(性能要求不高,安全要求高),使用外键;在大型系统中(性能要求高,安全自己控制),不用外键;小系统随便,最好用外键。2,用外键要适当,不能过分追求3,不用外键而用程序控制数据一致性和完整性时,应该写一层来保证,然后个个应用通过这个层来访问数据库。
分享到:
评论

相关推荐

    数据库表排序,主表子表放置外键约束

    "数据库表排序,主表子表放置外键约束"这一主题涉及到数据库规范化、外键约束、数据导入以及程序化解决方案。下面将详细阐述这些知识点。 首先,**外键约束**是关系数据库中的一种机制,用于确保一个表(子表)中的...

    数据库下所有表的外键约束查询

    用于查询某个数据库下所有表的外键约束情况,以便统一分析外键约束是否合理;主要查询出外键的,是否级联删除,级联更新,强制外键约束,强制复制约束始终状态。如想使用别的状态,请自行添加。下载的童鞋别下载错了...

    为什么在创建php网站时在mysql数据库表中使用外键?

    外键是数据库关系模型中的一个重要概念,它允许我们建立表之间的关联,确保数据的一致性和依赖性。以下是对这个话题的详细探讨。 首先,外键是一种约束,它定义了一个字段或一组字段,其值必须匹配另一个表(被引用...

    java获取数据库主外键

    在Java开发中,有时我们需要动态地获取数据库的元数据信息,比如表结构、主键、外键等。本文将详细介绍如何使用Eclipse和JDBC API来获取MySQL数据库中的表结构以及主外键信息。 #### 一、准备工作 在开始之前,请...

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

    达梦数据库

    如何区分SQL数据库中的主键与外键

    总之,理解并正确使用主键和外键是数据库设计的基础,它们不仅确保了数据的唯一性,还通过外键建立了表间的关系,从而保证了数据的一致性。良好的主键和外键设计对于数据库性能和数据完整性至关重要,因此在设计...

    数据库管理与应用 4.4.4 外键约束.pdf

    数据库管理与应用 4.4.4 外键约束.pdf 学习资料 复习资料 教学资源

    如何处理数据库中的外键

    数据库中的外键是关联不同表的关键元素,它们用于维护数据的一致性和完整性。在复杂的数据库设计中,理解和正确处理外键至关重要。以下是一些关于如何处理数据库中外键的重要知识点: 1. **外键定义**:外键...

    Windchill_数据库表说明.doc

    Windchill 数据库表结构与关系详解 Windchill 是一种基于 PLM(Product Lifecycle Management,产品生命周期管理)技术的系统,旨在帮助企业更好地管理产品设计、开发、制造和维护等过程。Windchill 系统中有多个...

    MySQL删除表的时候忽略外键约束的简单实现

    在MySQL数据库管理中,删除表是一项需要谨慎操作的任务,尤其是当表之间存在外键约束时。外键约束是关系数据库中确保数据完整性和一致性的重要机制,它不允许在父表(引用其他表的字段的表)中删除那些已被子表引用...

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

    例如,成绩表中的学号和课程号可以是外键,分别引用学生表和课程表的主键,这样就建立了表之间的关联,实现了数据的一致性。 索引是提高查询速度的手段,它创建在表的特定列上,可以是主键或非主键字段。索引没有...

    查询某个表作为其他表的外键

    就是为程序员提供了一条可以查询表的主键被其他表引用为外键情况的查询

    sql2000获得表结构包括外键

    根据提供的文件信息,我们可以深入探讨如何使用SQL查询来获取SQL Server 2000中某个特定表的结构信息,包括其列定义、数据类型、是否允许空值、默认值、是否为主键或外键等详细属性。这在进行数据库迁移、备份恢复、...

    数据库主外键详解

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

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

    本文介绍了在MySQL数据库中定义数据表、设置索引、定义外键、级联等操作。下面将详细说明标题和描述中所说的知识点。 首先,文章中提到了创建数据表的过程,例如创建parts表和Pc表。其中,parts表用于保存配件供货...

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

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

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

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

    自动删除所有表,有外键约束的表优先删除

    标题"自动删除所有表,有外键约束的表优先删除"涉及到的是一个数据库操作的场景,通常需要谨慎处理,因为错误的操作可能导致数据丢失或破坏数据库结构。在这个问题中,我们关注的是如何在有外键约束的环境中安全地...

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

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

Global site tag (gtag.js) - Google Analytics