博客
关于我
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/

    你可能感兴趣的文章
    Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
    查看>>
    MySQL Cluster与MGR集群实战
    查看>>
    multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
    查看>>
    mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
    查看>>
    Multiple websites on single instance of IIS
    查看>>
    mysql CONCAT()函数拼接有NULL
    查看>>
    multiprocessing.Manager 嵌套共享对象不适用于队列
    查看>>
    multiprocessing.pool.map 和带有两个参数的函数
    查看>>
    MYSQL CONCAT函数
    查看>>
    multiprocessing.Pool:map_async 和 imap 有什么区别?
    查看>>
    MySQL Connector/Net 句柄泄露
    查看>>
    multiprocessor(中)
    查看>>
    mysql CPU使用率过高的一次处理经历
    查看>>
    Multisim中555定时器使用技巧
    查看>>
    MySQL CRUD 数据表基础操作实战
    查看>>
    multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
    查看>>
    mysql csv import meets charset
    查看>>
    multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
    查看>>
    MySQL DBA 数据库优化策略
    查看>>
    multi_index_container
    查看>>