文章目录

  • 一、规范化
  • 二、反规范化

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

一、规范化

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

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

二、反规范化

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

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

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

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

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

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

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

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


END

数据库设计之规范化和反规范化相关推荐

  1. 数据库设计之范式与反范式

    范式设计 什么是范式? 范式来自英文Normal Form,简称NF.要想表之间设计-个好的关系,必须使关系 满足一定的约束条件,此约束已经形成了规范,分成几个等级,一级比一级要求 得严格.满足这些规 ...

  2. 数据库设计:范式与反范式

    三范式 第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性: 第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主 ...

  3. 数据库安全-分布式数据库-数据仓库技术-反规范化技术-大数据

    继续肝吧,本章主要讲的数据库安全,分布式数据库,数据仓库技术,反规范化技术,大数据,概念性的东西比较多. 1.数据库安全 考的不多,了解下补充自己的知识. 静态转储:即冷备份,指在转储期间不允许对数据 ...

  4. 数据库系列(5)-数据库设计之规范化理论

    一.概述 数据库标准化是EF Codd在1970年代开发的,是许多数据库设计的标准要求.规范化是一种可以帮助您避免数据异常和管理数据的其他问题的技术. 目的: 消除数据冗余(因此使用更少的空间) 使更 ...

  5. 第4章 数据库设计---数据库原理及应用

    目录 一.数据库设计方案 1. 数据库应用架构设计:单用户.集中.CS.分布 2. 数据库结构设计:概念.逻辑.物理 3. 数据库应用访问方式设计:访问方式 数据库结构设计模型 概念数据模型:概念,不 ...

  6. mysql数据库设计学习---数据库设计规范化的五个要求

    一:表中应该避免可为空的列: 二:表不应该有重复的值或者列: 三: 表中记录应该有一个唯一的标识符  在数据库表设计的时候,数据库管理员应该养成一个好习惯,用一个ID号来 唯一的标识行记录,而不要通过 ...

  7. MYSQL中什么是规范化_数据库设计 - 什么是规范化(或规范化)?

    规范化基本上是设计数据库模式,以避免重复和冗余数据. 如果某些数据在数据库中的多个位置重复,则存在在一个位置而不是另一个位置更新的风险,从而导致数据损坏. 从正常形式到正常形式有许多归一化水平. 每种 ...

  8. 规范化-数据库设计原则

    摘要 关系型数据库是当前广泛应用的数据库类型,关系数据库设计是对数据进行组织化和结构化的过程,核心问题是关系模型的设计.对于数据库规模较小的情况,我们可以比较轻松的处理数据库中的表结构.然而,随着项目 ...

  9. MySQL数据库三段式_对数据库模式进行规范化处理,是在数据库设计的什么阶段?...

    对数据库模式进行规范化处理,是在数据库设计的"逻辑设计阶段".数据库的逻辑结构设计就是把概念结构设计阶段设计好的基本实体-关系图转换为与选用的数据库管理系统产品所支持的数据模型相符 ...

最新文章

  1. C/C++使用socket实现server和client
  2. 30段极简Python代码:这些小技巧你都Get了么?
  3. 如何让某些用户对Marketing Cloud的contact数据只能实施只读操作
  4. python中的保护对象数据
  5. 选择排序(直接选择、堆)
  6. SpringBoot精通系列-开发案例之配置Druid数据库连接池
  7. 几个预防并发搞垮下游服务的方法
  8. UEFI+GPT安装Win10和RHEL6.5双系统
  9. Python JSONPath示例
  10. Reinforcement Learning by David Silver 学记记录
  11. Quick BI 支持多种数据源进行多维分析 1
  12. 【论文解读】MmWave Radar and Vision Fusion for Object Detection in Autonomous Driving: A Review
  13. Ubuntu20+TendaU12驱动离线安装
  14. 小米4android8.0root,小米小米 5X(安卓8.0)手机完美获取root教程,最强root工具,亲测可用!...
  15. Unity Gyro之使用陀螺仪实现简单VR全景环视效果
  16. No virtual method
  17. 10月20日前!武汉市科技成果转化中试平台(基地)备案申报条件及流程梳理
  18. 【动态规划 floyd】SPOJ ACPC13
  19. python 实现轨迹数据可视化
  20. [玩转编程] C语言+模拟器制作简单脚本

热门文章

  1. 产生正态分布(高斯分布)随机数 C语言实现
  2. NAS信令学习笔记 ——IP地址分配
  3. 景丰uds1_支持DSd128-景丰UDS-1网络播放机_≡ 家 电 类 ≡_Hi-Fi 音响_家电论坛 -
  4. 使用python-open3d读取pcd,bin格式的点云,并显示
  5. 程序员如何轻松引起猎头公司的注意,并拿到高薪offer,逃不过这8条定律!
  6. 微信环境iOS 长按图片无法保存
  7. JAVA SE基础知识总结
  8. Spring Bean详细讲解 什么是Bean?
  9. 在windows10系统中,用qemu软件创建ARM构架虚拟机
  10. opencv python3 文本区域识别_OpenCV MSER检测文本区域 – Python