`
静妙仙人
  • 浏览: 85881 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关系型数据库设计——范式的应用

阅读更多

E-R模型

   实体-联系数据模型的提出旨在方便数据库的设计。E-R数据模型采用了三个基本概念:实体集、联系集和属性,可以很好的描述现实世界的概念模型。

   在用E-R模型设计数据库时,可以避免两个缺陷:数据冗余和不完整。但是,为了更加合理、科学的设计数据库,又出现了规范化。

 

好的关系数据库设计的特点:

   关系数据库设计的目标是生成一组关系模式,使我们存储信息时避免不必要的冗余,并且让我们可以方便的获取信息。

   生成的模式集的好坏首先决定于E-R模型设计的质量。什么是好的关系数据库,好的关系数据库应该具有如下的特点:尽量减小数据冗余,消除异常,如更新异常、删除异常等。

   为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就是范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

   什么是数据冗余、更新异常和删除异常,下面通过一个例子来了解概念:

   以一个学校的学生系统为例分析说明,首先我们确定一下要设计的内容包括那些。学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话等信息。为了简单我们暂时只考虑这些字段信息,我们对于这些信息,说关心的问题有如下几个方面。

       学生有那些基本信息 ;

       学生选了那些课,成绩是什么 ;

       每个课的学分是多少 ;

       学生属于那个系,系的基本信息是什么。

    首先我们考虑,把所有这些信息放到一个表中(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)下面存在如下的依赖关系。

     (学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

数据冗余:

    同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。

更新异常:

  1)若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。

  2)假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。

删除异常 :

   假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。

关系型数据库中的范式:

   目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。

 

第一范式:

   所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。

   下面是一个未进行规范化的例子:


    先对表做一个简单说明,employeeId是员工的iddepartmentName是部门名称,job代表岗位,jobDescription是岗位说明,skill是员工技能,departmentDescription是部门说明,address是员工住址。

简单的说,第一范式就是每一个属性都不可再分。不符合第一范式则不能称为关系数据库。对于上表,可以看出Address是可以再分的,比如xxxxxx号,对其应用第一范式则需要将此属性分解到另一个表,如下:
 

 

 

 

第二范式:

   1NF的基础上,非码属性必须完全依赖于主键,在1NF基础上消除非主属性对主码的部分函数依赖。

   第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。

   这样做的目的是进一步减少插入异常和更新异常。在上表中,departmentDescription是由主键DepartmentName所决定,但却不是由主键EmployeeID决定的,所以departmentDescription只依赖于两个主键中的一个,故要departmentDescription对主键是部分依赖,对其应用第二范式如下表:



 

第三范式:

   1NF基础上,任何非主属性不依赖于其它非主属性,在2NF基础上消除传递依赖。

   第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。

   在上面经过第二范式化的表中,可以看出jobDescription是由job所决定的,则jobDescription依赖于job,具有传递依赖,不符合第三范式,对表进行第三范式后的关系图为:



 

BC范式:

   1NF基础上,任何非主属性不能对主键子集依赖,在3NF基础上消除对主码子集的依赖,即每个表中只有一个候选键。

   满足3NF的关系模式,每个非主属性既不部分依赖于码也不传递依赖于码。满足BCNF的关系模式,每个决定因素都含有码。 如果一个关系模式满足BCNF,则一定满足3NF

   二者的区别在于,BCNF消除了可能存在的主属性对主码的部分依赖和传递依赖。这个问题有点拗口,主要是要弄明白属性,主属性,主码,决定因素的概念。

   在上面的表中可以看出,每个员工的email都是唯一的(一般注册信息时,都只记录一个email),所以对其进行BC范式化后的关系图为:



 

第四范式:

R<UF>1NF,如果对于R的每个非平凡多值依赖X→→YY Í X),X都含有候选码,则R4NF

    简单的说,第四范式就是消除表中的多值依赖,也就是说可以减少维护数据一致性的工作。对于上面BC范式化的表,对于员工的skill,两个可能的值是“C#sqljavascrip”和“C#UMLruby”,可以看出,这个数据库属性存在多个值,这就可能造成数据库内容不一致的问题,比如第一个值写的是“java”而第二个写的是“javapython”,解决办法是将多值属性放入一个新表,则第四范式化的关系图如下:



 

而对于skill表则可能的值为:



 

规范化与性能的考虑:

   对上面数据库范式进行分解的过程不难看出,应用范式规划越高,表则越多,表多会带来很多问题:

   1. 查询时要连接多个表,增加了查询的复杂度;

   2. 查询时需要连接多个表,降低了数据库的查询性能;

   因此,并不是应用规范化程度越高,效果就越好,所以要根据具体情况而定。在设计关系型数据库时我们要考虑到需求的分析,数据库在将来会做哪些业务操作,根据实际情况进行规范化,才会达到性能和结构的平衡。

通常,第三范式已经很大程度上减少了数据冗余,并减少了造成插入异常、更新异常和删除异常了。 

  • 大小: 5.5 KB
  • 大小: 12 KB
  • 大小: 15.4 KB
  • 大小: 17.5 KB
  • 大小: 24 KB
  • 大小: 22 KB
  • 大小: 4.2 KB
8
2
分享到:
评论
2 楼 freezingsky 2012-11-11  
过分的追求更高级别的范式,是没有意义的。之所以会把范式分成几个,这就说明应该根据业务需求及一个系统运行方面的要求来选择,过份的强调使用更高级别的范式,并不是好事。
1 楼 bexiu5367 2012-11-10  
不错

相关推荐

    关系型数据库设计——银行业务管理系统.pdf

    《关系型数据库设计——银行业务管理系统》 设计一个银行业务管理系统需要深入了解银行的业务流程和数据需求。在本文中,我们将探讨系统的需求分析、实体关系(E/R)模型的建立,以及物理数据库模型的设计。 首先...

    数据库基础——Access 2003应用教程(第二版)-电子教案.rar

    Access是微软公司开发的一款关系型数据库管理系统,广泛应用于中小型企业及个人用户的数据存储和管理。在本教程中,你将学习到关于数据库设计的基本概念、Access 2003的操作界面和功能,以及如何通过它来创建、操作...

    数据库基础——幻灯片

    关系型数据库是最常见的类型,其中数据以表格的形式存储,每个表都有其特定的列(字段)和行(记录),并通过键(Key)进行关联。例如,一个员工数据库可能包括员工信息表、部门表等,通过员工ID这一键连接两者。 ...

    数据库课设——房屋中介管理系统

    关系型数据库基于表的结构,每个表代表一类实体,例如“房源”、“客户”、“经纪人”等,通过外键关联实现不同表之间的联系。 接着,我们来看“Database”目录。这通常包含数据库的结构设计,如ER图(实体关系图)...

    数据库基础——SQL语言全面学习

    SQL是结构化查询语言的缩写,它被设计用于管理和处理关系型数据库。SQL不仅可以创建、修改和查询数据库,还可以进行数据更新和删除操作。SQL是标准化的,大多数现代数据库管理系统(如Oracle、MySQL、SQL Server等)...

    数据库课设——超市收银管理系统.zip

    2. **关系型数据库理论**:运用ER模型(实体-关系模型)进行数据库设计,确保数据的一致性和完整性。这涉及到了外键约束、主键设计以及数据库范式(如第一范式、第二范式和第三范式)的应用。 3. **SQL语言**:用于...

    计算机等考三级数据库基础:数据库设计三大范式应用实例剖析.docx

    【计算机等考三级数据库基础:数据库设计三大范式应用实例剖析】 数据库设计是构建高效、稳定、易维护的信息系统的基础,而三大范式——第一范式(1NF)、第二范式(2NF)和第三范式(3NF)是确保数据库设计规范的...

    数据库课程设计学生选课管理系统

    SQL Server是一个强大的关系型数据库管理系统,提供高性能、可靠性和易用性,适合各种规模的项目。开发者可以使用SQL Server Management Studio(SSMS)进行数据库的管理和调试,同时,Eclipse通过JDBC(Java ...

    MLDN魔乐科技JAVA培训_Oracle课堂25_数据库设计范式 PowerDesigner工具.rar

    本资源"MLDN魔乐科技JAVA培训_Oracle课堂25_数据库设计范式 PowerDesigner工具.rar"聚焦于数据库设计的重要概念——范式,以及使用PowerDesigner工具进行设计的实践。 数据库设计范式是数据库理论中的核心概念,它...

    大三数据库课设——学籍管理系统前端.zip

    可能涉及到的数据库知识包括关系型数据库模型(如MySQL)、SQL语言(用于数据查询、插入、更新和删除)以及数据库设计,如ER模型、范式理论(1NF, 2NF, 3NF等)。 2. **前端开发技术**:压缩包中的“haah”可能是...

    数据库课程设计——人事管理系统.zip

    - ORM(Object-Relational Mapping):如Hibernate、MyBatis等,将对象模型映射到关系型数据库,简化数据库操作。 5. 软件工程方法 - 需求分析:明确系统功能需求,如员工信息管理、考勤记录、薪资计算等。 - ...

    数据库课件——数据库知识点,实验,习题.zip

    SQL Server作为一款广泛应用的关系型数据库管理系统,是许多企业和个人学习的重要对象。本课件旨在为学生提供全面的数据库知识,包括理论讲解、实验操作以及习题解答,帮助他们深入理解和掌握数据库的相关概念。 一...

    MySQL数据库:关系规范化.pptx

    关系模式设计的好坏直接影响关系型数据库设计的成败。将关系模式规范化是设计好关系型数据库的唯一途径。 未经规范化的数据库一般都有下述缺点: 较大的数据冗余,数据一致性差,数据修改复杂,对表进行更新,插入,...

    简洁、明晰!数据库设计三大范式应用实例剖析

    ### 数据库设计三大范式应用实例剖析 #### 引言 数据库设计的规范性对于确保数据的完整性和一致性至关重要。数据库设计范式是一系列规则,它们帮助开发者创建出既高效又易于维护的数据模型。遵循这些规范能有效...

    数据库设计三大范式应用实例剖析1

    数据库设计的三大范式——第一范式(1NF)、第二范式(2NF)和第三范式(3NF)——是构建高效、无冗余、易于维护的数据库的基础。它们确保了数据的一致性和完整性,避免了数据异常,如插入异常、删除异常和更新异常...

    “做中学”在计算机理论教学中的应用——以Oracle数据库设计范式教学为例.pdf

    “做中学”在计算机理论教学中的应用——以Oracle数据库设计范式教学为例.pdf

    数据库应用技术——SQL Server 2000简明教程源代码

    在数据库领域,SQL Server 2000是微软公司推出的一款关系型数据库管理系统,它提供了强大的数据存储、处理和分析功能。SQL(Structured Query Language)是用于管理关系数据库的语言,其语法包括数据查询、数据更新...

    数据库课程设计——图书管理系统.docx

    - **概述**:SQL Server 2008 R2 是 Microsoft 推出的一款强大的关系型数据库管理系统,广泛应用于企业级应用开发中。 - **特点**: - **非过程化语言**:SQL 的非过程化特性使得用户能够专注于数据的查询和处理...

    数据库应用技术——SQL Server 2000简明教程电子教案

    SQL Server 2000是微软公司推出的一款关系型数据库管理系统(RDBMS),在20世纪末至21世纪初广泛应用于企业级数据存储与管理。 本教程可能涵盖了以下几个核心知识点: 1. **SQL基础知识**:SQL(Structured Query ...

    数据库应用技术——SQL Server 2008篇(第3版)

    在数据库应用技术领域,SQL Server 2008是一款广泛使用的商业关系型数据库管理系统,由微软公司开发。本版教材涵盖了以下几个核心知识点: 1. **数据库基础知识**:包括数据库的定义、类型、关系模型、ER模型、数据...

Global site tag (gtag.js) - Google Analytics