数据库系统概念 关系和笛卡尔积

一、关系

  1. 关系模型建立在集合代数的基础上;
  2. 单一的数据结构----关系
    现实世界的实体以及实体间的各种联系均用关系来表示
  3. 逻辑结构----二维表
    从用户角度,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。
    在这里插入图片描述
关系模式

对关系(结构)(特征)(性质)的描述
关系名(属性1,属性2,…,属性n)
R(U) 学生(学号,姓名,年龄,性别,系,年级)

补充:域

域是一组具有相同数据类型的值的集合。 例:
整数;
实数;
介于某个取值范围的整数;
指定长度的字符串集合;
{‘男’,‘女’};
……

二、笛卡尔积

笛卡尔积
给定一组域D1,D2,…,Dn,允许其中某些域是相同的。
D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn =
{(d1,d2,…,dn)|di∈Di,i=1,2,…,n}
所有域的所有取值的一个组合,所有组合的集合不能重复

元组(Tuple
笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组
例如:(张三,女,21),(李四,男,19)
(张清玫,计算机专业,李勇)、
(张清玫,计算机专业,刘晨) 等 都是元组

分量(Component)
笛卡尔积元素(d1,d2,…,dn)中的每一个值di 叫作一个分量
例如:张三、女、21、李四、男、19等都是分量
张清玫、计算机专业、李勇、刘晨等都是分量

基数(Cardinal number)
若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为:
在这里插入图片描述

笛卡尔积的表示方法
笛卡尔积可表示为一张二维表
表中的每行对应一个元组,表中的每列对应一个域。

例如, 给出3个域:
D1=导师集合SUPERVISOR={张清玫,刘逸}
D2=专业集合SPECIALITY={计算机专业,信息专业}
D3=研究生集合POSTGRADUATE={李勇,刘晨,王敏}

D1,D2,D3的笛卡尔积为
D1×D2×D3={
(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),
(张清玫,计算机专业,王敏),(张清玫,信息专业,李勇),
(张清玫,信息专业,刘晨),(张清玫,信息专业,王敏),
(刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),
(刘逸,计算机专业,王敏),(刘逸,信息专业,李勇),
(刘逸,信息专业,刘晨),(刘逸,信息专业,王敏) }

基数为2×2×3=12
在这里插入图片描述

三、关系和笛卡尔积

D1,D2,…,Dn的笛卡尔积的某个子集才有实际含义
例:表2.1 的笛卡尔积没有实际意义
取出有实际意义的元组来构造关系

关系:SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)
假设:导师与专业:n:1, 导师与研究生:1:n
主码:POSTGRADUATE(假设研究生不会重名)
在这里插入图片描述
(1) 关系
D1×D2×…×Dn的有实际意义子集叫作在域D1,D2,…,Dn上的关系,常常表示为
R(D1,D2,…,Dn)
R:关系名
n:关系的目或度(Degree)

注意:
关系是笛卡尔积的有限子集。无限关系在数据库系统中是无意义的。

由于笛卡尔积不满足交换律,即
(d1,d2,…,dn )≠(d2,d1,…,dn )
但关系满足交换律,即
(d1,d2 ,…,di ,dj ,…,dn)=(d1,d2 ,…,dj,di ,…,dn) (i,j = 1,2,…,n)
解决方法:为关系的每个列附加一个属性名以取消关系元组的列有序性

(2)元组
关系中的每个元素是关系中的元组,通常用t表示。

(3)单元关系与二元关系
当n=1时,称该关系为单元关系(Unary relation)
或一元关系
当n=2时,称该关系为二元关系(Binary relation)

(7)三类关系
基本关系(基本表或基表)
实际存在的表,是实际存储数据的逻辑表示
查询表
查询结果对应的表
视图表
由基本表或其他视图表导出的表,是虚表,不对
应实际存储的数据

(8)基本关系(基本表或基表)的性质
① 列是同质的(Homogeneous)。列中的分量是同类型数据,
② 不同的列可出自同一个域
其中的每一列称为一个属性
不同的属性要给予不同的属性名
③ 列的顺序无所谓,列的次序可以任意交换
④ 任意两个元组的候选码不能相同
⑤ 行的顺序无所谓,行的次序可以任意交换
⑥ 分量必须取原子值。即每个分量都是不可分的数据项。
(属性是不可分割的数据项)

上例中也可以只给出两个域:
人(PERSON)=张清玫,刘逸,李勇,刘晨,王敏
专业(SPECIALITY)=计算机专业,信息专业
SAP关系的导师属性和研究生属性都从PERSON域中取值
为了避免混淆,必须给这两个属性取不同的属性名,而不能直接使
用域名。
例如定义:
导师属性名为SUPERVISOR-PERSON(或SUPERVISOR)
研究生属性名为POSTGRADUATE-PERSON(或POSTGRADUATE)

注意:
③ 列的顺序无所谓
列的次序可以任意交换
遵循这一性质的数据库产品(如ORACLE),
增加新属性时,永远是插至最后一列
但也有许多关系数据库产品没有遵循这一
性质,例如FoxPro仍然区分了属性顺序

注意:
⑤ 行的顺序无所谓
行的次序可以任意交换
遵循这一性质的数据库产品(如ORACLE),
插入一个元组时永远插至最后一行
但也有许多关系数据库产品没有遵循这一性
质,例如FoxPro仍然区分了元组的顺序


版权声明:本文为weixin_47005624原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。