精华内容
下载资源
问答
  • 数据库设计之规范化和反规范化

    千次阅读 2019-09-09 20:50:36
    文章目录一、规范化二、反规范化      数据库设计的规范化能够经常被提及,但是反规范化很少被涉猎。实际应用中反规范化应用的场景很多。本文主要介绍一下数据库的反规范化。 一、规范化 ...


         数据库设计的规范化能够经常被提及,但是反规范化很少被涉猎。实际应用中反规范化应用的场景很多。本文主要介绍一下数据库的反规范化。

    一、规范化

    常见的规范化有数据库设计的三范式。

    • 1NF 是最低的规范化要求。如果关系 R 中所有属性的值域都是简单域,属性不可再分。
    • 2NF 非主属性完全函数依赖于码
    • 3NF 非主属性不传递依赖于任何一个候选码

    二、反规范化

        数据库中的数据规范化的优点是减少了数据冗余,节约了存储空间,相应逻辑和物理的I/O 次数减少,同时加快了增、删、改的速度,但是对完全规范的数据库查询,通常需要更多的连接操作,从而影响查询速度。因此,有时为了提高某些查询或应用的性能而破坏规范规则,即反规范化(非规范化处理)。

    常见的反规范化技术包括:

    • (1)增加冗余列
      增加冗余列是指在多个表中具有相同的列,它常用来在查询时避免连接操作。例如:以规范化设计的理念,学生成绩表中不需要字段“姓名”,因为“姓名”字段可以通过学号查询到,但在反规范化设计中,会将“姓名”字段加入表中。这样查询一个学生的成绩时,不需要与学生表进行连接操作,便可得到对应的“姓名”。

    • (2)增加派生列
      增加派生列指增加的列可以通过表中其他数据计算生成。它的作用是在查询时减少计算量,从而加快查询速度。例如:订单表中,有商品号、商品单价、采购数量,我们需要订单总价时,可以通过计算得到总价,所以规范化设计的理念是无须在订单表中设计“订单总价”字段。但反规范化则不这样考虑,由于订单总价在每次查询都需要计算,这样会占用系统大量资源,所以在此表中增加派生列“订单总价”以提高查询效率。

    • (3)重新组表
      重新组表指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。

    • (4)分割表
      有时对表做分割可以提高性能。表分割有两种方式。
      水平分割:根据一列或多列数据的值把数据行放到两个独立的表中。水平分割通常在下面的情况下使用。

      情况 1:表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询效率。
      情况 2:表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用。
      情况 3:需要把数据存放到多个介质上。

    • (5)垂直分割:把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。如果一个表中某些列常用,而另外一些列不常用,则可以采用垂直分割,另外垂直分割可以使得数据行变小,一个数据页就能存放更多的数据,在查询时就会减少 I/O 次数。其缺点是需要管理冗余列,查询所有数据需要连接操作。


    END
    展开全文
  • 归一化 规范化嵌套的JSON并将规范化的数据反规范化为原始JSON
  • 反规范化技术

    2011-11-14 16:31:06
    数据库的规范化理论不仅仅是关系模式设计的理论指导和强有力的工具,对其它数据模型数据库的逻辑...性能降低,所以在实际应用时常常对数据库进行反规范化。文章陈述了在数据库建模过程中进行反规范化的基本原则和方法。
  • Strinvader Unicode反规范化生成器-查找规范化为某些目标字符串的文本 文字模式 生成文本字符串的一些备用编码,以便规范化仍将匹配。 $ strinvader.py --num 4 --text blocked_text Bˡᵒⓒⓚⓔ
  • conval:Symfony控制台命令输入反规范化器和验证器
  • 咨询方法-用于大规模集群中的分析型查询处理的自动反规范化.zip
  • Mongoid ::反规范化 注意:我不再积极维护此模块,并且不知道它是否与更新版本的Mongoid兼容。 如果您想拥有此存储库的所有权,请告诉我。 用于对Mongoid模型中的关联属性进行归一化的Helper模块。 为什么要非正规...
  • 数据库设计之反规范化

    千次阅读 2013-06-24 10:13:27
    1、反规范的好处  ...所以,关系有时故意保留成非规范化的,或者规范化以后又反规范了,这样做通常是为了改进性能。  例如帐户系统中的“帐户”表B-TB01,它的列busi-balance(企业帐户的总余额)就违
    1、反规范的好处 
    
    是否规范化的程度越高越好?这要根据需要来决定,因为“分离”越深,产生的关系越多,关系过多,连接操作越频繁,而连接操作是最费时间的,特别对以查询为主的数据库应用来说,频繁的连接会影响查询速度。所以,关系有时故意保留成非规范化的,或者规范化以后又反规范了,这样做通常是为了改进性能。 
    例如帐户系统中的“帐户”表B-TB01,它的列busi-balance(企业帐户的总余额)就违反规范,其中的值可以通过下面的查询获得: 
    select busi-code,sum(acc-balance) 
    from B-TB06 
    group by busi-code 
    如果B-TB01中没有该列,若想获得busi-name(企业名称)和企业帐户的总余额,则需要做连接操作: 
    select busi-name,sum(acc-balance) 
    from B-TB01,B-TB06 
    where B-TB01.busi-code=B-TB06.busi-code 
    group by busi-code 
    如果经常做这种查询,则就有必要在B-TB01中加入列busi-balance,相应的代价则是必须在表B-TB06上创建增、删、改的触发器来维护B-TB01表上busi-balance列的值。类似的情况在决策支持系统中经常发生。 
    反规范的好处是降低连接操作的需求、降低外码和索引的数目,还可能减少表的数目,相应带来的问题是可能出现数据的完整性问题。加快查询速度,但会降低修改速度。因此决定做反规范时,一定要权衡利弊,仔细分析应用的数据存取需求和实际的性能特点,好的索引和其它方法经常能够解决性能问题,而不必采用反规范这种方法。 
    2、常用的反规范技术 
    在进行反规范操作之前,要充分考虑数据的存取需求、常用表的大小、一些特殊的计算(例如合计)、数据的物理存储位置等。常用的反规范技术有增加冗余列、增加派生列、重新组表和分割表。 
    (1)增加冗余列是指在多个表中具有相同的列,它常用来在查询时避免连接操作。例如前面例子中,如果经常检索一门课的任课教师姓名,则需要做class和teacher表的连接查询: 
    select class-name,teacher-name 
    from class,teacher 
    where class.teacher-no=teacher.teacher-no 
    这样的话就可以在class表中增加一列teacher-name就不需要连接操作了。 
    增加冗余列可以在查询时避免连接操作,但它需要更多的磁盘空间,同时增加表维护的工作量。 
    (2)增加派生列指增加的列来自其它表中的数据,由它们计算生成。它的作用是在查询时减少连接操作,避免使用集函数。例如前面所讲的账户系统中的表B-TB01的列busi-balance就是派生列。派生列也具有与冗余列同样的缺点。 
    (3)重新组表指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。例如,用户经常需要同时查看课程号,课程名称,任课教师号,任课教师姓名,则可把表class(class-no,class-name,teacher-no)和表teacher(teacher-no,teacher-name)合并成一个表class(class-no,class-name,teacher-no,teacher-name)。这样可提高性能,但需要更多的磁盘空间,同时也损失了数据在概念上的独立性。 
    (4)有时对表做分割可以提高性能。表分割有两种方式: 
    1水平分割:根据一列或多列数据的值把数据行放到两个独立的表中。 
    水平分割通常在下面的情况下使用。 
    ·表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度。 
    ·表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用。 
    ·需要把数据存放到多个介质上。 
    例如法规表law就可以分成两个表active-law和inactive-law。activea-authors表中的内容是正生效的法规,是经常使用的,而inactive-law表则使已经作废的法规,不常被查询。 
    水平分割会给应用增加复杂度,它通常在查询时需要多个表名,查询所有数据需要union操作。在许多数据库应用中,这种复杂性会超过它带来的优点,因为只要索引关键字不大,则在索引用于查询时,表中增加两到三倍数据量,查询时也就增加读一个索引层的磁盘次数。 
    2垂直分割:把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。 
    如果一个表中某些列常用,而另外一些列不常用,则可以采用垂直分割,另外垂直分割可以使得数据行变小,一个数据页就能存放更多的数据,在查询时就会减少I/O次数。其缺点是需要管理冗余列,查询所有数据需要join操作。 
    3、反规范技术需要维护数据的完整性 
    无论使用何种反规范技术,都需要一定的管理来维护数据的完整性,常用的方法是批处理维护、应用逻辑和触发器。 
    批处理维护是指对复制列或派生列的修改积累一定的时间后,运行一批处理作业或存储过程对复制或派生列进行修改,这只能在对实时性要求不高的情况下使用。 
    数据的完整性也可由应用逻辑来实现,这就要求必须在同一事务中对所有涉及的表进行增、删、改操作。用应用逻辑来实现数据的完整性风险较大,因为同一逻辑必须在所有的应用中使用和维护,容易遗漏,特别是在需求变化时,不易于维护。 
    另一种方式就是使用触发器,对数据的任何修改立即触发对复制列或派生列的相应修改。触发器是实时的,而且相应的处理逻辑只在一个地方出现,易于维护。一般来说,是解决这类问题的最好的办法。
    展开全文
  • 反规范化技术技术手段 增加派生性冗余列、增加冗余列、重新组表、分割表 优点 牺牲空间与规范程度来提高查询效率 大数据(海量数据)特点(集群平台) 数据量极大(Volume)、数据处理速度快(Velocity)、数据有...

    反规范化技术


    技术手段

    增加派生性冗余列、增加冗余列、重新组表、分割表

    优点

    牺牲空间与规范程度来提高查询效率

    大数据(海量数据)


    特点(集群平台)

    数据量极大(Volume)、数据处理速度快(Velocity)、数据有多样性(Variety)、 数据有价值(Value)

    展开全文
  • 规范化与反规范化

    千次阅读 2010-06-20 22:07:00
    正则:其目的是减少容易,同时保证数据的完整性。其通过将大的实体分解为若干小的实体,这些小的实体与原先的实体含有相同的信息,但没有重复。反正则:基于正则的数据库,来修改表的结构,实现可控的冗余度。...

    规范化:其目的是减少容易,同时保证数据的完整性。其通过将大的实体分解为若干小的实体,这些小的实体与原先的实体含有相同的信息,但没有重复。

    反规范化:基于正则化的数据库,来修改表的结构,实现可控的冗余度。其唯一目的是提高性能。

     

    Normalization and Denormalization

    The purpose of normalization is to reduce redundancy, and secure data integrity. This is achieved by reducing large entries into several other, lesser entities which together contains the same information, but without repeating it.

    Denormalization is the process of taking a normalized database and modifying table structure to allow controlled redundancy. The only purpose of denormalization is to improve performance.

     

    展开全文
  • 数据库设计中反规范化技术的应用

    千次阅读 2011-11-14 09:26:37
    【摘 要】数据库的规范化理论不仅仅是关系模式设计的理论指导和强有力的工具,对其它数据模型数据库的逻辑设计也 同样有理论意义,数据的规范化...性能降低,所以在实际应用时常常对数据库进行反规范化。文章陈述了
  • 下午试题第二道题:反规范化技术

    千次阅读 2011-11-14 16:43:49
    2011年11月12日(星期六)下午13:30-15:00的考题第二道,考的是反规范化技术  问题一,请用300字说明什么叫反规范化技术,使用他的好处和不利因素。  问题二,反规范化包括哪些技术?   问题三,请根据题材...
  • 所以,关系有时故意保留成非规范化的,或者规范化以后又反规范了,这样做通常是为了改进性能。例如帐户系统中的“帐户”表B-TB01,它的列busi-balance(企业帐户的总余额)就违反规范,其中的值可以通过下面的查询...
  • 数据库:反规范化

    千次阅读 2008-11-22 22:08:00
    因此决定做反规范时,一定要权衡利弊,仔细分析应用的数据存取需求和实际的性能特点,好的索引和其他的方法经常能够解决性能问题,而不必采用反规范这种方法。  在反规范之前,要充分分析考虑数据的存取需求、...
  • 什么是反规范化?请说明优缺点

    千次阅读 2015-09-08 15:55:21
  • 数据库的反规范设计可以提高查询性能。常用的反规范技术有增加冗余列、增加派生列、重新组表和分割表。但反规范技术需要维护数据的完整性。因此在做反规范时,一定要权衡利弊,仔细分析应用的数据存取需求和实际的...
  • 关系数据库设计:谈谈规范化技术

    千次阅读 多人点赞 2020-08-19 21:42:31
    通过实际案例介绍关系数据库设计中的规范化技术(Normalization),为什么需要规范化,常见的第一范式、第二范式和第三范式,反规范化应用的场景以及外键的取舍问题。
  • 反规范器-源码

    2021-02-03 11:33:12
    从基于简单模式(使用TypeScript实现)的规范化数据结构中反规范化JavaScript对象。 作者:Sandro Schmid( ) 版本:2.5.0-beta.4 版本控制 为了简化版本控制,所有模块均使用相同的主版本号和次版本号。 安装 ...
  • 数据库规范化设计与反规范化设计是一对互相矛盾的设计思想。本文以数据规范化理论为出发点,从合理建立关系模型和提高操作性能角度,分析规范化和反规范化的优势和不足,并提出了几种合理有效的策略来平衡二者之间的...
  • SQL 规范化

    千次阅读 2019-01-09 18:22:02
    规范化 规范化的概念是现代OLTP(On-Line Transaction Processing 联机事务处理过程)数据库设计的基石。规范化和关系数据库的概念是同时出现的。两者都来源于E.F.Codd(IBM)在1969年发表的著作。Codd提出这样的概念:...
  • 演讲的示例“规范化直到痛苦,反规范化直到在Django中工作” 这个软件库包含“去正规化直到它工作在Django正常化,直到它伤害”的讲座中讨论的概念的几个例子项目处的Python诺尔德斯特2018幻灯片中显示可用: 运行...
  • mysql优化(三) 逆规范化三范式

    千次阅读 2017-01-06 11:48:45
    数据库设计时要满足规范化这个道理大家都非常清楚,甚至有数据库的三范式, 好吧, 这有点让我想起了机器人的三定律.但是否数据的规范化程度越高越好呢?这还是由实际需求来决定。 因为规范化越高,那么产生的关系就越...
  • 数据(反规范化) 数据订阅 资料验证 数据无效 数据到期 计算字段 乐观更新 垃圾收集 该库压缩后约为5 KB。 设置 安装: npm install --save normalized-cache 用法 import { Cache , schema } from "normalized-...
  • 遇到这个 Java Serializable 序列这个接口,我们可能会有如下的问题a,什么叫序列序列 b,作用。为啥要实现这个 Serializable 接口,也就是为啥要序列 c,serialVersionUID 这个的值到底是在怎么设置的...
  • 数据库设计中的反规范(转载)

    千次阅读 2013-02-17 20:25:12
    最近需要了解数据库反规范化相关的知识,发现文章内容实在,转载之,以备参考。原文地址:http://www.uml.org.cn/sjjm/sjjm0%A3%B4.htm  数据库设计是把现实世界的商业模型与需求转换成数据库的模型的过程,它...
  • 数据库数据规范化

    千次阅读 2018-10-08 22:38:03
    Codd博士定义了6个范式来规范化数据库,范式由小到大来约束,范式越高冗余越小,但表的个数也越多。实验证明,三范式是性价比最高的。 2.1 第一范式:确保每列原子性 第一范式确保每个字段不可再分 如下表设计是否...
  • 谈谈需求分析规范化

    千次阅读 2017-01-01 22:40:55
    通过需求工程化来降低需求工程的复杂度,让需求分析人员有章可循,与用户形成共同语义环境,也就是需求分析的规范化
  • Jackson实现xml序列序列

    千次阅读 2019-08-23 18:25:32
    Jackson实现xml序列序列 本文介绍Jackson 2.X中提供的xml序列功能。仅介绍基本操作,不涉及复杂和自定义功能。 1. XmlMapper对象 XmlMapper是Jackson 2.x中提供我们实现xml序列的主要类,因此首先需要...
  • 此板条箱可根据规范对GraphQL配置进行序列。 GraphQLConfiguration是整个JSON文档的类型。 它包含顶层配置(在root字段中序列),还可以在projects字段中包含特定于项目的配置。 顶级配置和特定于项目的配置...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,542
精华内容 52,616
关键字:

反规范化