关系模式的规范化

关系模式的规范化原文路径 http wenku baidu com link url KzN3v3voao4o izsiujMN8vMZ ydc1B 6 1eEy7vfoSiO2 ORTXAXzVBxzW 1AlZWzx46MSG nbsp 了解关系模式规范化的作用掌握第一范式 重点掌握第二范式 重点掌握第三范式 重点回顾关系

原文路径:http://wenku.baidu.com/link?url=KzN3v3voao4ovz_izsiujMN8vMZMiArzgYbrue8tVL5L_ydc1B_6_1eEy7vfoSiO2-ORTXAXzVBxzWAaXJxiR68z6g4GMD_1AlZWzx46MSG

 

了解关系模式规范化的作用

掌握第一范式-重点

掌握第二范式-重点

掌握第三范式-重点

回顾关系模式

关系模式:关系模式相当于一张二维表的框架,在这个框架下填入数据,称为关系模式的一个实例,或者叫关系(R)

R(A1,A2,A3..Ai):R是关系名,Ai是关系的属性名。一个关系名对应一张表,关系名对应表名,属性对应表中的列名。

关系模型的简化表示法: R

 

关系模式规范化的作用

关系型数据库的设计主要是关系模式的设计。关系模式设计的好坏直接影响关系型数据库设计的成败。将关系模式规范化是设计好关系型数据库的唯一途径。

关系模式的规范化主要有范式来完成。

 

关系模式

所谓范式(Normal Form, NF)是指规范化的关系模式。由规范化程度不同而产生不同的范式。根据满足条件不同,经常称某一关系模式R为“第几模式”。

 

为什么要设计规范化的数据库?

未经规范化的数据库一般都有下述缺点:

较大的数据冗余,数据一致性差,数据修改复杂,对表进行更新,插入,删除是会报异常。规范化的作用就在于尽量去除冗余,使数据保持一致,使数据修改简单,除去在表中进行插入、删除时产生的异常,规范化后的表一般都较小。

 

第一范式(1NF)

在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系型数据库。

定义:在关系模型中的每一个具体关系R中,如果每个属性都是不可再分的,则称R属于第一范式(1NF),记作R属于1NF。

第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。

e.g.如下的数据库表是符合第一范式的:

字段1   字段2   字段3   字段4

而这样的数据库表是不符合第一范式的:

字段1   字段2   字段3(字段3.1,字段3.2)   字段4

如职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话和一个家里的电话号码)规范成为1NF。

总结:不能有重复的列,列不可再分。

不满足第一范式条件的关系为非范式关系,在关系数据库中,凡非范式关系必须要化成范式关系。

 

第二范式(2NF)

第二范式是在第一范式的基础上建立起来的,即满足第二范式必须先满足第一范式(1NF)。

定义:如果关系模式R属于1NF,且每一个非主属性都完全依赖于主码,则称关系R是属于第二范式的,记作R属于2NF。

第二范式(2NF)说明:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖于主关键字的一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。

e.g.

假定选修课关系表为SelectCourse(学号,姓名,年龄,课程名称,成绩,学分),关键字为组合关键字(学号,课程名称),因为存在如下决定关系:

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

这个数据库表不满足第二范式,因为存在如下决定关系:

(课程名称)->(学分)

(学号)->(姓名,年龄)

即存在学分和姓名,年龄部分依赖于主关键字。

由于不符合2NF,这个选课关系表会存在如下问题:

(1)数据冗余:

同一门课程会有N个学生选修,“学分”就会重复N-1次;同一个学生选修了M门课程,那姓名和年龄会重复M-1次。

(2)更新异常:

若课程的学分更新,那必须把表中所有的学分值都更新,不然会出现同一课程出现不同的学分。

(3)插入异常:

假设要开设一门新的课程,但是目前还没有学生选修这门课程,由于没有学号导致数据无法录入到数据库中。

(4)删除异常:

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

所以我们将设计修改了一下,把选课关系表SelectCourse改为如下三个表:

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

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

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

这样的数据库表是符合第二范式的,消除了数据冗余,更新,插入,删除异常。

注:所有的单关键字的数据库表都符合第二范式,因为不可能存在组合关键字,也就不可能存在非主属性部分依赖于主关键字了。

 

第三范式

定义:如果关系模式R属于2NF,并且R中的非主属性不传递依赖与R的主码,则称关系R是属于第三范式的。(个人总结,非主属性必须直接依赖于主码,不能存在通过其他非主属性传递依赖于主码)

所谓传递依赖,就是A依赖于B,B依赖于C,则A传递依赖于C。

因此,满足第三范式的数据库表应该不存在如下依赖关系:

关键字段->非关键字段x->非关键字段y

e.g.

假定学生关系表为Student(学号,姓名,年龄,所在学院,学院地点,学院电话),关键字为单一的学号,所以肯定符合第二范式,但是因为存在非关键字学院地点和学院电话依赖于所在学院,即传递依赖于学号,所以此关系表不符合第三范式。同样会导致数据冗余,DDL操作异常等问题。

所以我们可以对其进行修改:

学生:(学号,姓名,年龄,所在学院)

学院:(学院,地点,电话)

这样的数据库表就符合第三范式了。

 

总结:

a. 规范化目的是使结构更合理,消除存储异常,减少数据冗余,便于插入,删除,更新。

b. 原则:遵从概念单一化“一事一地”原则,即一个关系模式描述一个实体或实体建的一种联系。

c. 方法:将关系模式投影,分解成两个或两个以上的关系模式。

d. 分解后的关系模式集合应当与原关系模式保持等价关系,即通过自然联接可以恢复原关系而不丢失信息,并保持属性间合理的联系。

注意:一个关系模式结合分解可以得到不同关系模式集合,也就是说分解方法不是唯一的。最小冗余的要求必须以分解后的数据库能够表达原来数据库所有信息为前提来实现的。其根本膜表是节省存储空间,避免数据不一致性,提供对关系的操作效率,同事满足应用需求。实际上,并不一定要求全部模式都达到BCNF不可。有时候故意保留部分冗余可能更方便数据查询。尤其对于那些更新频度不高,查询频率极高的数据库系统更是如此。在关系数据库中,除了函数依赖之外还有多值依赖,联接依赖的问题,从而提出了第四范式,第五范式等更高一级的规范化要求。

 

 

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217657.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午9:04
下一篇 2026年3月18日 上午9:05


相关推荐

  • 迁移学习之ResNet50和ResNet101(图像识别)

    迁移学习之ResNet50和ResNet101(图像识别)文章目录1.实现的效果:2.主文件TransorResNet.py:1.实现的效果:实际的图片:(1)可以看到ResNet50预测的前三个结果中第一个结果为:whippet(小灵狗)(2)ResNet50预测的前三个结果中第一个结果为:Walker_hound(步行猎犬)(3)**从结果上来看,比之前的VGG16和VGG19预测的效果都要好(这里虽然不知道图片中的够具体是什么狗,但是结果都预测成了“狗”的类别)。**2.主文件TransorResNet.py:importosimpo

    2022年10月7日
    5
  • Json交互处理_stata交互项检验

    Json交互处理_stata交互项检验Json交互处理JSON简介JSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。在JavaScript语言中,一切都是对象。因此,任何JavaScript支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。看看他

    2022年10月15日
    4
  • 唯一约束和唯一索引区别是什么_db2违反唯一索引的约束

    唯一约束和唯一索引区别是什么_db2违反唯一索引的约束1.主键约束(PRIMARY KEY)1)主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。2)是不可能(或很难)更新.3)主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).4)主健可作外健,唯一索引不可;2.唯一性约束(UNIQUE)1)唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段

    2025年12月10日
    6
  • 反码补码原码转换c语言程序_127的原码反码补码

    反码补码原码转换c语言程序_127的原码反码补码C语言原反补码详解

    2025年12月12日
    9
  • keepalived 保证集群的高可用

    keepalived 保证集群的高可用

    2021年5月28日
    110
  • 将两个Bean中相同属性名的值进行注入

    将两个Bean中相同属性名的值进行注入有时候是不能将模型类直接传出去 就有了各种 Vo Dto Bo 这些实体中大部分字段都与 domian 相同 有些甚至一模一样 各种 setget 去转换数据十分的繁琐 就写了一个反射工具类 支持单个转换和批量转换 importorg slf4j Logger importorg slf4j LoggerFactor importorg springframew

    2026年3月16日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号