`
forchenyun
  • 浏览: 312662 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数据库设计之反规范化

阅读更多

原文出处: http://www.aiview.com/

数据库设计的范式

1NF 属性不可分割
2NF 没有部分依赖
3NF 没有传递依赖

反规范化设计

反规范化设计的前提
反规范化设计是规范化设计之后的步骤,首先令所有关系满足规范化设计(一般到3NF),之后的反规范化设计才能是可控的。

反规范化设计的优点
能够减少数据库查询时SQL的连接次数,从而减少磁盘IO,提高查询效率。

反规范化设计的缺点
反规范化设计会带来数据的重复存储,浪费了额外的磁盘空间,并且由于多处存储,增加了数据维护的复杂性。

反规范化设计的方法
增加冗余列
增加派生列
表合并
表分割
水平分割(补充一下,在oracle中我们可以使用表分区实现水平分割)
建立多个列定义相同的表,将一个表中的数据行分别保存在多个表中。水平分割可以降低单表索引的层数和大小。
水平分割应用的几种情况:
表记录数很多
表中的数据具有独立性,比如数据可明显按所属地区、年度等属性进行划分
表内容需要存储在多个介质上
垂直分割
把一个表的列定义拆分到多个表中,并且具有相同的主键列。水平分割可以降低数据行的大小。
比如一个表中列数太多,并且某些列数据常用,而某些列数据不常用,就可以进行垂直分割。

反规范设计的数据维护
反规范设计的数据需要额外的工作来维护数据的完整性,一般可以通过以下几种方式进行
应用逻辑
在应用程序的事务中对同一数据的多处存储进行维护。
这种方式比较难于管理,一个维护逻辑很容易出现在多个应用程序当中,容易遗漏。
批处理维护
由批处理程序批量的处理所有的非规范化关系涉及的数据。一般定期运行,运行间隔根据业务来决定,并且可以利用Job来自动运行批处理程序。可用于对冗余数据的实时性要求不高或者有一定规则的环境。
触发器
在数据库端建立触发器,对原数据的修改会立即触发对冗余列的修改。可用于对数据实时性要求较高的环境,但同时会降低数据的插入和更新速度。

扇形陷阱与深坑陷阱 (Fan Trap and Chasm Trap)

两个陷阱的解释

设计过程中应注意避免扇形陷阱出现,在设计玩成之后也应检查所有连续顺序相邻的两个one to many关系,以确保没有实际的深坑陷阱出现。

分享到:
评论

相关推荐

    关系型数据库设计指南:规范化、反规范化与性能优化.md

    深入探讨了关系型数据库设计中的规范化、反规范化以及性能优化。文章首先介绍了关系型数据库的基本概念和特点,随后详细阐述了规范化的理论基础及其优点,如减少数据冗余和提高数据一致性。接着,讨论了反规范化的...

    关于数据库的规范化及反规范技术研究

    在数据库设计中,规范化和反规范化是两个重要的概念,它们在确保数据完整性和优化性能之间寻找平衡。 规范化是数据库设计的一个核心理论,旨在减少数据冗余和提高数据一致性。规范化的理论基础是不同级别的范式,...

    数据库设计规范化反规范化.doc

    规范化和反规范化是数据库设计中的两种重要策略,它们在确保数据完整性、减少冗余和优化查询性能方面起着重要作用。 1. **实体关系模型**: - 实体是现实世界中可辨识的独立对象,如人、物或事件,它们具有属性。 ...

    数据库设计中的反规范技术深入探讨

    数据库设计是构建高效、可靠的信息系统的关键步骤,其中包括正向的规范化设计和反规范化设计。规范化是为了消除数据冗余,确保数据一致性,防止更新异常和插入异常,它遵循一系列的范式,如第一范式(1NF)、第二...

    数据库反规范化:权衡与应用的艺术

    反规范化是数据库设计中的一种权衡策略,它可以在提高查询性能和简化应用逻辑方面带来好处,但同时也增加了数据冗余和一致性维护的复杂性。在实施反规范化时,应该仔细评估其对系统性能和数据一致性的影响,并采取...

    反规范化技术

    虽然规范化是数据库设计的重要原则之一,但在实际应用中,适当采用反规范化技术能够有效提升系统的性能和易用性。通过对数据结构进行适当的调整,可以在保证数据一致性的前提下,大幅度提高查询效率。因此,在设计...

    数据库反规范化设计技巧及其实际应用场景

    内容概要:本文详述了反规范化设计的主要技术和方法,如增加冗余列、派生列、重组表、水平分表及垂直分表。同时探讨了因反规范化造成的数据不一致性解决方案及 Redis 与 MySQL 的数据同步方法。介绍了 Redis 数据库...

    数据库中规范化与反规范化设计的比较与分析.doc

    数据库中规范化与反规范化设计的比较与分析

    数据库设计规范(1).pdf

    因此,需要在第三范式(3NF)与性能之间找到平衡,适时采用反规范化策略以优化查询速度。 2.4 字段类型的定义与使用策略 正确选择字段类型对数据库性能至关重要。例如,整数类型的选择应根据数值范围确定,日期时间...

    数据库规范化理论研究.doc

    数据库规范化理论的基本概念包括函数依赖、规范化、反规范化等。函数依赖是指在关系数据库中,一个属性值的变化会影响其他属性值的变化的关系。规范化是指将关系数据库中的数据进行分解,使其符合某种规范,从而提高...

    数据库设计中的反规范

    在某些场景下,为了提高查询性能、减少数据冗余或者简化应用程序的复杂性,数据库设计师可能会选择牺牲部分规范化。例如,通过引入重复组、冗余数据或宽表来避免频繁的联接操作,从而提高查询速度。 然而,反规范...

    数据库设计规范(指南).pdf

    - **非标准化的情况**:尽管3NF非常重要,但在某些情况下,为了提高查询效率,可能需要对表进行反规范化处理,即有意增加数据冗余。这种做法需要谨慎对待,因为它可能会引入数据不一致的问题。 ##### 1.2 数据驱动 ...

    什么是正规化(Normalization)和反规范化(Denormalization)?它们之间的区别是什么?

    正规化(Normalization)和反规范化(Denormalization)是数据库设计中两个重要概念,用于优化数据结构和提高数据库性能。 正规化(Normalization)是将数据库中的表结构设计为满足关系型数据库理论规范的过程。它...

    数据库设计文档 --软件开发中数据库设计

    - 分析查询模式,进行数据库的规范化和反规范化设计,平衡数据冗余和查询效率。 6. **数据库规范** - 包括命名规范、数据类型选择、约束设置、默认值定义等,确保代码的一致性和可读性。 - 设计数据库的安全性,...

    数据库设计教程(第二版)pdf

    2. **反规范化**:在某些情况下为了提高查询效率,会故意引入一定的数据冗余,但这需要谨慎处理以避免数据不一致问题。 3. **索引设计**:合理地为表中的列创建索引可以显著提高查询性能,但过多的索引会影响插入、...

    数据库设计规范.pdf

    * 高效率:兼顾规范与效率,适当进行反范式化,满足应用系统的性能要求 * 紧凑性:例如能用 char(10)的就不要用 char(20),提高存储的利用率和系统性能,但同时也要兼顾扩展性和可移植性 * 易用性:数据库设计清晰...

    ORACLE数据库设计与开发规范研究.pdf

    通常,数据库设计至少应达到第三范式(3NF),但在某些情况下,考虑到性能因素,可能会选择反规范化以优化特定查询。 此外,数据库的安全性也是一个重要方面。应设定合理的权限和角色,确保数据访问的安全。使用...

    数据库设计经验谈 数据库设计经验 数据库设计经验总结谈

    设计过程中应避免常见的错误,例如过度规范化导致的数据冗余或反规范化带来的数据一致性问题。合理平衡这两者之间的关系是至关重要的。 #### 三、选择键 **3.1 如何选择键** 选择合适的键对于确保数据的完整性和...

Global site tag (gtag.js) - Google Analytics