首页 > 编程知识 正文

数据库第三范式举例(如何判断关系模式属于第几范式)

时间:2023-05-05 21:39:28 阅读:67795 作者:4203

一、yydwd的定义

程序员设计数据库时不是随意设计,而是因为需要遵循一定的规范。 这些规范是为了设计合理实用的数据库而归纳的,专门针对关系型数据库。

数据库的设计在很大程度上取决于如何存储数据以及开发人员如何处理数据。 因此,需要建立科学规范以满足数据库设计的合理性。

前人总结的yydwd是一系列满足一定水平的关系模型,关系数据库中的关系必须满足这些yydwd的一些要求,满足不同层次要求的关系是不同的例子,如目前第一yydwd、第二yydwd

二、什么是第一yydwd、第二yydwd、第三yydwd

第一yydwd的理解和例子

初学者只看概念的话很难理解yydwd的定义,所以让我们看看数据表的例子来理解第一个yydwd的定义吧。

上表的采购和销售两列明显不符合第一yydwd的定义。 因为采购可以分成数量和单价。 销售列也是如此,不符合字段不可分割的特性。

因此,在分割进货和销售两个字段后,此数据表结构中的所有字段都是最基本的单元,不能再次分割。 满足数据库第一yydwd的要求。 请参照以下图表结构。

看看光满足第一yydwd的要求是不够的,还是有很多问题,满足第一yydwd的表有哪些问题? 根据这些问题引出第二yydwd。 请参照下图。

上图为学生表,其中所有字段都满足不可分割的条件,但数据具有数据冗馀。 学号1101的学生的3个科目有3个数据。 如果我们想删除那个学生的记录就需要删除三个记录,如果修改本科就需要修改三个记录。 明显出现了删除异常、插入异常等具体问题,这些问题需要在第二yydwd上解决。

第二yydwd的理解和例子

第二yydwd首先满足第一yydwd的基本规范,即非主键属性的所有字段完全依赖于主键属性的字段,非主键属性与主键属性形成一对一关系,数据表中的所有字段唯一区分且不完全依赖

光看第二yydwd的定义,感觉比第一yydwd更难理解。 如果表结构中只有一个主键字段,并且所有字段都满足第一yydwd,则此数据库表必须满足第二yydwd。 对于包含多个字段的联合主键,所有其他字段必须完全依赖于联合主键中的每个字段。

因为联合主键的完全依赖关系很难理解,所以下面使用具体的数据表进行说明。 详情请参照下图。

上图为小编自行设计的大学生课程数据表,课程号两个字段设置为联合主键。 然后,取每个字段应用第一yydwd和第二yydwd定义。 首先,不能再次划分课程字段、成绩字段和课程单位字段。 那个首先满足第一yydwd。

成绩这个字段与主键的学校号有依存关系,也与主键课程有依存关系。 那么,也可以认为成绩与联合主键完全有依存关系。 下一个重点来了,别眨眼哦。

课程单位字段依赖于主键课程,但课程单位不依赖于主键课程编号啊。 上课的学分和某个学生的学号没有半截关系吧。 课程可以决定课程学分的分数大小,但学号不能决定课程学分。 因此,认为学分字段对主键(学号课程)只有部分依赖关系,满足第一yydwd不满足第二yydwd。

由于大学生课程数据表不符合第二个YY dwd的要求,请参考下图分割和修改数据表以满足第二个YY dwd。

大学生选择数据表

大学生信息单

根据课程学分不完全依赖联合主键的情况,我们独立设计了课程学分单独一张表。 这样就有了大学生选择数据表和大学生信息表两张表。

根据1,2 YY dwd的定义,两个数据表满足主键完全依赖的情况,符合数据库设计1,2 YY dwd的规定。

第三yydwd的理解和例子

一张数据设计表在满足第一yydwd的前提下,非主键字段不仅与主键字段完全依赖,而且各非主键属性字段之间没有任何依赖关系。 每个非主属性字段必须相互独立,它们之间没有直接或间接的函数依赖关系。 满足以上前提的规定称为第三yydwd。

不用说,上一个案例更清楚。 请参照下图的学生表。

上表设计的单列主键,以学校号为主键,其他字段如姓名、性别、班级、丰富手镯均与学校号字段一一对应完全依赖,因此满足第一yydwd和第二yydwd

分析一下第三yydwd的问题吧。 首先名字和性别没有任何关系,性别和班级没有任何关系。 但是,类和丰富的链有依赖关系,哪个类决定了那个丰富的链是谁,哪个丰富的链决定了属于哪个类。 这表明类和丰富链这两个非主键字段存在依赖关系,第一是不令人满意

三yydwd。

接下来对上表加以改造,使其满足第三yydwd,我们将丰富的手链和班级这两个个字段拆分出来,这样就形成了学生表和班级表,如下图:

学生数据库表

班级数据库表

经过对上面表的拆分,这样就不存在班级和丰富的手链之间依赖传递的问题了,轻松的解决了问题,并且满足第一第二第三yydwd。

通过以上三个案例的详解,大家应该能够很清楚的指导如何区分三大yydwd了吧,希望对大家有一定的帮助,也希望大家在设计数据库时能够紧扣三大yydwd的理念,这样设计出的表结构一般就不会有什么大问题了。

三、反三yydwd的理解

上面的三大yydwd充分做到了没有数据冗余的情况,但是不存在数据冗余却未必是最好最高效的数据库设计,相反适当的数据冗余还会减少关联查询涉及的表的数量,从而提高查询效率,这种做适当冗余的数据库设计规范被称作反三yydwd。

反三yydwd是基于第三yydwd所调整的,yydwd越高意味着表的划分更细,多表联查时表数量太多,严重地降低了数据库查询性能,而反三yydwd可以减少关联管理,更多有用的数据在一张表上显示。

反yydwd化一定要做到合理和适可而止的适度操作,切不可打乱原先的三大yydwd的平衡,反yydwd一定是要在满足原先符合第一、第二、第三yydwd的基础上稍微调整的,具体操作还需要实际工作中的实际业务练手和增加这方面的相关经验。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。