博客
关于我
2024年大数据最新数据库不推荐使用外键的9个理由!_为什么不建议使用外键(2),2024年大数据开发工作或许更难找
阅读量:798 次
发布时间:2023-04-17

本文共 1170 字,大约阅读时间需要 3 分钟。

为什么数据库设计中不使用外键?

在数据库设计中,外键(Foreign Key)是一种强制数据完整性的机制,确保父表和子表之间的数据一致性。然而,尽管外键能够提升数据质量,但在实际应用中,许多设计中选择不使用外键。这背后的原因有很多,以下是一些主要原因:

  • 性能问题

    在表中拥有活动的外键可以提高数据质量,但会显著影响插入、更新和删除操作的性能。每次对外键进行检查时,都需要额外的CPU和I/O资源,这可能导致系统性能下降。在处理大量数据时,这种性能瓶颈尤为明显。因此,在某些高负载场景下,架构师和数据库管理员可能会选择放弃外键来优化性能。

  • 传统数据处理

    许多数据库需要存储来自旧数据库或遗留系统的数据,这些数据可能对数据质量和完整性缺乏严格的约束。为了容纳这些脏数据,设计人员可能会选择不在数据库级别上强制执行外键约束。这种做法虽然不理想,但有时是必要的。

  • 全表重新加载

    某些数据库,如数据仓库和分段数据库,需要频繁从外部系统重新加载数据。在这种情况下,外键约束可能导致数据不一致的问题(例如,父表为空但子表已有数据)。为了避免这种问题,设计人员可能会选择在重新加载时禁用外键。然而,这种做法会增加系统的复杂性,并可能对性能产生负面影响。

  • 高层次框架

    一些应用程序采用了逻辑层框架(如ORM框架或Ruby on Rails),这些框架负责处理数据操作,而不是直接使用SQL语句。通过这种方式,开发人员可以避免手动管理外键约束,让框架在后台完成数据的一致性管理。这种方法不仅降低了对数据库的依赖,还允许开发人员专注于业务逻辑的实现。

  • 跨数据库关系

    在大型系统中,数据库可能分布在多个物理实例上。由于某些数据库(如SQL Server)不允许在同一台服务器上创建跨数据库的外键,这可能成为设计不使用外键的重要原因之一。

  • 数据库平台不可知论者

    一些应用程序被设计为对数据库平台无关,这意味着它们可以在Oracle、SQL Server等多种数据库上运行。为了确保应用程序的兼容性,设计人员可能会避免依赖特定的数据库特性,如外键约束。

  • 对更改的开放性

    有些数据库允许用户自定义设计,例如Oracle提供的Oracle电子商务套件允许实施团队对数据库进行高度定制。这使得设计人员可以根据具体需求选择是否使用外键,而不是被外键约束所限制。

  • 懒惰的架构师

    在某些情况下,架构师和数据库管理员可能只是选择忽略外键的定义,这需要一些额外的工作量,但却没有直接的好处。他们可能认为,外键的管理和维护不值得付出成本。

  • 综上所述,不使用外键的原因多种多样,主要是为了性能优化、适应复杂的数据处理需求以及应对特定的架构限制。虽然外键能够提升数据一致性,但在某些场景下,其带来的负面影响可能超过好处。因此,在实际项目中,设计人员需要根据具体需求权衡利弊,做出最优的选择。

    转载地址:http://dagfk.baihongyu.com/

    你可能感兴趣的文章
    Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
    查看>>
    mysql InnoDB数据存储引擎 的B+树索引原理
    查看>>
    mysql innodb通过使用mvcc来实现可重复读
    查看>>
    mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
    查看>>
    mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
    查看>>
    Mysql join原理
    查看>>
    MySQL Join算法与调优白皮书(二)
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    mysql replace用法
    查看>>
    Mysql Row_Format 参数讲解
    查看>>
    mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
    查看>>
    MySQL Server 5.5安装记录
    查看>>
    mysql server has gone away
    查看>>
    mysql slave 停了_slave 停止。求解决方法
    查看>>