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

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


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

    一、规范化

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

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

    二、反规范化

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

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

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

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

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

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

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

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


    END
    展开全文
  • 应对数量过多,可以采用反规范化设计或者物理分区应对。 一、反规范化设计 规范化设计,范式等级越来越高,表越分越细,在消除冗余数据的同时,不得不关联多表才能获得完整的数据,有时会带来一点性能问题。因此反...

    应对数量过多,可以采用反规范化设计或者物理分区应对。

    一、反规范化设计

    规范化设计,范式等级越来越高,表越分越细,在消除冗余数据的同时,不得不关联多表才能获得完整的数据,有时会带来一点性能问题。因此反规范设计,也是一种对策。

    常见的反规范设计包括
    1、增加冗余列

    2、增加派生列
    增加的列,由同一表内的其他若干字段计算所得?

    3、重新组表
    就是调整表设计?

    4、表分割
    包括水平分割和垂直分割。
    1)水平分割,将记录分开存储。比如按月存储。
    2)垂直分割
    将表拆了,拆成若干个表

    二、物理分区

    数据库会将数据存储在不同的物理文件上。应该算水平分割吧。有3种方式:

    1、范围分区
    按某字段的值的范围划分分区

    2、散列分区
    根据字段的hash值进行均匀分布,尽可能的实现各分区所散列的数据相等。缺点是数据不容易管理。不容易管理的意思是数据存放没有什么规律,不不能DROP、SPLIT 以及MERGE分区。

    性能应该天然包含索引,不会有什么问题。

    3、列表分区
    根据某字段的具体值进行分区,而不是范围。

    展开全文
  • 数据库设计之反规范化

    千次阅读 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)

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

    千次阅读 2011-11-14 09:26:37
    【摘 要】数据库的规范化理论不仅仅是关系模式设计的理论指导和强有力的工具,对其它数据模型数据库的逻辑设计也 同样有理论意义,数据的规范化...性能降低,所以在实际应用时常常对数据库进行反规范化。文章陈述了
  • 1.数据库设计简述 数据库设计是把现实世界的商业模型与需求转换成数据库的模型的过程,它是建立数据库应用系统的核心问题。设计的关键是如何使设计的数据库能合理地存储用户的数据,方便用户进行数据处理。 ...
  • 关系数据库设计:谈谈规范化技术

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

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

    千次阅读 2015-09-08 15:55:21
  • 逻辑设计:模型校验,设计规范化(生成关系表/二维表) 什么是不好的关系模式   函数依赖 数据依赖:在计算机科学中,数据依赖是指一种状态,当程序结构导致数据引用之前处理过的数据时的状态。其中最重要的是...
  • 数据库反范式设计

    2020-08-12 18:07:37
    数据库中的数据规范化的优点是减少了数据冗余,节约了存储空间,相应逻辑和物理的I/O次数减少,同时加快了增、删、改的速度,...因此,有时为了提高某些查询或应用的性能而破坏规范规则,即反规范化(非规范化处理)。
  • 反规范化技术

    2011-11-14 16:31:06
    数据库的规范化理论不仅仅是关系模式设计的理论指导和强有力的工具,对其它数据模型数据库的逻辑...性能降低,所以在实际应用时常常对数据库进行反规范化。文章陈述了在数据库建模过程中进行反规范化的基本原则和方法。
  • In addition to specifically addressing database normalization in SQL Server, this article will also address ... 除了专门解决SQL Server中的数据库规范化问题之外,本文还将解决以下问题: Why is a data...
  • 4.4 对函数依赖 XY 的定义加以扩充 X 和 Y 可以为空属性集用表示那么 X Y的含义是什么 答据推理规则的自律可知 X 和 是平凡的 FD总是成立的 而 Y 表示在当前关系中 任意两个元组的 Y 值相等也就是当前关系的 Y 值...
  • 作者:胡浩民 关键词:数据库设计 添加时间:2007-1-722:48:17 数据库设计是把现实世界的商业模型与需求转换成数据库的模型的过程,它是建立数 据库应用系统的核心问题。设计的关键是如何使设计的数据库能合理地...
  • 从今天开始我们将会进入开发篇的学习,了解如何设计数据库的模式、管理表和操作表中的数据、理解数据库事务、索引、视图以及编写服务器端程序。首先,让我们来看看如何设计数据库的结构。 数据库设计流程 数据...
  • 数据库设计规范-通用版

    万次阅读 2018-12-25 18:08:43
    一、命名规范 1、总命名规范 1、不得使用数据库保留关键字,以及php/java等常用语言的保留关键字,或者可能成为关键字的单词作为完整命名。(对于一些疑似关键字的单词,可以在后面加一个下划线来避免,例如“key_...
  • mysql数据库管理规范(转载)

    千次阅读 2019-03-13 12:35:11
    例如:数据库规范化。如果数据库的体量较小的时候,不规范也不会有什么大问题。但是,当它的体量很大的时候,不规范的命名以及结构等,会为我们的操作带来极大的麻烦。很多公司对这些细节,都有着明...
  • oracle数据库编程规范

    2014-12-19 14:08:07
    第一部分 概述. 1 概述. 1.1 背景 1.2 简介 1.3 术语约定 1.4 适用范围 1.5 规范引用文件 第二部分 编程规范 2 书写规范 2.1 大小写风格 2.2 缩进风格 ...9.1 数据库设计及文档维护 ...11.7 反规范化
  • 数据库反规范化

    千次阅读 2008-11-22 22:08:00
    移动电话的用户每月都会...用户每次查询自己的月账单时,数据库查询时都要进行表连接,因为账单B并不包含用户的名字,所以必须通过关联A表取过来,如果在数据库设计时考虑到这一点,就可以在B表增加一个冗余字段存放用
  • 数据库规范化设计与反规范化设计是一对互相矛盾的设计思想。本文以数据规范化理论为出发点,从合理建立关系模型和提高操作性能角度,分析规范化和反规范化的优势和不足,并提出了几种合理有效的策略来平衡二者之间的...
  • 国内绝大多数院校用的王珊的《数据库系统概论》这本教材,某些方面并没有给出很详细很明确的解释,与实际应用联系不那么紧密,你有这样的疑问也是挺正常的。我教《数据库原理》这门课有几年了,有很多学生提出了和你...
  • mysql优化(三) 逆规范化三范式

    千次阅读 2017-01-06 11:48:45
    数据库设计时要满足规范化这个道理大家都非常清楚,甚至有数据库的三范式, 好吧, 这有点让我想起了机器人的三定律.但是否数据的规范化程度越高越好呢?这还是由实际需求来决定。 因为规范化越高,那么产生的关系就越...
  • 该项目尚未处于可用状态。 有关详细信息,请参阅的 wiki 和 github 问题 MTGC赫斯珀里德斯
  • 阿里- MySQL数据库规范

    千次阅读 2019-03-08 12:01:06
    10.【参考】如果有全球需要,所有的字符存储与表示,均以 utf-8编码,注意字符统计函数的区别。  说明:  SELECT LENGTH("轻松工作"); 返回为 12  SELECT CHARACTER_LENGTH("轻松工作"); 返回为 4  如果...
  • Java知识体系最强总结(2021版)

    万次阅读 多人点赞 2019-12-18 10:09:56
    大部分已完成 待整理: Java开发必会的编译知识(附支持对Lambda进行编译的工具) 一文读懂什么是Java中的自动拆装箱 Java的枚举类型用法介绍 类、枚举、接口、数组、可变参数 泛型、序列 序号 内容 链接地址 ...
  • 数据库——规范数据库设计及三大范式

    千次阅读 热门讨论 2020-10-12 17:32:57
    数据库——规范数据库设计 为什么需要设计数据库数据库比较复杂的时候,就需要设计 糟糕的数据库设计 数据冗余,浪费空间 数据库插入和删除都会麻烦、异常(屏蔽使用物理外键) 程序性能差 良好的数据库设计 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,248
精华内容 22,899
关键字:

数据库反规范化