数据库设计中,外键 考虑

简介: 数据库外键的使用

一、

使用外键,每次更新或删除操作都必须考虑外键约束,造成开发和测试的不方便    

二、在阿里的java规范中,有一条:

   【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

三、外键:

好处:

     1 可以保证数据的完整性和一致性;
     2  级联操作比较方便;
     3  将数据完整性判断托付给数据库完成,减少了程序的代码量。

坏处:

  • 一、性能问题

           比如有一张表,有三个外键,每次新增数据,都需要检查三个外键对应表中是否有对应数据。sql的执行时间会更长。
           此类检查,完全可以在应用层去解决,不用交付给数据库。
  • 二、并发问题

           在高并发大流量的场景中,使用外键容易造成死锁。因为修改数据时需要查询对应的外键表可能会获取额外的锁。这个和Innodb的锁机制有关。
  • 三、扩展性问题

           做平台迁移方便,比如你从Mysql迁移到Oracle,像触发器、外键这种东西,都可以利用框架本身的特性来实现,而不用依赖于数据库本身的特性,做迁移更加方便。
           分库分表方便,在水平拆分和分库的情况下,外键是无法生效的。将数据间关系的维护,放入应用程序中,为将来的分库分表省去很多的麻烦。
  • 四、数据库需要额外的维护外键的内部管理
  • 五、技术问题

           如果大量的使用外键,其实将应用程序应该执行的判断逻辑转移到了数据库上。数据库的性能开销变大,对DBA的要求更高。如果数据约束逻辑在应用程序中,在应用服务器性能不够,可以做水平扩展,加机器。如果是在数据库服务器上,数据库服务器会成为性能瓶颈,做水平扩展比较困难,可能会成为性能瓶颈,受IO能力限制。

四、不使用外键:

坏处:

        删除数据,可能会遗漏对应的数据,造成脏数据。
        约束逻辑,需要在逻辑层实现。
        消耗服务器的性能。 

五、总结:

  外键是否使用,需要综合考虑,诸多因素,妥善处理。
相关文章
|
SQL 存储 Web App开发
PolarDB-X 分布式数据库中的外键
外键是关系型数据库中非常便利的一种功能,它通过一个或多个列为两张表建立连接,从而允许跨表交叉引用相关数据。外键通过约束来保持数据的一致性,通过级联来同步数据在多表间的更新和删除。在关系数据库系统中,大多数表都遵循外键的概念。
|
2月前
|
数据库 Python
django中数据库外键可以自定义名称吗
django中数据库外键可以自定义名称吗
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
74 0
|
11月前
|
关系型数据库 MySQL 数据库
Mysql数据库 8.SQL语言 外键约束
Mysql数据库 8.SQL语言 外键约束
88 0
|
关系型数据库 数据库 数据库管理
关系型数据库中的主键和外键
关系型数据库中的主键和外键
|
SQL 存储 关系型数据库
数据库三大范式、ER图与实体类、外键约束与级联操作你了解多少?(下)
数据库三大范式、ER图与实体类、外键约束与级联操作你了解多少?
434 0
|
SQL Oracle Java
数据库三大范式、ER图与实体类、外键约束与级联操作你了解多少?(上)
数据库三大范式、ER图与实体类、外键约束与级联操作你了解多少?
585 0
|
SQL 关系型数据库 MySQL
删除数据库中的所有外键(MySql)?
我不想手动删除所有的目录,有办法删除数据库中的所有外键约束吗? 可以使用此SQL生成ALTERTABLE: SELECT concat(‘alter table ‘,table_schema,’.’,table_name,’ DROP FOREIGN KEY ‘,constraint_name,’;’) FROM information_schema.table_constraints WHERE constraint_type=’FOREIGN KEY’ AND table_schema=’!!YOUR_SCHEMA_HERE!!’; 它将输出这样的SQL:
92 0
|
SQL 数据库
编写SQL为数据库某一字段添加外键约束
编写SQL为数据库某一字段添加外键约束
107 0
编写SQL为数据库某一字段添加外键约束
|
SQL 关系型数据库 MySQL
MySQL 外码约束原理:如何解决数据库添加数据时产生的外码(外键)约束?
MySQL 外码约束原理:如何解决数据库添加数据时产生的外码(外键)约束?
519 0
MySQL 外码约束原理:如何解决数据库添加数据时产生的外码(外键)约束?
下一篇
无影云桌面