数据库范式:掀起你的盖头来(3)

3                 范式的两面:天使与魔鬼

有人说:掌握了数据库范式你就是数据库设计高手了!!

呵呵,成为高手看来也很简单的啊:)但此话对了一半,掌握数据库范式可以算一般高手,因为毕竟能够掌握范式并应用的人不算很多;但算不上高高手,为什么呢?因为范式不是万能的,也有自己的适应范围和局限性,如果到处不加原则和场合的使用,它很可能就是一个带给你梦魇的魔鬼!

首先我们看看数据库范式的目的是什么?范式的主要目的有三个:

1)       减少数据冗余

2)       优化表结构

3)       避免操作异常

从以上三个目的我们可以看出,范式的主要作用是和数据存储有关的,它要解决的问题是数据存储的问题。为了解决这些问题,范式的最终动作其实就是将表拆分,将表拆成更多的表。

但是我们在实际应用过程中,不可能把数据存起来就不管了,而是要存要取,否则存起来有什么意义呢:)既然要涉及到数据读取,那么数据读取的性能当然也是要重点关注的;另外,程序是人写的,对于人来说,表是否容易理解、是否容易使用,也是相当重要的。如果表的数量很多、关系太复杂,使用的时候很容易出错。下面我们看看范式在这两点上的限制。

范式的限制主要有如下几个:

1)  表数量增多会带来更多的连接查询,而连接查询的效率肯定比不上单表查询;

2)  表数量增多会导致表的关系复杂,SQL语句会更加难写,表的关系也会更加难理解;

基于以上两个限制,数据库设计中还有一个概念叫做“反范式”,反范式很简单,从字面意思上理解即可,就是范式的反操作。下面是简单的对比:

------------范式------------------------------   反范式----------------------

目的   解决存储问题                解决性能问题和使用问题

动作   拆表                            合表

效果   存储优化                        性能优化

-------------------------------------------------------------------------------------

看到这里,可能会有人问:那是不是没有范式就是性能最好的呢?非也,因为影响性能的除了连接查询外,还有一个关键因素就是“锁”,如果所有信息都在一张表里面,那么对这张表的所有操作之间的冲突会非常厉害,反而会导致性能急剧下降。

 

因此,数据库设计最终应该是在“范式”和“反范式”之间进行权衡,找到最佳的平衡点,只有这样才是一个真正的数据库设计高手!!

 

到此数据库范式的盖头已经被我们全部掀开,当然最后发现这既不是一个俊媳妇,也不是一个丑媳妇,只是一个可以和我们过设计日子的普普通通的媳妇而已:)

 

====================================================================

欢迎大家交流指证!!!可以直接在博客中发表意见,也可以直接给我发邮件:yah99_wolf@yahoo.com.cn

时间: 2024-12-31 00:18:28

数据库范式:掀起你的盖头来(3)的相关文章

数据库范式:掀起你的盖头来(1)

1                 介绍 凡是做过数据库设计的,只要不是大菜鸟,听到范式两个字,马上就会在脑海中浮现1NF,2NF,3NF,BCNF这些术语,但是若要大家详细的将这几个东东的专业定义描述出来......呵呵,至少大部分人都会晕的,什么功能依赖.函数依赖,~!@#¥%--&*,my god!反正我是记不住:)   但既然上了IT这条贼船,就无法避免和数据库设计打交道,丑媳妇总是要见公婆的:)既然无法避免,那就让我们勇敢的面对,揭开数据库范式的神秘面纱,看看到底是一个丑媳妇还是一个俊

【转载】数据库范式

数据库范式:掀起你的盖头来(1)  [介绍]        凡是做过数据库设计的,只要不是大菜鸟,听到范式两个字,马上就会在脑海中浮现1NF,2NF,3NF,BCNF这些术语,但是若要大家详细的将这几个东东的专业定义描述出来......呵呵,至少大部分人都会晕的,什么功能依赖.函数依赖,~!@#¥%--&*,my god!反正我是记不住:)        但既然上了IT这条贼船,就无法避免和数据库设计打交道,丑媳妇总是要见公婆的:)既然无法避免,那就让我们勇敢的面对,揭开数据库范式的神秘面纱,看

初识数据仓库(Data Warehousing)-“掀起你的盖头来”

数据 初识数据仓库(Data Warehousing)-"掀起你的盖头来"我在这里就说说我初学的一些认识和看法,希望这些能够作为一些简单的介绍给那些初学的朋友们,更希望起到抛砖引玉的效果.    说到数据仓库,我们了解一下他产生的背景.自从DBASEⅢ(dBase是dos年代发展过来得数据库管理程序,先归属于Borland旗下)的兴起,数据库的应用进入了个人计算机,使得中小企业也纷纷进入商业性的数据库应用阶段.这时的数据库应用主要是进行数据的记录,我们称这类为OLTP(线上事务处理)数

《Android 应用案例开发大全(第3版)》——第1.2节掀起Android的盖头来

1.2 掀起Android的盖头来 自从Android发布以来,越来越多的人关注Android的发展,越来越多的开发人员在Android系统平台上开发应用.那么,是什么使Android备受青睐.在众多移动平台中脱颖而出呢? 1.2.1 选择Android的理由 Android基于Linux技术开发,由操作系统.用户界面和应用程序组成,允许开发人员自由获取.修改源代码,也就是说这是一套具有开源性质的移动终端解决方案,具有开放性.平等性.无界性.方便性以及硬件的丰富性等特点.下面对以上各个优点进行简

《Android 应用案例开发大全(第3版)》——第1章,第1.2节掀起Android的盖头来

1.2 掀起Android的盖头来自从Android发布以来,越来越多的人关注Android的发展,越来越多的开发人员在Android系统平台上开发应用.那么,是什么使Android备受青睐.在众多移动平台中脱颖而出呢? 1.2.1 选择Android的理由Android基于Linux技术开发,由操作系统.用户界面和应用程序组成,允许开发人员自由获取.修改源代码,也就是说这是一套具有开源性质的移动终端解决方案,具有开放性.平等性.无界性.方便性以及硬件的丰富性等特点.下面对以上各个优点进行简单介

数据库范式

 数据库范式那些事:  http://www.cnblogs.com/careyson/archive/2010/02/16/1668803.html 理解数据库式: http://www.cnblogs.com/myaspnet/archive/2011/06/15/2081652.html 细说数据库范式: http://www.cnblogs.com/kissknife/archive/2009/10/26/1590029.html       对表进行第一范式(1NF)     如果一个

细说数据库范式

理论性的东西,往往容易把人人都看得懂的东西写成连鬼都看不懂,近似于主任医生开的药方.从前学范式的时候,把书中得概念翻来覆去看,看得痛心疾首深恶痛绝,再加上老师深切误导,最后一塌糊涂.借助网络资源,自己写了一篇,自己是看懂了,希望对大家也有所帮助,有错误帮忙指正.   数据库范式(Normal forms):是用于规范关系型数据库设计,以减少谬误发生的一种准则.   1NF(first normal form): Table faithfully represents a relation and

数据库范式解析

范式的作用:消除数据冗余.更新异常.插入异常和删除异常.  1NF  如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF. 数据库表中的字段都是单一属性的,不可再分.这个单一属性由基本类型构成,包括整型.实数.字符型.逻辑型.日期型等. 不满足第一范式就不是关系型数据库! 2NF  若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF 表中的属性必须完全依赖于全部主键,而不是部分主键.所以只有一个主键的表如果符合第一范式,那一定是第二范式. 3NF 在第二范

浅述SQL Server的语句类别 数据库范式 系统数据库组成

前言 终于等到这一天,我要开始重新系统学习数据库了,关于数据库这块,不出意外的话,每天会定时更新一篇且内容不会包含太多,简短的内容,深入的理解. SQL语句类别 SQL语句包括以下三个类别 (1)数据定义语言(Data Definnition Language)即DDL,我们数据最终从何而来,当然首先必须得建立表,所以它包括CREATE.ALTER.DROP表. (2)数据操作语言(Data Manipulation Language)即DML,我们对数据需要进行什么操作,当然无非就是增删改查,