【数据库原理】关系-Relationship

概念准备.

在给出关系的定义之前,我们需要给出一些前导的概念。了解离散数学的人可能会对这些概念比较熟悉。

域.

在前面介绍关系模型时已经提到过了,域是属性的取值范围。

【域-Domain】是一组具有相同数据类型的值的集合,也称为值域。常见的实数集、整数集等都是域。

域中所包含的值的个数称为域的基数,也叫做势,用字母m来表示。举几个例子来说明:
D 1 _1 ={Tom,Sam,David},m 1 _1 =3;
D 2 _2 ={Male,Female},m 2 _2 =2;
D 3 _3 ={18,21,22},m 3 _3 =3;
我们给上面的三个域赋予实际的意义,认为它们分别表示教师关系中姓名域、性别域和年龄域的集合。由于域是一个集合,所以它也拥有集合的性质:互异并且无序。

笛卡尔积.

笛卡尔积(Cartesian Product)是离散数学课程中的一个重要概念,我们给定一组域D 1 _1 ,D 2 _2 ,…,D n _n ,它们的笛卡尔积可以用下式来表示:
在这里插入图片描述
上式是笛卡尔积的定义式,不难看出,其结果亦是一个集合,其中的元素是一个n元组,n是参与运算的域的数量。当每一个参与运算的域都是有限集时,最终的笛卡尔积集合的基数是所有域的基数的累乘,也就是说:
在这里插入图片描述
以上面给出的三个域为例,我们进行笛卡尔积运算:
在这里插入图片描述
后续我们就可以引出【关系】的概念。

关系.

n个域的笛卡尔积结果的任一子集称为定义在域D 1 _1 ,D 2 _2 ,…,D n _n 上的一个n元关系,可以用【R(D 1 _1 ,D 2 _2 ,…,D n _n )】来表示,其中R代表的是关系名,n是关系的度(degree)。看我们上面给出的D 1 _1 与D 2 _2 的笛卡尔积结果,结合我们一开始赋予它的意义,其某个子集可以构成一个教师关系T 1 _1
在这里插入图片描述
这个被表示为二维表的关系,其框架是由进行笛卡尔积运算的域决定的,表的每一列都对应一个域。上表中,第一列是对应于D 1 _1 的Name属性,第二列是对应于D 2 _2 的Sex属性。具有相同关系框架的关系称为同类关系,上述关系的一个同类关系T 2 _2 如下所示:
在这里插入图片描述
在离散数学中,关系可以是笛卡儿积集合的任意一个子集,但在实际应用中,关系是那些有着实际意义的子集。以我们这里的关系【教师(姓名,性别)】为例,当认为教师姓名不存在同名时,下面这样的关系是没有意义的,因为不会有一个老师同时有两个性别:
在这里插入图片描述
从关系模型的角度来看,我们可以对关系重新进行定义,跳过集合代数理论的笛卡尔积过程。一个定义在域D 1 _1 ,D 2 _2 ,…,D n _n (不要求它们都是不同的)上的关系由关系头(Heading)和关系体(Body)组成。
关系头由属性名A 1 _1 ,A 2 _2 ,…,A n _n 的集合组成,每一个A i _i 对应一个D i _i ,关系头(关系框架)是关系的数据结构的描述,是固定不变的。关系体是指关系结构中的内容或数据,它是会随着用户进行插入、删除以及修改等操作而变化的。
尽管关系可以表示为二维表,看起来与传统的数据文件、表格等是非常类似的,但它们之间又有着很重要的区别。我们前面曾经说过,关系数据库是建立在数学理论的基础上的,关系是一种规范化的二维表中行的集合。关系有着如下的规范:

  • 列是同质的。也就是说每一列中的分量必须来自于同一个域,必须是同一类型的数据,这也是进行笛卡尔积后应该有的结果。
  • 不同的属性可以来自于同一个域,但不同属性必须有不同的属性名以示区分。列是可以交换顺序的,但必须连带着属性名一同交换。
  • 由于关系本质上是一个集合,所以关系中的元组是无序的,互异的。
  • 关系中的每一个分量必须是不可分的数据项,或者说每一个属性值都必须是原子的,是一个确定的值,而非值的集合。属性值可以为NULL,表示未知或不可用。满足这一条的关系称为规范化关系,一个非规范化关系的例子如下所示:
    在这里插入图片描述
    其中的籍贯列含有省、市/县两项,出现了"表中有表"的现象,是非规范化的,应该将籍贯分为两列,规范化如下:
    在这里插入图片描述

关系模式.

在DB中,关系模式是型Type,关系是值Value,前面说过关系实际上是n元组的集合。那么关系模式必须要指出这个元组集合的结构,即它是由哪些属性构成的,属性名是什么,属性来自于哪一个域以及属性与域之间的映像关系。关系模式的定义如下:
在这里插入图片描述
由定义可以看出,关系是关系模式在某一时刻的状态或内容,也就是说,关系模式是型,即前面说的关系头;而关系是值,即关系体。关系模式是关系的框架,是对关系结构的描述,它是静态的、稳定的;而关系是动态的、随时间不断变换的,它是关系模式在某一时刻的状态或内容。

关系的码.

下面所介绍的概念,在前面都有所涉及,这里只是给出更为细致的描述。

  • 【候选码Candidaye Key】能够唯一标识关系中每一个元组的一个属性组合(也包括单个属性)称为候选码,其形式化的定义如下所示:
    在这里插入图片描述
  • 【主码Primary Key】当一个关系中有多个候选码时,从中选择一个作为查询、插入或删除元组的操作变量,该被选用的候选码称为主码。通常来说,我们会选择那个属性数量最少的候选码作为主码。
  • 【主属性Prime Attribute与非主属性Non-Prime Attribute】包含在主码中的各个属性称为主属性,不包含在任何候选码中的属性称为非主属性。
  • 【外码Foreign Key】若关系R 2 _2 的一个属性组合X不是R 2 _2 的主码,而是另一个关系R 1 _1 的主码,那么我们将X称为R 2 _2 的外码,并且称R 2 _2 为参照关系(Referencing Relation),R 1 _1 为被参照关系(Referenced Relation).

关系完整性.

关系模型中有三类完整性约束,用于维护DB中的数据与现实世界的一致性,对于关系数据库的插入、删除以及修改操作都必须有一定的约束条件,它们是:

  • 实体完整性Entity Integrity;
  • 参照完整性Referential Integrity;
  • 用户自定义完整性User-Defined Integrity.
实体完整性.

主码的值不能为NULL,因为关系模型中的一个元组对应着一个实体,而现实世界中的实体之间是可以区分的,即它们有着某种唯一的标识。关系模型中以主码来唯一标志元组,如果主码为NULL或部分为NULL,即主属性存在NULL,就导致无法唯一标识元组与其对应的实体,这就说明存在着不可区分的实体,与现实世界中实体是可以区分的这一事实矛盾。

参照完整性.

如果关系R 2 _2 的外码X与关系R 1 _1 的主码相符,则X的每个值只能等与R 1 _1 中主码的某个值,或者为NULL. 我们以下图为例来描述这一约束:
在这里插入图片描述
S学生关系中的【Dept系别】属性与D系别关系中的【Dept系别】相符,并且我们发现【Dept系别】是S关系的外码,是D关系的主码,S关系参照关系,D关系是被参照关系。S关系中某个学生的【Dept系别】属性值,必须是D关系中的某个值,否则表示该学生在一个不存在的系别中,或者该属性值为NULL,表示该名学生还未被分配到某一个系别进行学习。

扫描二维码关注公众号,回复: 11592001 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_44246009/article/details/108007607
今日推荐