`

数据库模型

阅读更多
关系模型的数据结构

关系模型的数据结构单一,是一种二维表格结构。

关系数据库的数据操作

关系数据库所使用关系语言班的特点是高度非过程化,即用户只需说明"做什么"而不必说明"怎么做"。用户不必请求数据库管理员为其建立特殊的存取路径,存取路径的选择是由DBMS(数据库管理系统)自动完成的。这也是关系数据库的主要优点之一。

早期关系操作有两种表示方式:关系代数与关系演算。理论上,关系代数和关系演算被证明是完全等价的。

关系代数通过对关系的运算来表达查询,其操作对象是关系,操作结果亦为关系。关系代数的运算可分为两类。下面通过关系代数来说明关系操作是如何实现的。

传统的集合操作

传统的集合操作包括并、交、差、广义笛卡儿积等。这类操作将关系看作元组的集。其操作是从关系的水平方向,即是对关系的行来进行的。

设关系R和关系S具有相同数目的属性列(n列属性),并且相应的属性取自同一个域,则可定义以下四种集合运算:

* 并(Union)

关系R与关系S的并,它是属于R或属于S的元组组成的集合,结果为n列属性的关系。

* 交(Intersection)

关系R与关系S的交,它是既属于R又属于S的元组组成的集合,结果为n列属性的关系。

* 差(Difference)

关系R与关系S的差,它是属于R而不属于S的元组组成的集合,结果为n列属性的关系。

* 广义笛卡儿积(Extended cartesian product)

关系R(假设为n列)和关系S(假设为m列)的广义笛卡儿积是一个(n+m)列元组的集合,每一个元组的前n列是来自关系R的一个元组,后m列是来自关系S的一个元组。若R有K1个元组,S有K2个元组,则关系R和关系S的广义笛卡儿积有K1*K2个元组。

专门的关系操作

包括选择、投影、连接等。这类操作不仅涉及行,而且也涉及列。

* 选择(Selection)

选择操作是指在关系中选择满足某些条件的元组。例如要在学生基本信息中找出年龄为24岁的所有学生数据,就可以对学生基本信息表做选择操作,条件是年龄为24岁。

* 投影(Projection)

投影操作是在关系中选择某些属性列。例如,找出所有老师的姓名、电话,则可以对教师基本信息表做投影操作,将表数据投影到教师名和电话列。

* 连接(Jion)

连接操作是从两个关系的笛卡儿积中,选取属性间满足一定条件的元组。连接条件中的属性称为连接属性,两个关系中的连接属性应该是可比的,即是同一类的数据类型。连接条件中的算符为算术比较运算符,当此算符取"="时,为等值连接。若等值连接中连接属性为相同属性(或属性组),且在结果关系中去掉重复组,则此等值连接为自然连接。自然连接是最常用的连接操作。

关系模型的完整性

关系模型中的完整性是指数据库中数据的正确性和一致性。数据完整性由数据完整性规则来维护,包括实体完整性和参照完整性规则。当然任何给定数据库中还要包括与应用有关的完整性规则。这类完整性规则并不是关系模型特有的,将其称为用户定义的完整性规则。

1、实体完整性规则

实体完整性是指:关系的主属性,即主码的组成不能为空,也就是关系的主属性不能是空值,在关系系统中一个关系通常对应一个表。在机器上实际存储数据的表称为基本表,除此之外的查询结果表是临时表,视图表是虚表,是不实际存储数据的表,而实体完整性是针对基本表的。因此,具体地讲,实体完整性是指在实际存储数据的基本表中,主属性不能取空值。

定义实体完整性的必要性是:关系对应于现实世界中的实体,而现实世界中实体可区分的。也就是说每个实体具有唯一性标志,在关系模型中,只有主码做唯一标志的。若主码为空值,则说明这个实体无法标志,即不可区分,这显然是错误的,与现实世界应用环境矛盾,因此不存在这样的不可标志实体,从而引入实体完整性的概念。

如所定义的实体是"学生-系",由于其主码是组合属性(学号,系名),则该实体的任意元组中,学号和系名这两个属性的值均不能为空值,否则就违反了实体完整性要求。

2、参照完整性规则

参照完整性的定义:如果基本关系R2的属性中,包含与另一个基本关系R1的主码K相对应的属性组F,那么F则称为外部码;对R2每个元组在F上的取值只能只允许两种可能:一是空值;二是等于R1中某个元组的主码值。这里R1和R2不一定是不同的关系;K与F是定义在同一域中的。

举一个实例,教职工关系(职工号,职工名,工资,部门号)和部门关系(部门号,部门名),其中部门关系中的部门号是主码,职工关系中,对每个职工也有部门号这一项,表明这个职工是在哪个部门工作的。职工关系中的部门号属性和部门关系中的部门号属性相对应,职工关系中部门号则是外部码。

从上面的例子可以看到:在职工关系中部门号一项,要么取空值,表示这个职工还未分配到任何一个部门工作;要么取值必须和部门关系中某个元组的部门号相同,表示这个职工分配到某个部门工作。这就是参照完整性。上例中若是教职工关系中某个职工的部门号取值不能与部门关系中任何一个元组的部门号一致,表示这个职工被分配到不属于这个单位的部门工作,这与实际应用环境是不相符的,显然是错误的。这就是为什么关系模型中定义了参照完整性约束规则。

在参照完整性定义中,还注明R1、R2不一定是不同的关系。现再给出一个同一关系的实例:若有教职工关系(职工号,职工名,系主任-职工号,工资),其中职工号是主码。系主任的职工号是外部码,它与本关系职工关系中主码职工号相对应,系主任职工号的取值要么为空值,表示这个系还未任命主任;要么等于职工关系中某个职工号。

实体完整性与参照完整性是由系统自动支持的,即:在建立关系(表)时只要说明了"谁是主码","谁参照于谁",系统将自动进行此类完整性的检查。

3、用户定义的完整性规则

用户定义的完整性规则是针对某一应用环境的完整性约束条件,他反映了某一具体应用所涉及的数据应满足的要求。系统提供定义和检验这类完整性规则的机制,其目的是用统一的方式由系统来处理它们,不在有应用程序来完成这项工作。

在实际系统中,这类完整性规则一般在建立库表的同时进行定义,应用程序人员不需再做考虑。如果某些约束条件没有建立在库表一级,则应用编程人员应在各模块的具体编程中通过程序进行检查和控制。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics