首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

规范化-数据库设计准则

2012-10-07 
规范化-数据库设计原则简介:?关系数据库设计的核心问题是关系模型的设计。本文将结合具体的实例,介绍数据库

规范化-数据库设计原则

简介:?关系数据库设计的核心问题是关系模型的设计。本文将结合具体的实例,介绍数据库设计规范化的流程。

<!--<p width="20" title="点击评分 1 星" alt="规范化-数据库设计准则" src="//img.reader8.com/uploadfile/jiaocheng/20140147/2855/2014012800554933432.gif">规范化-数据库设计准则规范化-数据库设计准则规范化-数据库设计准则规范化-数据库设计准则 平均分 (共 35 个评分 )<script type="text/javascript"></script><!-- Rating_Area_End -->

?

<!-- dW_Summary_Area_END --><!-- CONTENT_BODY --><!-- MAIN_COLUMN_BEGIN --><!-- Related_Searches_Area_And_Overlays_Begin --><!-- MAIN_COLUMN_CONTAINER_BEGIN -->

表1-1
?规范化-数据库设计准则

考察表1-1,我们可以看到,这张表一共有六个字段,分析每个字段都有重复的值出现,也就是说,存在数据冗余问题。这将潜在地造成数据操作(比如删除、更新等操作)时的异常情况,因此,需要进行规范化。


4. 删除异常:如果一个员工 200003, Kevin 离职了,要将该员工的记录从表中删除,而此时相关的Salary信息 C 也将丢失, 因为再没有别的行纪录下 Salary C的信息。

Delete from sample where EMYNUM = 200003
Select distinct SALCATEGORY, SALPACKAGE from SAMPLE

因此,我们需要将存在部分依赖关系的主属性和非主属性从满足第一范式的表中分离出来,形成一张新的表,而新表和旧表之间是一对多的关系。由此,我们得到:




表1-2
?规范化-数据库设计准则

表 1-3



同时,我们把表1-1的主键,也就是表1-2和表1-3的各自的主键提取出来,单独形成一张表,来表明表1-2和表1-3之间的关联关系:


表 1-4
?规范化-数据库设计准则

这时候我们仔细观察一下表1-2, 1-3, 1-4, 我们发现插入异常已经不存在了,当我们引入一个新的项目 TPT 的时候,我们只需要向表1-2 中插入一条数据就可以了, 当有新人加入项目 TPT 的时候,我们需要向表1-3, 1-4 中各插入一条数据就可以了。虽然我们解决了一个大问题,但是仔细观察我们还是发现有问题存在。



表 1-6
?规范化-数据库设计准则

这时候如果 200003 Kevin 离开公司,我们只需要从表 1-5 中删除他就可以了, 存在于表1-6中的Salary C信息并不会丢失。但是我们要注意到除了表 1-5 中存在 Kevin 的信息之外, 表1-4中也存在 Kevin 的信息, 这很容易理解, 因为 Kevin 参与了项目 100001, TPMS, 所以当然也要从中删除。

至此,我们将表1-1经过规范化步骤,得到四张表,满足了三范式的约束要求,数据冗余、更新异常、插入异常和删除异常。

在三范式之上,还存在着更为严格约束的BC范式和四范式,但是这两种形式在商业应用中很少用到,在绝大多数情况下,三范式已经满足了数据库表规范化的要求,有效地解决了数据冗余和维护操作的异常问题。

结束语

在本文描述的过程中,我们通过结合实例的方法,通俗地演绎了数据表规范化的过程,并展示了在此过程中数据冗余、数据库操作异常等问题是如何得到解决的。

在具体的工程应用中,运用数据库规范化的方法来设计数据库表,将是具有现实意义的。

<!-- CMA ID: 125680 --><!-- Site ID: 10 --><!-- XSLT stylesheet used to transform this file: dw-document-html-6.0.xsl -->

参考资料

Database Normalization Basics:数据库规范化基础原则

Normalization principles:数据库规范化原则和范式定义

作者简介

陈博,目前为浙江大学计算机科学与技术学院研究生一年级在读,硕士研究方向为智能软件工程,导师为应晶教授。

蒋韬,目前是 IBM 上海软件开发中心工具开发组的软件工程师,主要负责基于 J2EE 构架的翻译工具的开发和整合。2004 年毕业于复旦大学计算机系, 在进入 IBM 之前一直从事构件,构架整合和工具开发方面的工作,在 J2EE, DB2, XML, Web Services, IRUP, XP 方面都有丰富的项目经验。

热点排行