博客
关于我
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中json_extract的使用方法
    查看>>
    mysql中kill掉所有锁表的进程
    查看>>
    mysql中like % %模糊查询
    查看>>
    MySql中mvcc学习记录
    查看>>
    mysql中null和空字符串的区别与问题!
    查看>>
    MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
    查看>>
    MYSQL中TINYINT的取值范围
    查看>>
    MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
    查看>>
    Mysql中varchar类型数字排序不对踩坑记录
    查看>>
    MySQL中一条SQL语句到底是如何执行的呢?
    查看>>
    MySQL中你必须知道的10件事,1.5万字!
    查看>>
    MySQL中使用IN()查询到底走不走索引?
    查看>>
    Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
    查看>>
    MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
    查看>>
    mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
    查看>>
    mysql中出现Unit mysql.service could not be found 的解决方法
    查看>>
    mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
    查看>>
    Mysql中各类锁的机制图文详细解析(全)
    查看>>