购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 关系数据库的简单介绍

所谓关系数据库是指以关系数据模型为基础的数据库系统。目前,基于关系数据模型(关系系统)的数据库管理系统仍然在数据库市场上占据主导地位,最主要的产品包括:IBM公司的DB2、Computer Associates International公司的Ingres II、Informix Software公司的Informix Dynamic Server、微软公司的Microsoft SQL Server、Oracle公司的Oracle、Sybase公司的Sybase Adaptive Server等。

关系数据模型最重要的特点之一是具有坚实的数学理论基础。该理论包括两方面内容:其一是关系数据库设计的理论基础——数据依赖与规范化理论;其二是数据库查询的实现与优化理论,这两方面内容构成了数据库设计和应用最重要的理论基础。本节将简单介绍一下数据依赖与关系规范化的理论,这对关系数据库的设计至关重要。

1.3.1 关系数据库的基本特性

关系数据库是基于关系系统的,那么究竟什么是关系系统呢?直观地说,关系系统是下面这样的。

结构化方面: 数据库中的数据对用户来说是表,并且只是表。

完整性方面 :数据库中的表需要满足一定的完整性约束。

操纵性方面 :用户可以使用操作符进行表操作。例如,为了检索数据,需要使用从一个表导出另一个表的操作符。

关系系统和非关系系统的区别在于:关系系统的用户把数据看作表,而且只能是表;非关系系统的用户则把数据看作其他的数据结构,代替或者扩展关系系统中的表结构。

关系是关系系统的核心,是汇集在表结构中行和列的集合。每个关系由一个或多个属性(列)组成,属性将类型相似的数据归纳在一起。属性与关系直接关联,如图 1.4 所示,其中关系是由学号、姓名、年龄、性别、系名和年级 6 个属性组成的。数据以元组(行)的方式存储在关系中,每个元组代表相关数据的一个记录。

1.3.2 关系数据库的设计规范

关系数据库是E.F.Codd博士于 1970 年在“一种存储大型共享数据的关系模型”论文中提出的。一个完美的、完全符合数据库技术的关系数据库系统,需要满足Codd博士提出的 12 条法则(有关Codd的 12 条法则以及关系数据库规范设计的范式,本书不作详细介绍)。

关系数据库实际上就是从多种可能的关系组合中,选取一个合适的(或者说性能好的)关系模式集合作为数据库模式。为了对关系模式集合的性能好坏有一个直观的认识,这里用一个实例组成不同的关系模式集合,产生不同的影响,来简单说明数据库模式设计得好与坏。

例如:某校要建立一个数据库来描述学生和系的一些情况,其对象有:学生的学号(S#)、学生的姓名(SNAME)、系的名称(DEPT)、系的负责人(MN)、学生选修的课程名称(CNAME)和学生选修课的成绩(GRADE)。上述对象之间有如下对应关系。

◆一个系有若干个学生,但一个学生只属于一个系。

◆一个系只有一个负责人。

◆一个学生可以选修多门课程,每门课程有若干个学生选修。

◆每个学生学习每一门课程有一个成绩。

依据上述情况,可以考虑以下两种数据库模式的选择方案。

方案 1:采用一个总的关系模式。

SA(S#,SNAME,DEPT,MN,CNAME,GRADE)

方案 2:采用三个关系模式。

SB(S#,SNAME,DEPT)

DT(DEPT,MN)

SC(S#,CNAME,GRADE)

比较起来,方案 1 可能带来下列问题。

数据冗余 。如果某个学生选修多门课程,则由于每选修一门课程必须存储一个数据记录。因此,这个学生的姓名及其所在系的信息将被重复保存。

修改异常或潜在的不一致性 。由于数据存储冗余,当更新某些数据项(如学生所在的系)时,一部分涉及的元组就有可能被修改,而另一部分元组却没有修改,这就造成了存储数据的不一致性(比如,一个学生两个系)。

插入异常 。如果一个系刚刚成立,尚无学生;或者虽然有了学生,但尚未安排课程,那么就无法把这个系及其负责人的信息存入数据库。这是因为在关系模式SA中,主关键字为(S#,CNAME),而关系模型的实体完整性约束不允许主关键字属性为空值。因此,在学生未选修课程或系里未分配学生之前,相应元组无法插入。

删除异常 。如果某个系的学生全部毕业了,在删除该系全体学生信息的同时,把这个系及其负责人的信息也一同删除了,这显然是人们所不希望的。

由于存在上述几个问题,方案 1 不是一个好的数据库模式设计,而在方案 2 中这些问题都不存在,因而方案 2 优于方案 1。一个好的模式应当不会发生插入异常和删除异常,冗余应尽可能少,从而避免造成更新异常。

上述关系模式中的异常统称为存储异常。现在的问题是,产生这种存储异常的根源何在?

对上例的两个数据库模式方案进行对比研究可以发现,存储异常的存在与每个关系模式内部各属性值之间的内在相关性有直接关系。在关系模式SA中,主关键字为(S#,CNAME),它们的值唯一地决定其他所有属性的值,形成一种函数依赖关系,即属性SNAME、DEPT、MN、GRADE的值都依赖于主关键字。但另一方面,这些属性对于主关键字的函数依赖程度又有所不同,GRADE是真正的函数依赖于主关键字;而SNAME、DEPT的值则实际上只受S#值的影响,与CNAME无关,即只是部分函数依赖于主关键字(S#,CNAME);MN是直接依赖于DEPT,而间接传递依赖于S#,正是这种部分函数依赖和传递函数依赖造成了上述的存储异常。 Gosx8GoTEnTbwYurOdnXLzkEEUOLuLY2cjUooXfji6HtFlbKgwzx7mkBGtQKEkko

点击中间区域
呼出菜单
上一章
目录
下一章
×