`

为何外键不再推荐使用

    博客分类:
  • DB
阅读更多
表的关联,是一种逻辑关系,并不需要进行物理上的“硬关联”,而且你所期望的关联,其实只是其数据上存在一定的联系而已,而这种联系实际上是在设计之初就定义好的固有逻辑。

在业务代码中实现的时候,只要按照设计之初的这种固有关联逻辑来处理数据即可,并不需要在数据库层面进行“硬关联”,因为在数据库层面通过使用外键的方式进行“硬关联”,会带来很多额外的资源消耗来进行一致性和完整性校验,即使很多时候我们并不需要这个校验。

所以一般不建议在数据库中使用外键约束来保证数据的一致性和完整性。

若是高并发大流量事务场景,使用外键可能容易造成死锁,以及数据库资源出现瓶颈,所以一般互联网行业高频率高并发不建议使用

如何体现表与表之间的关联性和如何维护数据完整性和一致性:
1.关联性:设计数据表的时候,约定关联字段
2. 维护数据完整性和一致性:通过程序控制,启用事务的方式
分享到:
评论

相关推荐

    经典SQL语句大全_主外键_约束

    备份数据库的操作涉及到`sp_addumpdevice`存储过程和`BACKUP DATABASE`命令,这里不再详述,因为它们涉及更复杂的数据库维护策略。 最后,SQL还允许通过`SELECT`语句从现有表创建新表,如创建`tab_new`表,它与`tab...

    Oracle外键不加索引引起死锁示例

    在示例中,创建了名为`ind_pk_object_id`的索引后,死锁的情况得到了解决,因为现在删除父表记录时的检查变得高效,不再需要表级锁。 创建索引对于避免死锁至关重要,但同时需要注意,索引会占用额外的存储空间,并...

    django在开发中取消外键约束的实现

    首先,取消外键约束并不意味着完全移除模型间的关联,而是不再使用Django的内置外键字段来定义关系。在Django中,我们通常使用`models.ForeignKey`来创建外键,但可以通过自定义SQL命令来禁用外键检查,从而达到类似...

    django序列化时使用外键的真实值操作

    例如,`tester`字段将不再显示为`[1]`,而是显示为`[["kevin"]]`。 对于多对多关系,如`module`字段,情况稍有不同。由于多个模块可能关联到同一个内容,我们需要确保每个模块的自然键都被包含在内。在`Content`...

    总结三种MySQL外键约束方式

    例如,在用户表(t_user)中设置外键约束为级联时,删除用户组表(t_group)的记录,会同步删除用户表中引用该用户组的所有用户记录;更新用户组ID时,所有用户记录的group_id也将同步更新。 ```sql create table...

    MySQL删除有外键约束的表数据方法介绍

    4. **更新引用表**:在删除之前,先更新或删除子表中引用父表记录的行,使得删除操作不再违反外键约束。 5. **删除并重建表**:如果表结构允许,可以先删除整个表,然后重建它,这会清除所有约束,但需谨慎操作,...

    hibernate one to one 映射到两种方式

    在某些场景下,我们可能不希望破坏实体的主键完整性,而是为关联创建独立的外键字段。这时可以使用`@OneToOne`和`@MapsId`注解: 1. 在实体类A中,添加对实体B的引用,同时声明外键字段: ```java @Entity public ...

    PowerDesigner教程

    内容尽量简略,一些相同或类似操作过程尽量不再重复。 <br>3. 部分术语参考了飞思科技产品研发中心监制电子工业出版社的《PowerDesigner数据库系统分析设计与应用》。 <br>4. 暂时没有包含OOM,XML,BPM,ILM...

    oracle编辑的常用语句

    11. 创建外键约束:也可以使用`CONSTRAINT`关键字创建外键,例如`CONSTRAINT fk_name FOREIGN KEY (A_ID) REFERENCES A(ID)`,其中fk_name是你为外键约束定义的名字。 12. 远程桌面连接命令:虽然不是直接的Oracle ...

    数据库实验报告 视图的定义及使用实验(详细版有截图的)

    4. 最后,使用`DROP VIEW`语句删除不再需要的视图,如IS_s1和BT_S。 这个实验提供了实践经验,让学生深入理解视图的概念,并掌握如何在实际操作中应用。通过这些操作,学生不仅可以学习到SQL Server 2000的视图操作...

    HostelWorld说明文档1

    文档标题为"HostelWorld说明文档1",主要涉及了一个基于J2ee平台的HostelWorld项目的数据库设计和架构设计。这份文档由袁阳阳在2017年4月6日编写,主要目的是详细阐述项目的数据库结构以及前端和后端的实现方式。 *...

    实验二 管理数据库操作

    3. **掌握数据库的修改和删除方法**:学会如何使用SQL语句修改现有数据库的结构或属性,并能够安全地删除不再需要的数据库。 #### 实验内容详解 本实验分为多个部分,具体包括数据库的创建、修改与删除等环节。 #...

    Hibernate关联映射

    在这种情况下,被引用的实体类(如 Address)不再有自己的独立主键生成策略,而是依赖于引用它的实体类(如 Person)生成主键。在 Hibernate 映射中,需要使用 `one-to-one` 元素,并设置 `constrained="true"`,...

    SQL速查.docx

    综上所述,此文档提供了SQL数据库设计和管理的基本知识,包括表结构、数据类型、外键、视图和存储过程的创建,以及使用工具进行数据库操作的方法。对于初学者和经验丰富的开发者来说,都是一个有价值的参考资源。

    数据表的管理与使用-完PPT课件.ppt

    这些类型区分英文和Unicode字符,其中text和ntext已不再推荐,应改为使用varchar(MAX)和nvarchar(MAX)。日期时间数据类型如datetime和smalldatetime,前者具有更高的精度,后者则适合不需要毫秒级别的日期时间记录。...

    Hibernate+Annotation.doc

    当一个API不再推荐使用时,我们可以在上面使用`@Deprecated`注解,这会在编译时发出警告信息,提示开发者应使用替代的API。在Hibernate中,如果有些配置或方法不再推荐,可能会被标注为过时。 3. **@...

    Torque的应用总结

    通过使用Torque,可以使用面向对象方式访问数据库,不再需要编写任何SQL语句,对于快速进行项目开发起到了至关重要的作用。 Torque 的应用总结文章摘要中提到了Torque在项目中的应用经验,包括Torque的配置、使用...

Global site tag (gtag.js) - Google Analytics