`

数据库三范式实例

 
阅读更多
第一范式:消除组中的重复,也就是说列中是否存储了其他列中的信息(字段不可再分)
第二范式:消除部分依赖列,也就是说是否有依赖于一部分主键的列 (非主键字段完全依赖主键字段)
第三范式:消除非依赖列,是否有依赖于非主键的列 (消除传递依赖)

例如:

学生信息表

学生ID,姓名,地址,城市,邮政编码,所在年级,性别,参加课程,课程级别,课程ID,名称,描述,教师ID,教

师姓名,时间表,地点,先决课程

如果这么多字段在同一个表里,那么这种设计会被认为没有正规化,这里有很多重复的信息,为了把数据库设计转化

为第一范式,需要把信息分成两个表,并在两个表之间建立关系,如下:

学生表
学生ID,姓名,地址,城市,邮政编码,所在年级,性别

学生课程表
学生ID,课程ID,名称,描述,教师ID,教师姓名,时间表,地点


通过把学生从课程中分离,我们可以消除由不同的逻辑组引入的重复,我们必须满足消除信息重复的目标。接下来,

从第一范式到第二范式,我们需要消除表中仅仅部分依赖主键的列,这些列应该被分割到不同的表中。在学生课程表

中,许多列仅仅依赖于课程ID,而不依赖于学生ID,这个表的主键是学生ID+课程ID,因此把这个表分成两个表,如下



学生课程表
学生ID,课程ID,课程级别


课程表
课程ID,名称,描述,教师ID,教师姓名,先决课程,时间表,地点

既然对主键的部分依赖已经消除,数据库就已经满足第二范式了。为了进一步把数据库转化为第三范式,需要把表中

对构成主键的列的不依赖部分分离出去,教师姓名依赖于教师ID,而不依赖于课程ID,索引,这些列应该被分离以形

成一个新表,如下:

教师表
教师ID,教师姓名

最终的课程表如下
课程ID,名称,描述,教师ID,时间表,地点




归结起来3句话:

1NF:字段不可分;
2NF:有主键,非主键字段依赖主键;
3NF:非主键字段不能相互依赖;

解释:
1NF:原子性 字段不可再分,否则就不是关系数据库;
2NF:唯一性 一个表只说明一个事物;
3NF:每列都与主键有直接关系,不存在传递依赖;

不符合第一范式的例子(关系数据库中create不出这样的表):

表:字段1, 字段2(字段2.1, 字段2.2), 字段3 ......

存在的问题: 因为设计不出这样的表, 所以没有问题;

不符合第二范式的例子:

表:学号, 姓名, 年龄, 课程名称, 成绩, 学分;

这个表明显说明了两个事务:学生信息, 课程信息;

存在问题:

数据冗余,每条记录都含有相同信息;
删除异常:删除所有学生成绩,就把课程信息全删除了;
插入异常:学生未选课,无法记录进数据库;
更新异常:调整课程学分,所有行都调整。

修正:

学生:Student(学号, 姓名, 年龄);

课程:Course(课程名称, 学分);

选课关系:SelectCourse(学号, 课程名称, 成绩)。

满足第2范式只消除了插入异常。


不符合第三范式的例子:

学号, 姓名, 年龄, 所在学院, 学院联系电话,关键字为单一关键字"学号";

存在依赖传递: (学号) → (所在学院) → (学院地点, 学院电话)

存在问题:

数据冗余:有重复值;

更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况

删除异常

修正:
学生:(学号, 姓名, 年龄, 所在学院);
学院:(学院, 地点, 电话)。
分享到:
评论
2 楼 j2eemylove 2011-10-25  
yufeng0471 写道
通常,范式越高,设计的结构性越好,性能也在逐渐的下降。为了提高性能,也就有了反范式,适当的冗余,以空间换取时间来提高性能。好的设计和高性能是矛盾的,重要的是怎么取一个平衡点。

谢您高见!
1 楼 yufeng0471 2011-10-15  
通常,范式越高,设计的结构性越好,性能也在逐渐的下降。为了提高性能,也就有了反范式,适当的冗余,以空间换取时间来提高性能。好的设计和高性能是矛盾的,重要的是怎么取一个平衡点。

相关推荐

    数据库三大范式详解

    数据库范式1NF 2NF 3NF BCNF(实例) 设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系...

    Java面试中数据库三范式详解

    在 Java 面试中,数据库三范式是常见的考察点,本文将对三范式进行详细的解释,并以实例来讲解怎样将这些范式应用于实际工程。 一、第一范式(1NF) 第一范式的定义是:关系 R 中的每个属性都是不可分割的项。也...

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

    数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,...第三范式:在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。

    数据库设计范式最好的讲解

    目前关系数据库有六种设计范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。每种范式都有其特点和应用场景,关系数据库的设计需要根据实际情况选择...

    关系数据库三个范式理解实例

    关系数据库三个范式理解实例,举例,20个字补丁

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

    ### 数据库设计三大范式应用实例剖析 #### 引言 数据库的设计范式是指一系列用于指导数据库设计的规范化准则,其目的是确保数据的完整性、减少数据冗余,并提高数据库的操作效率。遵循这些范式可以避免在数据库...

    数据库设计的第一范式第二范式第三范式描述和实例

    数据库设计的第一范式第二范式第三范式描述和实例 数据库设计的范式是指数据库设计时需要遵循的一些基本规则,以确保数据库的结构清晰、简洁、高效。常见的数据库设计范式包括第一范式(1NF)、第二范式(2NF)、第...

    数据库三范式.pdf

    数据库三范式经典实例解析 数据库设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入、删除和更新操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦...

    数据库系统范式教程数据库系统范式教程.ppt

    数据库系统范式教程 数据库系统范式是数据库系统设计的基础,它们是关系数据库设计的标准,旨在解决数据冗余、更新异常、插入异常和删除异常等问题。 1.1 数据库系统原理 数据库系统设计的主要目标是解决数据...

    数据库范式详解+实例

    数据库范式主要包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及BCNF(Boyce-Codd范式)。下面我们详细介绍这些范式及其相互之间的转换方法。 ##### 第一范式(1NF) - **定义**:如果关系模式R属于第...

    通俗易懂,实例讲解数据库范式,三范式,六范式

    ### 数据库范式详解 #### 一、基础知识 在深入探讨数据库范式之前,我们需要先了解几个基础概念。 ##### 实体(Entity) 实体是指现实世界中客观存在的、可以被区别的事物。例如:“一个学生”、“一本书”、...

    学案之数据库三范式.pdf

    本文将对数据库设计三范式进行通俗的解释,并以实例来讲解怎样将这些范式应用于实际工程。数据库设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入、删除和更新...

    数据库系统范式教程.ppt

    关系模式的范式可以分为第一范式、第二范式、第三范式、BCNF范式、第四范式等。每个范式都有其特定的规范化规则,旨在消除不合适的数据依赖。 1.3 数据库系统原理:关系模式的规范化 关系模式的规范化是指将关系...

    数据库三范式(六范式)--通俗易懂

    ### 数据库三范式(六范式)详解 #### 前言 在数据库设计领域,遵循一定的规范和原则对于确保数据的完整性和减少冗余至关重要。范式就是用来指导如何构建关系数据库的一种方法论。本文将从基本概念入手,逐步深入地...

    数据库范式(实例分析)

    数据库范式(实例分析) 数据库范式是关系数据库设计中的一种规范化方法,旨在消除数据冗余,减少数据之间的依赖关系,提高数据的一致性和完整性。在本文中,我们将通过一个“交易订单”实例来分析范式的概念和作用...

    数据库设计范式(实例).doc

    数据库设计范式是关系数据库设计的核心原则,它们确保了数据的一致性、减少冗余和避免数据异常。这里主要介绍了1NF(第一范式)、2NF(第二范式)、3NF(第三范式)和BCNF(博科斯范式)。 1NF(第一范式)强调每个...

Global site tag (gtag.js) - Google Analytics