数据库范式设计

软件开发过程中,数据库的设计是非常重要的。可以说,良好的数据库设计,是对用户需求的理解的精准定位。它不仅能够使得软件开发起来非常便捷,而且还能够使软件系统高效运行,同时,为日后的维护或者更换数据库提供便利。

  在最近开发系统的过程中,感觉收获最大的也是关于数据库的操作。最初开发机房收费系统的时候,由于没有经验,而且懂得的知识也非常少,数据库的设计根本谈不上,就是感觉到数据库中缺少某些字段的时候,直接在数据库表中去修改字段。这样就为自己徒增了很多工作量,相关的代码需要一处一处去修改。

  开发.NET版机房收费系统的数据库设计明显好多了,由于充分了解了需求,数据库设计当然比上一次好上很多。不过回头去看,数据库的设计还是存在很多的缺陷。表中仍然存在着大量的冗余字段,增删改后也会出现发生一些异常。

  在牛腩新闻发布系统中,由于系统非常小,对于数据库的操作也就那两下子,复杂也到不了哪里去。不过尽管如此,感觉牛老师的数据库设计还是非常规范的。类别、评论、新闻分别放在三个表中,完全没有冗余数据。

  废话太多了,开始步入正题了。良好的设计能够使程序员的工作事半功倍。

  首先,先来看官方解释:

  第一范式是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即是实体的某个属性不能有多个值或者不能有重复的属性。

  第二范式是指数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖。

  第三范式数据库表中不存在非关键字段对任一候选关键字段的传递函数依赖。

  简单来说,第一范式是讲数据库表中数据的原子性,数据不可再分,只要是关系型数据库都必须首先满足第一范式。看下图例子:图1中三个字段不可再分,故满足第一范式;图2将专业、年级、班级三个字段放在一个字段里面,就不符合第一范式了。

          

  下面再来看机房收费系统中的一个表设计——学生基本数据表。

图A

  图A中由于每一个字段都不可再分,故它是满足第一范式的。然而这样的设计就会产生大量的冗余字段。如果一个学生注册两个卡,那么该学生的信息就需要重复两次。

  第二范式就解决了上述问题。它强调其属性必须完全依赖主键,实体的属性不能仅仅依赖主关键字的一部分属性。如果存在部分依赖关系,那么这个属性和主关键字相应部分应该分离出来形成一个新的实体,实体与原始体之间是一对多的关系。

  像上面例子中,很显然主键是卡号和学号联合做主键,其中姓名、性别、系别、专业、年级、班级都只与学号有关,只依赖学号,而不依赖卡号,这样就不符合第二范式了。

  我们的根据第二范式的要求,将其与学生相关的信息分离出来,修改后,我们可得一下两个表:

图B

  然而,仅仅满足第二范式的数据库是远远不够的,满足第二范式,仍然可能会出现传递依赖。图B学生表中系别与专业存在传递关系。假如小红和小明的系别都是数信学院,专业都是数学专业,那么这样数据库中系别就重复了两次,增加了冗余字段。

 第三范式保证了同一类事物分在一个表中,消除了传递依赖的现象。我们再根据第三范式的设计要求,将其学生表在进行分离,得到下面的表:

图C

  下面给出图C的数据库关系图:

  好的数据库设计,是软件开发中非常重要的一步。三范式设计只是一个标准,对于基本表的设计,建议大家尽量按照三范式的要求进行设计;而对于临时表的设计,我们可以适量的增加一些冗余字段,毕竟单一表的查询检索速度比较快,提高了系统性能。

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-29 23:56:00

数据库范式设计的相关文章

数据库的范式和反范式设计

范式与反范式 1.1  范式 当设计关系型数据库时,需要遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式(Normal Form),越高的范式数据库冗余越小.应用数据库范式可以带来许多好处,但是最主要的目的是为了消除重复数据,减少数据冗余,让数据库内的数据更好的组织,让磁盘空间得到更有效的利用.范式的缺点:范式使查询变的相当复杂,在查询时需要更多的连接,一些复合索引的列由于范式化的需要被分割到不同的表中,导致索引策略不佳. 1.1.1  什么是第一.二.三.BC范

数据库表设计的三范式

数据库范式1NF 2NF 3NF BCNF(实例)     设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合.构造数据库必须遵循一定的规则.在关系数据库中,这种规则就是范 式.关系数据库中的关系必须满足一定的要求,即满足不同的范式.目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式 (3NF).第四范式(4NF).第五范式(5NF)和第六范式(6NF).满足最低要求的范式是第一范式(1NF).在第一范式的基础上进一步满足更多 要求的称为第

数据库范式1NF 2NF 3NF BCNF

(转自:http://www.itisedu.com/phrase/200604241410105.html) 设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合.构造数据库必须遵循一定的规则.在关系数据库中,这种规则就是范式.关系数据库中的关系必须满足一定的要求,即满足不同的范式.目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).第四范式(4NF).第五范式(5NF)和第六范式(6NF).满足最低要求的范式是第一范式(1NF)

【转载】数据库范式

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

系统-数据库课程设计 在线等

问题描述 数据库课程设计 在线等 一.设计内容与设计要求1.设计内容:针对具体的问题,完成从系统的需求分析.数据库的概念设计.数据库的逻辑设计,到数据库实现等设计过程,最终实现一个较为完整的反映应用需求的数据库系统.下面是各个设计阶段的具体内容.⒈ 系统需求分析画出系统的数据流图,写出较为详细的数据字典.⒉ 数据库的概念设计画出局部E-R图和全局E-R图.⒊ 数据库的逻辑设计将概念设计阶段产生的全局概念模式(E-R图)转换成初始的关系模式.对关系模式进行规范化处理.根据设计所要求的规范级别,逐一

关系数据库的范式和反范式设计

关于范式 Normal Form 范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法.数据库的设计范式是数据库设计所需要满足的规范.只有理解数据库的设计范式,才能设计出高效率.优雅的数据库,否则可能会设计出错误的数据库. 目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).巴斯-科德范式(BCNF).第四范式(4NF)和第五范式(5NF,还又称完美范式).满足最低要求的叫第一范式,简称1NF.在第一范式基础上进一步满足一些要求的为

细说数据库范式

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

数据库字段设计经验谈

数据库的设计必须符合三个范式(极端要求常用高速时考虑单独设置记录表除外). 用整形代替浮点型float,DECIMAL等,有的语言浮点计算是不精准的,如int存最小单位.金额用分, 重量用克等 Java代码   //价格分   public function getPriceFen($priceFen)   {       return max(intval($priceFen), 1);   }   数据库名称应该由概述项目内容的小写英文名词组成,以下划线分隔单词,避免跨平台时可能出现的大小写

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

3                 范式的两面:天使与魔鬼 有人说:掌握了数据库范式你就是数据库设计高手了!! 呵呵,成为高手看来也很简单的啊:)但此话对了一半,掌握数据库范式可以算一般高手,因为毕竟能够掌握范式并应用的人不算很多:但算不上高高手,为什么呢?因为范式不是万能的,也有自己的适应范围和局限性,如果到处不加原则和场合的使用,它很可能就是一个带给你梦魇的魔鬼! 首先我们看看数据库范式的目的是什么?范式的主要目的有三个: 1)       减少数据冗余 2)       优化表结构 3)