数据库设计准则(第一、第二、第三范式说明)
I、关系数据库设计范式介绍1.1 第一范式(1NF)无重复的列
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
1.2 第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖]
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是属性完全依赖于主键。
1.3 第三范式(3NF)属性不依赖于其它非主属性[消除传递依赖]
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。
II、范式应用实例剖析
下面以一个学校的学生系统为例分析说明,这几个范式的应用。首先第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。
首先我们确定一下要设计的内容包括那些。学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话等信息。为了简单我们暂时只考虑这些字段信息。我们对于这些信息,说关心的问题有如下几个方面。
学生有那些基本信息
学生选了那些课,成绩是什么
每个课的学分是多少
学生属于那个系,系的基本信息是什么。
2.1 第二范式(2NF)实例分析
首先我们考虑,把所有这些信息放到一个表中(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)下面存在如下的依赖关系。
(学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话)
(课程名称) → (学分)
(学号,课程)→ (学科成绩)
2.1.1 问题分析
因此不满足第二范式的要求,会产生如下问题
数据冗余: 同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。
更新异常:
1)若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。
2)假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。
删除异常 : 假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。
2.1.2 解决方案
把选课关系表SelectCourse改为如下三个表:
学生:Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话);
课程:Course(课程名称, 学分);
选课关系:SelectCourse(学号, 课程名称, 成绩)。
2.2 第三范式(3NF)实例分析
接着看上面的学生表Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话),关键字为单一关键字"学号",因为存在如下决定关系:
(学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话)
但是还存在下面的决定关系
(学号) → (所在学院)→(学院地点, 学院电话)
即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。
它也会存在数据冗余、更新异常、插入异常和删除异常的情况。 (數據的更新,刪除異常這里就不分析了,可以參照2.1.1進行分析)
根据第三范式把学生关系表分为如下两个表就可以滿足第三范式了:
学生:(学号, 姓名, 年龄, 性别,系别);
系别:(系别, 系办地址、系办电话)。
总结
上面的数据库表就是符合I,II,III范式的,消除了数据冗余、更新异常、插入异常和删除异常。
特别鸣谢: 转自:http://www.blogjava.net/xzclog/archive/2009/01/04/249711.html
分享到:
相关推荐
以下是第一范式、第二范式和第三范式的详细解释: **第一范式(1NF)**: 1NF 是最基本的要求,它规定数据库表的每一列都应是不可分割的基本数据项。这意味着每个字段只存储单一值,不允许有复合字段。例如,在员工...
目前关系数据库有六种设计范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。每种范式都有其特点和应用场景,关系数据库的设计需要根据实际情况选择...
数据库范式讲解
#### 三、第三范式(3NF) **定义**: 第三范式(3NF)是在满足第二范式的基础上进一步的要求。它要求表中的非主属性不应该传递依赖于主键。换句话说,每个非主属性应该直接依赖于主键,而不是通过其他非主属性间接...
##### 第三范式(3NF): 消除非主属性的传递依赖 - **前提条件**:符合2NF。 - **定义**:在符合2NF的基础上,要求非主属性既不部分依赖于码,也不传递依赖于码。 - **示例**:如果一个课程的教材由教师决定,而教师...
在数据库设计中,三大范式是确保数据结构合理化和避免冗余的关键原则。以下是它们的详细解释: **第一范式(1NF)**: 1NF要求数据库表中的每个字段都是单一属性,不可再分。这意味着每个字段只能包含基本数据类型...
在 Java 面试中,数据库三范式是常见的考察点,本文将对三范式进行详细的解释,并以实例来讲解怎样将这些范式应用于实际工程。 一、第一范式(1NF) 第一范式的定义是:关系 R 中的每个属性都是不可分割的项。也...
中科院数据库范式方面教程,偏重数据库理论知识
SqlServer 第三范式是关系数据库逻辑设计的重要内容之一,其主要讲解函数关系、函数传递等概念,并对第一、二、三范式进行了详细的讲解。关系数据库的设计理论包括三个方面内容:数据依赖、范式、模式设计方法。核心...
数据库范式通常有三种:第一范式、第二范式和第三范式。下面将对每种范式进行详细的介绍。 第一范式 第一范式是最基本的范式,它要求关系模式 R 中所有属性的值域都是单纯域。也就是说,每个列都只能包含单个值,不...
"数据库范式的详细讲解" 数据库范式是数据库 normalization 的一个重要概念,指的是将关系数据库中的数据组织成一个优化的结构,以提高数据的存储效率、减少数据冗余和更新异常。数据库范式有多种,分别是第一范式...
本文将对数据库设计三范式进行通俗的解释,并以实例来讲解怎样将这些范式应用于实际工程。数据库设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入、删除和更新...
设计范式分为六个级别,但通常最关注的是前三个范式,即第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。 1. 第一范式(1NF):这是最基本的要求,规定数据库表的每一列都是不可分割的基本数据项,不允许列中...
过程式编程则着重于介绍顺序、选择和循环三种基本控制结构,以及如何利用它们处理复杂的数据流和控制流。通过案例分析和习题解答,学生不仅能够理论联系实际,还能深化对各种编程范式的理解。 “考试”文件夹中的往...
在关系数据库中,常见的设计范式分为六个级别,从第一范式到第六范式(1NF至6NF),其中前三者最为常见: 1. **第一范式(1NF)** - **定义**:要求表中的每一列都是不可分割的数据项,即列不可再分解。 - **目标...
配合《三范式 3NF 3范式 视频讲解 胡艺友 灰太狼.xlsx》这个文件,可能是视频讲解的补充资料,包含具体的案例分析或练习,帮助学习者巩固所学知识。 了解和掌握这些范式,不仅可以帮助数据库设计人员创建出逻辑清晰...
数据库教案之三大范式的讲解,用极通俗易懂的例子和语句让你瞬间秒懂三大范式的区别,搞不清三大范式的小伙伴可以下载来看看
综上所述,本教程基于订单数据实例,通过具体的案例来讲解数据库范式化的三个基础范式。对于希望掌握数据库设计和规范化理论的人来说,这是一个难得的入门级教材。通过阅读和实践本教程,读者可以对数据库结构有一个...
本文将深入解析数据库的几个主要范式,包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及BCNF(Boyce-Codd范式),并结合具体实例进行讲解。 首先,第一范式(1NF)是最基础的范式,要求数据库中的每一列...
4. 数据库基础讲解:数据库是数据存储和管理的重要工具,考生需要了解关系型数据库的基本原理,如SQL语言、ER模型、数据库设计(三范式)、索引和查询优化等。这部分内容可能会通过案例演示数据库的创建、操作和管理...