美文网首页
你用不用数据库的外键?

你用不用数据库的外键?

作者: Shaman | 来源:发表于2019-07-19 15:06 被阅读0次

是否使用外键确实会有一些争议。我来解释下关于外键的使用:

首先,外键本身是为了实现强一致性,所以如果需要正确性>性能的话,还是建议使用外键,它可以让我们在数据库的层面保证数据的完整性和一致性。
当然不用外键,你也可以在业务层进行实现。不过,这样做也同样存在一定的风险,因为这样,就会让业务逻辑会与数据具备一定的耦合性。也就是业务逻辑和数据必须同时修改。而且在工作中,业务层可能会经常发生变化。

当然,很多互联网的公司,尤其是超大型的数据应用场景,大量的插入,更新和删除在外键的约束下会降低性能,同时数据库在水平拆分和分库的情况下,数据库端也做不到执行外键约束。另外,在高并发的情况下,外键的存在也会造成额外的开销。因为每次更新数据,都需要检查另外一张表的数据,也容易造成死锁。
所以在这种情况下,尤其是大型项目中后期,可以采用业务层来实现,取消外键提高效率。
不过在SQL学习之初,包括在系统最初设计的时候,还是建议你采用规范的数据库设计,也就是采用外键来对数据表进行约束。因为这样可以建立一个强一致性,可靠性高的数据库结构,也不需要在业务层来实现过多的检查。

当然在项目后期,业务量增大的情况下,你需要更多考虑到数据库性能问题,可以取消外键的约束,转移到业务层来实现。而且在大型互联网项目中,考虑到分库分表的情况,也会降低外键的使用。
不过在SQL学习,以及项目早期,还是建议你使用外键。在项目后期,你可以分析有哪些外键造成了过多的性能消耗。一般遵循2/8原则,会有20%的外键造成80%的资源效率,你可以只把这20%的外键进行开放,采用业务层逻辑来进行实现,当然你需要保证业务层的实现没有错误。不同阶段,考虑的问题不同。当用户和业务量增大的时候,对于大型互联网应用,也会通过减少外键的使用,来减低死锁发生的概率,提高并发处理能力。

摘自 SQL 必知必会 评论区

PS :-)

 MySql Workbench里选中Database——> reverse engineering 可以生成 ER 图

相关文章

  • 互联网应用数据库设计的性能考虑

    数据库外键的使用 外键解决的是数据的安全性、完整性问题。 用不用外键,这取决于数据库的用途、规模、架构,有外键,可...

  • 互联网应用数据库设计的性能考虑

    数据库外键的使用 外键解决的是数据的安全性、完整性问题。 用不用外键,这取决于数据库的用途、规模、架构,有外键,可...

  • 你用不用数据库的外键?

    是否使用外键确实会有一些争议。我来解释下关于外键的使用: 首先,外键本身是为了实现强一致性,所以如果需要正确性>性...

  • mysql 多表关联创建外键

    逻辑外键是数据库体现不出来的。物理外键是数据库知道的 一、多表关联-外键: 代码1: Foreign前面不写东西,...

  • 浅谈数据库主键外键索引

    目录 1、主键、外键、索引定义 2、为什么定义主键、外键 3、主键和外键的关系 4、数据库中主键和外键的设计原则 ...

  • Sql知识

    主键外键 主键:PRIMARY KEY 外键:FOREIGN KEY 创建SQL FOREIGN KEY关于数据库...

  • Flask-SQLAlchemy外键约束

    外键:数据库一个表的键是另一个表的主键,这个键称为这个表的外键 1.连接数据库 2.创建用户表和文章表,文章表中以...

  • 多表操作

    外键 建立外键是为了保证数据的完整和统一性 外建所在表为从表 创建数据库 CREATE DATABASE chap...

  • 数据库要不要建立外键

    目前在建立一个小说网站,数据库设计之后,在考虑要不要建立外键。自己觉得,外键是为了更好的对数据进行保护,防止你程序...

  • Mysql 如何区分主表跟从表

    主表与从表的区分 若同一数据库中,B表的外键与A表的主键相对应,则A表为主表,B表为从表。 什么是外键 外键的要求...

网友评论

      本文标题:你用不用数据库的外键?

      本文链接:https://www.haomeiwen.com/subject/dmfslctx.html