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

2.3 组织层数据模型

组织层数据模型是从数据的组织方式的角度来描述信息,目前,在数据库技术的发展过程中用到的组织层数据模型有四种,它们是:层次模型、网状模型、关系模型和面向对象模型。组织层数据模型是按组织数据的逻辑结构来命名的,比如,层次模型采用树形结构。目前使用最普遍的是关系数据模型。关系数据模型技术从20世纪七八十年代开始发展到现在已经非常成熟,因此,我们重点介绍关系数据模型。

关系数据模型(或称为关系模型)是目前最重要的一种数据模型。关系数据库就是采用关系模型作为数据的组织方式。20世纪80年代以来,计算机厂商推出的数据库管理系统几乎都支持关系模型,非关系系统的产品也大都加上了关系接口。下面从数据模型的三要素角度来介绍关系数据模型的特点。

2.3.1 关系模型的数据结构

关系数据模型源于数学,它用二维表来组织数据,而这个二维表在关系数据库中称为 关系 。关系数据库是表(或者说是关系)的集合。

关系数据库要求让用户所感觉的数据库就是一张张表。在关系数据库中,表是逻辑结构而不是物理结构。实际上,系统在物理层可以使用任何有效的存储结构来存储数据,比如,顺序文件、索引、哈希表、指针等。因此,表是对物理存储数据的一种抽象表示——对很多存储细节的抽象,如存储记录的位置、记录的顺序、数据值的表示以及记录的访问结构(如索引等),对用户来说都是不可见的。

用关系表示实体以及实体之间联系的模型称为关系数据模型,简称为关系模型。表2-1所示的是学生基本信息的关系模型。

表2-1 学生基本信息

下面介绍一些关系模型中的基本术语:

1.关系

关系就是二维表,它满足如下条件:

1)关系中的每一列都是不可再分的基本属性。如表2-2所示的表就不是关系,因为“出生日期”列不是基本属性,它包含了子属性“年”“月”“日”。

2)一个关系中的各属性不能重名。

3)关系中的行、列次序并不重要,即交换列的前后顺序,比如将表2-1中的“性别”放置在“年龄”的后边,不影响其表达的语义。

表2-2 包含复合属性的表

2.元组

关系中的每一行数据称为一个元组,它相当于一个记录值。

3.属性

关系中的每一列是一个属性值的集合,列可以命名,称为属性名。例如,表2-1中有五个属性。属性与前面介绍的实体的属性(特征)或记录的字段意义相当。

因此,关系是元组的集合,如果关系有 n 个列,则称该关系是 n 元关系。关系中的每一列都是不可再分的基本属性,而且关系中的每一行数据应该不允许完全相同,因为存储值完全相同的两行或多行数据并没有实际意义。

因此,在数据库中有两套标准术语,一套用的是表、行、列;而另外一套就用关系(对应表)、元组(对应行)和属性(对应列)。

4.主键

主键(primary key)是关系中用于唯一确定一个元组的属性或最小的属性组。主键可以由一个属性组成,也可以由多个属性共同组成。例如,表2-1所示的例子中,学号就是此“学生基本信息”关系的主键,因为它可以唯一地确定一个具体的学生(一个元组)。而表2-3所示关系的主键就由学号和课程号共同组成。因为一个学生可以选修多门课程,而且一门课程也可以有多个学生选修,因此,只有将学号和课程号组合起来才能共同确定一行数据。我们称由多个属性共同组成的主键为 复合主键 。当某个关系是由多个属性共同作为主键时,就用圆括号将这些属性括起来,表示共同作为主键。比如,表2-3的主键是(学号,课程号)。

表2-3 学生选课信息

注意:

我们不能根据表在某时刻所存储的数据来决定哪些列是主键,这样做只能是猜测,是不可靠的。关系的主键与其实际的应用语义有关且与关系设计者的意图有关。例如,对于表2-3,用(学号,课程号)作为主键,在一个学生对一门课程只能有一次考试的前提下是成立的,如果实际允许一个学生对一门课程可以有多次考试,则用(学号,课程号)作为主键就不够了,因为一个学生对一门课程有多少次考试,则其(学号,课程号)的值就会重复多少遍。如果是这种情况,可以为这个关系添加一个“考试次数”属性,同时用(学号,课程号,考试次数)作为主键。

有时一个关系中可能存在多个可以做主键的属性,比如,对“学生基本信息”,如果还有身份证号属性的话,则身份证号也可以作为“学生基本信息”关系的主键。如果一个关系中存在多个可以唯一确定一个元组的属性或属性组,则称这些属性或属性组为关系的 候选码 (也称为候选键)。从候选码中选取哪一个作为主键都可以,因此,主键是从候选码中选取出来做主键的属性。

5.域

属性的取值范围称为 。例如,大学生的年龄假设限定在14~40岁之间,因此“年龄”属性的域就是(14~40),而人的性别只能是“男”和“女”两个值,因此,“性别”属性的域就是(男,女)。

6.关系模式

二维表的结构称为 关系模式 ,或者说,关系模式就是二维表的表框架或表头结构。

关系模式一般表示为:关系名(属性1,属性2,…,属性 n

例如,表2-1所示关系的关系模式为:

如果将关系模式理解为数据类型,则关系就是该数据类型的一个具体值。关系模式是对关系的“型”或元组的结构共性的描述。

关系、关系模式、元组以及属性之间的关系如图2-8所示。

图2-8 各概念之间的关系

2.3.2 关系模型的数据操作

关系模型的操作对象是集合(也就是关系),而不是单个的行,也就是操作的数据以及操作的结果都是完整的表(是包含行集的表,只包含一行数据的表、不包含数据的空表都是合法的)。而在非关系型数据库系统中,典型的操作是一次一行或一次一个记录。因此,集合处理能力是关系系统区别于其他系统的一个重要特征。

关系数据模型的数据操作主要包括四种:查询、插入、删除和修改数据。关系数据库中的信息只有一种表示方式,就是表中的行列位置有明确的值。关系数据库中没有连接一个表到另一个表的指针。在表2-1和表2-3中,表2-1的“学生基本信息”的第一行数据与表2-3的“学生选课信息”中的第一行有联系(当然也与第二行和第三行有联系),因为学生9512101选了课程。但在关系数据库中这种联系不是通过指针来实现的,而是通过学生基本信息的“学号”属性中的值与“学生选课”中“学号”属性的值联系的(学号值相等)。但在非关系系统中,这些信息一般由指针来表示,这种指针对用户来说是可见的。

需要注意的是,当我们说关系数据库中没有指针时,并不是指在物理层没有指针,实际上,在关系数据库的物理层也使用指针,但所有这些物理层的存储细节对用户来说都是不可见的,用户所看到的物理层是没有指针的。

2.3.3 关系模型的数据完整性约束

数据完整性是指数据库中存储的数据是有意义的或正确的。关系模型中的数据完整性规则是对关系的某种约束条件。它的数据完整性约束主要包括三大类:实体完整性、参照完整性和用户定义的完整性。

1.实体完整性

实体完整性指的是关系数据库中所有的表都必须有主键,而且表中不允许存在如下的记录:

●无主键值的记录。

●主键值相同的记录。

因为若记录没有主键值,则此记录在表中一定是无意义的。前边我们介绍过,关系模型中的每一行记录都对应客观存在的一个实例或一个事实。比如,一个学号唯一地确定了一个学生。如果关系中存在没有学号的学生记录,则此学生一定不属于正常管理的学生。另外,如果关系中存在主键值相等的两个或多个记录,则这两个或多个记录会对应同一个实例。这会出现两种情况,第一,若表中的其他属性值也完全相同,则这些记录就是重复的记录,存储重复的记录是无意义的;第二,若其他属性值不完全相同则会出现语义矛盾,比如同一个学生(学号相同),而其名字不同或性别不同,显然不可能。

关系模型中使用主键作为记录的唯一标识,主键(准确说是候选码)所包含的属性称为关系的 主属性 ,其他的属性称为 非主属性 。在关系数据库中主属性不能取空值。关系数据库中的空值是特殊的标量常数,它代表未定义的(不适用的)或者有意义但目前还处于未知状态的值。比如当向表2-3所示的“学生选课信息”中插入一行数据时,在学生还没有考试之前,其成绩是不确定的,因此,此列上的值即为空。空值用“NULL”表示。

2.参照完整性

参照完整性有时也称为引用完整性。现实世界中的实体之间往往存在着某种联系,在关系模型中,实体以及实体之间的联系都是用关系表示的,这样就自然存在着关系(表)与关系(表)之间的引用关系。参照完整性就是描述实体与实体之间的联系的。

参照完整性一般是指多个实体或表之间的关联关系。比如表2-3中,“学生选课信息”所描述的学生必须受限于表2-1学生基本信息表中已有的学生,我们不能在“学生选课信息”中描述一个根本就不存在的学生,也就是“学生选课信息”中学号的取值必须在“学生基本信息”中学号的取值范围内。这种限制一个关系中某属性的取值受另一个关系的某属性取值范围约束的特点就称为参照完整性。在关系数据库中用外键来实现参照完整性。例如,我们只要将“学生选课信息”中的“学号”定义为引用“学生基本信息”的“学号”的外键,就可以保证“学生选课信息”中的“学号”的取值在“学生基本信息”的已有“学号”范围内。

外键一般出现在联系所对应的关系中,用于表示两个或多个实体之间的关联关系。外键实际上是关系中的一个(或多个)属性,它引用某个其他关系(特殊情况下,也可以是外键所在的关系)的主键,当然,也可以是候选码,但多数情况下是主键。

下面我们举例说明如何指定外键。

【例1】 设有“学生”和“专业”两个关系模式,其中主键用下划线标识。

这两个关系模式之间存在着属性引用关系,即“学生”中的“专业号”属性引用了“专业”中的“专业号”属性,显然,“学生”关系模式中的“专业号”属性的取值必须是确实存在的专业的专业号。也就是说,“学生”关系模式中的“专业号”参照了“专业”关系模式中的“专业号”,即“学生”关系模式中的“专业号”是引用了“专业”关系模式中的“专业号”的外键。

【例2】 学生、课程以及学生与课程之间的选课关系可以用如下三个关系模式表示,其中主键用下划线标识:

在这三个关系模式中,“选课”中的“学号”必须是“学生”中已有的学生,因此“选课”中的“学号”属性引用了“学生”中的“学号”属性。同样“选课”中的“课程号”的取值也必须是“课程”中已有的课程,即“选课”中的“课程号”属性引用了“课程”中的“课程号”属性。因此,“选课”关系模式中的“学号”是引用了“学生”关系模式中的“学号”的外键,而“选课”关系模式中的“课程号”是引用了“课程”关系模式中的“课程号”的外键。

主键要求必须是非空且不重复的,但外键无此要求。外键可以有重复值,这点我们从表2-3可以看出。外键也可以取空值,例如:职工、部门以及职工所在的部门可以用如下两个关系模式表示:

其中,“职工”关系模式中的“部门号”是引用“部门”关系模式的“部门号”的外键,如果某新来职工还没有被分配到具体的部门,则其“部门号”就为空值;如果职工已经被分配到了某个部门,则其部门号就有了确定的值(非空值)。

3.用户定义的完整性

用户定义的完整性也称为域完整性或语义完整性。任何关系数据库管理系统都应该支持实体完整性和参照完整性,除此之外,不同的数据库应用系统根据其应用环境的不同,往往还需要一些特殊的约束条件,用户定义的完整性就是针对某一具体应用领域定义的数据约束条件,它反映某一具体应用所涉及的数据必须满足应用语义的要求。

用户定义的完整性实际上就是指明关系中属性的取值范围,也就是属性的域,这样可以限制属性的数据类型及取值范围,防止属性的值与实际应用语义矛盾。例如,学生考试成绩的取值范围为0~100,或取{优,良,中,及格,不及格}。 UptN1SOqmJ2SKchdHbQy6U1wWp7q++eSwRs02ElO2iObaueVfrBCcjQM8kT0s3Cx

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