【数据库原理】关系数据库理论(一)

【数据库原理】关系数据库理论(一)当面对一个现实问题,例如要求设计一个教学管理数据库,如何使用关系模型设计一个合理且合适的关系数据库,如何选择一个比较好的关系模式的集合,每个关系由哪些属性组成,这些属于数据库逻辑设计的问题。数据库规范化理论是数据库逻辑设计的理论依据,关系数据库的规范化理论最早是由关系数据库的创始人E.F.Codd于1970提出的。在该理论出现之前,层次型和网状数据模型只是遵循其模型本身的故由原则,相关的数据设计和实现有着很大的随意性和盲目性,说得直白就是在碰运气。

数据库规范化理论.

当面对一个现实问题,例如要求设计一个教学管理数据库,如何使用关系模型设计一个合理且合适的关系数据库,如何选择一个比较好的关系模式的集合,每个关系由哪些属性组成,这些属于数据库逻辑设计的问题。数据库规范化理论是数据库逻辑设计的理论依据,关系数据库的规范化理论最早是由关系数据库的创始人E.F.Codd于1970提出的。在该理论出现之前,层次型和网状数据模型只是遵循其模型本身的固有原则,相关的数据设计和实现有着很大的随意性和盲目性,说得直白就是在碰运气。由于这样的数据库设计缺乏理论基础,在日后的运行中可能会出现许多意料之外的问题。
在关系数据库中,关系模型包括一组关系模式,并且关系之间并不是一座座孤岛。如何设计一个合适的关系数据库系统,其关键是设计关系型数据库的模式,具体来说就是:

  • 数据库中应该包含哪些关系模式
  • 每一个关系模式应该包括哪些属性
  • 如何将这些相互之间有关联的关系模式组建成一个完整的关系型数据库

关系数据库的规范化理论主要包括三个方面的内容:函数依赖、范式Normal Form以及模式设计。其中函数依赖起着核心的作用,是模式分解和模式设计的基础,范式则是模式分解的标准。

一个不合理的关系模式.

我们要求设计一个教学管理数据库,其关系模式SCD如下:
在这里插入图片描述
依据这样的一个关系模式所建立的数据库,存在着如下的问题:

  • 【数据冗余】每一个系名以及系主任的名称的存储次数等于每个学生选课数求和的结果,不难发现,学生的名称、学号、年龄也出现了重复存储的情况,数据的冗余度相当大。
  • 【插入异常】如果学校突然新建了一个系,例如新兴的人工智能系,那么在该系还没有招生时,系名和系主任就无法插入到该表中。由于在这个关系模式中,(SNo+CNo)是主码,当主码为空时,插入操作无法进行。
  • 【删除异常】当某个系的学生全部毕业,并且还没有开始新学期招生时,数据表中所有有关该系的信息就会全部被删除,就好像这个系被撤销了一样,但现实中这个系依旧存在着。
  • 【更新困难】如果某个系更换了系主任,那么所有该系学生的信息中系主任属性都需要发生改变。

可见SCD在实际的应用中,面对着5位乃至6位的学生数,几乎是寸步难行,这也说明它是一个不”合适”的关系模式。而产生这些问题的原因,直观来说是SCD太过于全面,想要包含住所有的信息,而根本原因就是,属性之间存在着数据依赖的关系。
我们将SCD这样的关系模式称为泛模式,它用一个大表来存放所有的数据,对于某些查询,大表能够直接给出结果,但前面也说了,其中各种数据牵连在一起,导致了许多不便甚至异常。
如果我们将SCD分解为下面这样的三个模式,S(SNo,SN,Age,Dept)、SC(SNo,CNo,Score)和D(Dept,MN):
在这里插入图片描述
这样的三个关系模式在某种程度上实现了数据的分离,S表作为学生关系表,存储学生的基本信息,与所选课程及系主任无关;D表作为系别关系表,存储系别的信息,与学生无关;SC表是选课关系别,存储学生学号、所选课程号以及得分情况,与学生表的其它信息、系别表的信息无关。如此一来,数据冗余度明显降低,而且异常也被消除了。新建一个人工智能系只需要在D表中更改即可;所有的毕业生记录都被删除也不会导致该系好像消失了一样。从上面的例子中,我们得出一个合理且合适的关系数据库中关系模式应该满足下面的条件:

  • 尽可能少的数据冗余
  • 没有插入异常
  • 没有删除异常
  • 没有更新异常

将包罗万象的泛模式分解为若干个关系模式之后,可以使得每个模式的结构都很清晰简洁。但我们需要注意,一个合适的关系模式并不是在所有情况下都是绝对的最好,例如我们要查询某个学生选修的课程名以及所在系别系主任的名字,就需要通过连接查询完成,而连接操作所需要的开销非常大,但泛模式中查询就无需连接(因为它包含了所有这些信息)。
按照一定的规范设计关系模式,将复杂的关系分解为多个简单的关系,从而把不规范的数据库模式转换为规范的数据库模式,这就是关系的规范化。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/38708.html

(0)
编程小号编程小号

相关推荐

发表回复

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