`
heipark
  • 浏览: 2077827 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据模型的范式化和反范式化简述

 
阅读更多

范式化模型

 范式化模型要求满足下面三大范式:

 

  1. 每个字段只包含最小的信息属性。如果某个字段名称为name-age,value为zhangsan-23,则这个模型不满足第一范式,需要将name-age分为两个属性name和age后才满足第一范式。
  2. (在满足第一范式基础上)模型含有主键,非主键字段依赖主键。比如订单这个模型,它的主键是订单ID,那么订单模型其它字段都应该依赖于订单ID,如商品ID和订单没有直接关系,则这个属性不应该放到订单模型而应该放到"订单-商品"中间表。
  3. (在满足第二范式基础上)模型非主键字段不能相互依赖。订单表(订单编号,定购日期,顾客编号,顾客姓名,……),初看该表没有问题,满足第二范式,每列都和主键列"订单编号"相关,再细看你会发现"顾客姓名"和"顾客编号"相关,"顾客编号"和"订单编号"又相关,最后经过传递依赖,"顾客姓名"也和"订单编号"相关。为了满足第三范式,应去掉"顾客姓名"列,放入客户表中。

反范式化模型

不满足范式的模型,就是反范式模型

 

总结

RDBMS模型设计过程中,常常使用范式约束我们的模型,但在NOSQL模型中则大量采用反范式。

 

  优点 缺点
范式化模型 因为数据没有冗余,更新容易 当查询设计很多关联模型(join)时,会导致查询性能低下
反范式化模型 数据冗余将带来很好的读取性能(因为不需要join很多表,而且通常反范式模型很少做更新操作) 需要维护冗余数据(但磁盘并不贵,对吗?)

 

P.S. 为了提升数据库性能,我们可以考虑索引、物化视图、缓存等技术,但反范式设计的确是很重要的一种手段。

 

 

参考文章:

 

用实例讲SQL三大范式

SQL三大范式

数据库 三范式最简单最易记的解释

数据库的反范式化(Denormalization)设计

--end

 

 

 

 

分享到:
评论

相关推荐

    新疆大学软院高级软件工程平时作业汇总

    1、简述研究生阶段如何提高自己的学习能力 2、简述造成软件危机的主要原因与应对策略 3、简述软件工程课程研究的主要内容 4、介绍目前主流的软件开发过程...9、简述数据规范化的概念,举例说明一范式、二范式、三范式

    自考:数据库系统原理-(考点).doc

    什么是关系模型的完整性约束检验 为了维护关系数据库中数据的完整性,在对关系数据库执行插入,删除和更新操作时 ,需要检验食肉满足实体完整化约束、参照完整性约束、用户定义完整性约束三类完整 性约束 5....

    阿里巴巴大数据之路-大数据领域建模综述.pdf

    特点 需要全⾯了解企业业务和数据。 实施周期⾮常长。 对建模⼈员的能⼒要求⾮常⾼。 建模步骤 ⾼层模型 ⼀个⾼度抽象的模型,描述主要的主题以及主题间的 关系,⽤于描述企业的业务总体概况。 中层模型 在⾼层模型...

    Java数据库编程宝典2

    1.4 数据库安全和数据控制语言 1.4.1 管理数据库用户 1.4.2 用户权限 1.4.3 用户组和角色 1.5 数据库体系结构 1.5.1 Java数据对象 1.5.2 两层模型 1.5.3 三层模型 1.6 小结 第2章 设计数据库 2.1 ...

    Java数据库编程宝典4

    1.4 数据库安全和数据控制语言 1.4.1 管理数据库用户 1.4.2 用户权限 1.4.3 用户组和角色 1.5 数据库体系结构 1.5.1 Java数据对象 1.5.2 两层模型 1.5.3 三层模型 1.6 小结 第2章 设计数据库 2.1 ...

    Java数据库编程宝典1

    1.4 数据库安全和数据控制语言 1.4.1 管理数据库用户 1.4.2 用户权限 1.4.3 用户组和角色 1.5 数据库体系结构 1.5.1 Java数据对象 1.5.2 两层模型 1.5.3 三层模型 1.6 小结 第2章 设计数据库 2.1 ...

    Java数据库编程宝典3

    1.4 数据库安全和数据控制语言 1.4.1 管理数据库用户 1.4.2 用户权限 1.4.3 用户组和角色 1.5 数据库体系结构 1.5.1 Java数据对象 1.5.2 两层模型 1.5.3 三层模型 1.6 小结 第2章 设计数据库 2.1 ...

    数据库系统概论.doc

    A、数据库 B、数据库管理系统 C、数据模型 D、软件工具 2、设关系R和S的元组个数分别为100和300,关系T是R与S的笛卡尔积,则T的元组个数是 ( ) A、400 B、10000 C、30000 D、90000 3、下面对于关系的叙述中,哪个...

    JPEG解码源程序(C++)

    色彩模型 2. DCT (离散余弦变换) 3. 重排列 DCT 结果 4. 量化 5. 0 RLE 编码 6. 范式 Huffman 编码 7. DC 的编码 解码过程简述 8. 一个数据单元 Y 的解码 9. JPG 文件(Byte 级)...

    数据库系统原理练习.doc

    在数据库系统中,视图的作用是简化操作、提高数据的独立性和数据的__________ _。 25.各场地的数据模型不同的分布式数据库系统称为___________DDBS。 三、简答题(本大题共10小题,每小题3分,共30分) 26.有学生...

    数据库系统原理A.pdf

    关系模型和层次、网状模型的最大差别是用________导航数据。 17.数据库系统中三级模式结构定义存放在________中。 18.如果关系模式R是1NF,且每个非主属性________函数依赖于候选 键,那么称R是第二范式的模式。 19....

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【多线程】简述synchronized 和java.util.concurrent.locks.Lock的异同? 90 【线程】ThreadLocal的作用 90 【Spring】什么是IOC和DI?DI是如何实现的 91 【Spring】spring中的IOC(控制反转)的原理 92 【Spring】...

    java面试题

    Struts2只是起到一个数据接收和转接的功能,就是Controller控制器,而传来数据的页面叫view显示层,Struts2将数据提交给进行处理的类叫Model模型层,专门进行数据处理和数据库的连接。 heap和stack有什么区别? 答:...

    蚂蚁金服面试分享.pdf

    1.自我介绍 2.项目情况: 1> 选择最为熟悉的一到两个项目说明,提及该项目中的难点问题,以及如何针对该项目 的开展2> 为什么做这个项目(避免... 数据库的范式 2> JVM内存模型及调优 3> 用过哪些算法?选择其一进行具

    Java常见面试题208道.docx

    81.简述 tcp 和 udp的区别? 82.tcp 为什么要三次握手,两次不行吗?为什么? 83.说一下 tcp 粘包是怎么产生的? 84.OSI 的七层模型都有哪些? 85.get 和 post 请求有哪些区别? 86.如何实现跨域? 87.说一下 JSONP ...

    asp.net知识库

    利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL...

Global site tag (gtag.js) - Google Analytics