关系 关系模式 关系型数据库
- 域: 一组具有相同数据类型的值的集合
- 笛卡尔积(实质是一个集合): 给定一组域(允许重复), 则它们的笛卡尔积为, 即所有域所有取值的一个集合, 可以表示为一张二维表, 每行对应一个元素, 每列对应一个域.
- 元组: 笛卡尔积中的一个元素叫做一个n元组
- 分量: 笛卡尔积中元素的每一个值叫做一个分量
- 笛卡尔积的基数: 每个域的基数之积
- 关系: 笛卡尔积的子集(只取符合实际关系的元组), 表示为. R称为关系名, n称为关系的目或度.
- 关系也是一个二维表, 每行对应一个元素(即关系的一个元素), 每列对应一个域
- 属性: 关系中不同列可以对应相同的域, 为了区分必须给每列取一个名字, 称为属性.
- 码
- 候选码: 关系的一个能唯一标识元组(而其子集不能)的属性组
- 极端情况: 候选码只包含一个属性/包含所有属性(全码)
- 主码: 若一个关系有多个候选码, 则选定其中一个为主码
- 主属性: 候选码的所有属性. 其他叫非主属性/非码属性
- 关系类别:
- 基本关系(基本表, 实际存在)
- 查询表(查询结果)
- 视图表(由基本表导出, 不对应实际存储的数据)
- 基本关系性质
- 列是同质的, 每一列分量来自同一个域
- 不同的列可以出自同一个域
- 行/列的次序无所谓
- 任意两个元组的候选码不能相同(废话, 候选码必须是候选码)
- 分量必须取原子值, 即不允许表中有表(1NF)
- 关系模式: 关系的”类”, “型”, 是对关系的静态稳定描述(对应建表语句)
- 包含元组集合的结构(属性集合, 属性的域, 属性与域的映射关系)
- 包含完整性约束条件
- 可以形式化地表示为
- R: 关系名
- U: 属性名的集合
- D: U中属性来自的域的集合
- DOM: 各属性到域的映射的集合
- F: 属性间数据依赖关系的集合
- 可以简记为或, R为关系名, 为属性名
- 关系是变化的具体值, 关系模式是静态的稳定描述.
- 关系数据库: 给定的应用领域中, 所有关系的集合构成一个关系数据库.
- 型: 关系数据库模式
- 值: 某一时刻对应的关系的集合
三类完整性条件
- 实体完整性
- 内容: 主属性不能取空值
- 针对基本关系, 代表现实中实体可以唯一区分
- 强制性满足
- 参照完整性
- 内容: 外码要么取被参照关系中存在的主码值, 要么取空值
- 外码: 关系R中的一个非码属性F, 与关系S的主码属性G对应, 则称F是R中的一个外码.
- R(包含外码的关系)为参照关系
- S(以R的外码为主码的关系)为被参照关系
- F和G必须定义在同一个域, 但是不一定要同名
- 代表要么未分配, 要么与已存在的外部实体产生联系, 不能与不存在的外部实体关联.
- 强制性满足
- 用户定义的完整性
- 具体应用领域涉及的需要遵循的约束条件, 体现具体领域的语义约束
- 由用户自行定义的附加语义限制
关系操作和关系代数
重点!
集合, 符号, 选择, 投影, 连接, 左连, 右连, 自然连接(定义不用严格知道, 知道操作执行, 能够得到结果)
操作的语义
关系操作
常用操作:
- 查询操作: 选择, 投影, 连接, 除, 并, 差, 交, 笛卡尔积
- 数据更新操作: 插入, 删除, 修改(增删改)
关系代数
抽象的查询语言, 用对关系的运算来表达查询
包含集合运算符(面向行)和专门的关系运算符(面向行和列), 运算的对象和结果都是关系

特点: 集合操作方式, 操作的对象和结果都是集合
记号补充
- 表示元组t中属性对应的分量
- 若, 其中是属性中的一部分, 则A称为属性列或属性组(全部属性的子集)
- 表示元组t在属性组A上诸分量的集合(即只取属性组A中包含的属性)
- 则表示中去掉后剩余的部分(属性组的补集)
- 设n目关系, m目关系, , , 则
- 称为元组的连接, 组成一个m+n列的元组
- 象集: 给定一个关系, 其中和为属性组. 设某元组t在上的属性取值, 则取值在中的象集为
- 非形式化解释: 关系中当部分属性的具体值取定时, 剩下的一部分属性的所有可能取值集合.
操作语义
五种基本关系代数运算: 并, 差, 投影, 选择, 笛卡尔积
- 并 : 取两个关系的元组的并集(纵向拼接). 前提: 两个关系的属性数相同, 且相应的属性取自同一个域.
- 差 : 取元组的差集, 即代表从中去掉属于的元组. 前提: 两个元组的属性数相同, 且相应的属性取自同一个域.
- 交 : 取两个关系的元组的交集, 只选出同时属于两个关系的元组. 前提: 两个元组的属性数相同, 且相应的属性取自同一个域.
- (广义的)笛卡尔积 : 行列同时扩充, 两个关系的所有列拼接为新的列, 两个关系的行随意两两拼接成新的行.
- : n目关系, 个元组
- : m目关系, 个元组
- 笛卡尔积: 目关系, 个元组.
- 选择 : 在关系R中选择满足给定条件的元组组成的子集(选出部分行)
- 为选择条件, 为一个逻辑表达式, 取值为真或假, 可以和逻辑运算(与或非)复合.
- 投影 : 从R中选择若干属性列成为新的关系(只看部分列)
- 为中的一个属性组
- 投影不仅取消了部分列, 还可能因为产生重复行而合并某些元组.
- 连接 : 从两个关系的笛卡尔积中选择属性间满足一定条件的元组(取笛卡尔积的子集)
- 为比较运算符, 和是属性数相等且可比较的属性组.
- 特殊的连接类型:
- 等值连接: 为 的情况, 即指定属性组完全相同的元组拼接成新关系中的一行
- 自然连接: 特殊的等值连接, 进行比较的分量必须是相同的属性组, 且在结果中去掉重复的属性列(重复的合并成一列)
- 一般的连接是从行的角度进行拼接, 自然连接还需要同时考虑重复列, 同时从行和列的角度考虑
- 悬浮元组: 不满足连接条件, 没有对应元组的元组, 在连接操作时被舍弃.
- 外连接: 保留悬浮元组的连接, 在未匹配到的属性处填空值.
- 左外连接: 只保留左边关系R中的悬浮元组, 右边留空.
- 右外连接: 只保留右边关系S中的悬浮元组, 左边留空.
- 除 :
- 对
- 找出关系R中 / 满足其象集的并集为 / 关系S中所有属性组Y的可能取值 / 的属性组X的取值 / 组成的集合.
- 除运算就像是在问“在被除数表中, 有哪些‘主体’与除数表中所有的‘特征’都形成了有效的对应关系”, 也就是找出那些“全才”或者“完美匹配”的记录. 它通常用于解决“A 是否包含所有 B”这类问题, 是关系代数中处理“全称量词”式查询的利器
- 同时从行和列角度运算