一、关系模型:
- 关系模型利用表的集合来表示数据和数据间的联系
即一个数据库中各个表之间是相互依赖的,每个表存储相对独立的数据块,而各个数据块之间又相互联系
- 关系模型在逻辑层和视图层描述数据
对于一个数据库来说,逻辑层就是关系模型具体的实践,而视图层是每一个不同的外模式所看到的部分的逻辑层
- 关系数据库的结构
关系数据库由表组成,表中的一行代表的是一组值之间的一种联系,术语一行的这组值的序列为元组(tuple)。其中,关系模型的术语里,关系用来代指表,元组用来指代行。
除此之外,一行也可以称为一条记录,一列也可以称为一个字段
表中各个列又是不同的属性,有着不同的域。
域:对应属性的允许取值的集合
每一个列都属于一个域,这个域决定了这个列的取值范围
- 区分数据库模式和数据库实例
数据库模式是数据库的逻辑设计,数据库实例是给定时刻数据的一个快照(或者说是某个元组)
就好比我们设计好的一个类,与我们实例化的这个类的每一个对象。类就是逻辑设计,每一个对象就是一个实例
二、码 (key):
码,是整个关系的一种性质,而不是单个元组的一个性质。关系中的任意两个不同的元组都不允许同时在码属性上具有相同的值。码也可以称为键,是加在数据库上的,对数据的操作加以一定的限制。
- 超码(superkey):使我们在一个关系中唯一标识一个元组的一个或多个属性的集合。
- 候选码(candidate key):任意真子集都不能成为超码的最小超码成为候选码。
- 主码(primary key):在一个关系中区分不同元组的候选码。关系模式的主码属性一般列在其他属性的前面。
- 外码(foreign key):关系模式r1在属性中包括另一个关系模式r2的主码。这个属性在r1上称作参照r2的外码。关系r1也成为外码依赖的参照关系,r2叫做外码的被参照关系。
注:在关系模式种声明外码,也即施加了参照完整性约束,它要求在参照关系中任意元组在特定属性上的取值必须等于被参照关系中某个元组在特定属性上的取值。通俗来说,声明了外码的关系模式对应属性列必须相等,否则会违背参照完整性约束。
三、模式图:
一个含有主码和外码依赖的数据库模式可以用模式图来表示。
以大学组织的模式为例(主码属性用下划线标识,外码依赖用从参照关系的外码属性到被参照关系的主码属性之间的箭头表示。)
模式图包含了每一个关系(每一个表)的内部逻辑设计(有什么数据?有什么约束?)和关系与关系之间的联系
例如课上经常会用到的大学数据库模式 :
四、关系运算:
常用关系运算:
- 从单个关系中选出满足一些特定谓词的特殊元组,结果是一个新关系
- 从一个关系中选出特定的属性列
- 笛卡尔积运算:两个关系元组的所有对合并。
- 连接:把分别来自两个关系的元组对合并成单个元组
自然连接:两个关系上的自然连接运算所匹配的元组在两个关系共有的属性上取值相同。 - 集合运算:并、交、差运算
-
关系代数:
有关笛卡尔积与连接:
连接的操作其实是建立在笛卡尔积上的:
笛卡尔积所作的是简单地把A关系中的每一个元组与B关系中的每一个元组拼接起来。大多数情况下这样的结果是没有意义的。
而一般的连接就是基于笛卡尔积的基础上筛选,例如 A.id = B.id 以选择出有意义的元组
自然连接就是我们无需指定条件,DBMS会自动帮我们找到我们想要的条件,然后执行筛选
一般来说,连接的目的是通过多表连接来弥补一个表信息不足的问题
有些表内存在递归的依赖关系(员工A的老板是另一个人的员工),此时通过自连接可以找到这种内部的递归似的关系。