关系模型
一、数据结构
就是一张二维表,这种表示关系的集合,二维表的一行就是一个对象(实体)
术语:
- 域——表的一列就是一种域,他们拥有相同的数据类型,域必须是原子的,不可分割的
- 元组——表的一行,代表一个实体
- 目、属性——都是描述一个域,也就是描述列的
- 超码——某一个属性集可以唯一标识一张表
- 候选码——最小的超码,候选码集合中的属性不能分割,如果分割就不能唯一标识这张表
- 主码——一般挑最简单的、而且不可能重复和变化的候选码作为主码
- 外码——用来参照其他表的,只能在参照表的主码中选择
二、关系数据操作——集合操作方式
增删改查
其中查询操作可以分为:选择(select)、投影(project)、连接(join)、除(divide)、 并(union)、交(intersection)、差(except)、笛卡尔积等(在后面会细讲)
三、关系数据约束
- 实体完整性——主码不能是空
- 参照完整性——外码要么为空要么是主码
- 数据库模式导航图
- 用户自定义完整性——针对不同的业务会有不同。
1、 限制关系中某些属性的取值要符合业务语义要求。
2、限制关系中某些属性的取值之间需要满足一定的逻辑关系。
3、限制关系中某属性集上的取值必须唯一。
关系代数
关系代数是通过关系代数运算构成的表达式来表达查询
一、传统的集合运算
前提假设:关系r和关系s具有相同的n个属性,且相应的属性取自同一个域,即两个关系的模式或结构相同。t是元组变量,t∈r表示t是r的一个元组。
(说人话就是两张表的表头要一样)
说明:对于笛卡尔积这个传统运算,其实不需要一定有重复的属性(也即是不一定要有相同的表头)
二、专门的关系运算
- 选择——就是横向选择一些满足条件的元组构成表
记忆:在r关系表中找到满足p条件的元组
- 投影——选择某一列的操作
记忆:在关系表r中找到条件A列(或者说属性是A的列)
- 连接——就是对两个表在一定条件下的笛卡尔乘积,也叫θ连接
θ连接运算就是从关系r和s的笛卡尔积r×s中,选取r关系在A属性集上的值与s关系在B属性集上的值满足连接谓词θ的所有元组,即
记忆:在θ条件下对r和s表格进行笛卡尔乘积连接运算分为等值连接和自然连接,等值连接就是θ为等值比较谓词的连接运算
特别要注意关系r3,虽然r1和r2表有完全相同的属性,但是做笛卡尔乘积不会吧重复的属性去掉的,还是照旧做笛卡尔乘积
- 除运算
这里先举一个例子:
需要查找修读过信息学院开设的所有课程的学生学号,如何表达查询?
所以这里给出定义:
理解:
1、设关系r®和s(S),属性集S是R的子集—首先要有两个关系r和s(就好像前面例子的r1和r2两个关系),这两个关系要有相同的属性集,也就是有包含关系,图片说的s包含于r(就好像我们的例子r2有属性值“courseNo”包含于r1的“studentNo,courseNo”)
2、r÷s是关系r中满足下列条件的元组在属性集R-S上的投影—这个的理解就是我们得到的结果一定是大的关系的属性集减掉小的关系的属性集,最后剩下的那个属性集(这里我标记为A集,方便后面描述)
3、任意 t属于r,记 x= t [R-S],则关系r中属性集R-S的取值x的象集Sx包含关系s—也就是在A集中找一个元素x,x的象集Sx要是包含关系(也就是大于等于)s,那这个x就是我们想要的结果的一个元素
4、什么是象集—就是含有x的所有S的元素,简单说就是在r关系中,含有x的所有元祖,去掉x之后的结果。
举一些例子说明
这里无论是R/S1 、R/R2 、R/R3三个关系里,象集都是:
当x=3,它的象集是:101、102、103、104
当x=5,它的象集是:101、102
当x=8,它的象集是:102
当x=10,它的象集是:102、104
所以
在R/S1,结果是3、5、8、10(因为四个元素都包含有102)
在R/R2,结果是3、10(因为只有这两个元素同时都包含102、104)
在R/R3,结果是3(只有一个关系满足条件)