Chapter02 - 关系数据库
ch08 关系、关系模式和关系数据库
域
域是一组具有相同数据类型的值的集合,可以是有穷的也可以是无穷的,是一种单一的数据类型的取值范围
复合数据类型:简单数据类型的复合
笛卡尔积(Cartesian Product)
给定一组域D1,D2笛卡尔积为
D1×D2×…×Dn={(d1,d2,…,dn)|di属于Di,i=1,2,…,n}
- 所有域的所有取值(每个域中选取一个合适的值)的一个组合。
- 不能重复 – 集合的基本要求
- Di和Dj的域是可以相同的,例如都是int,一个代表年龄,一个代表得分,是可以组合成一个复杂数据类型。
- 笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组
- 笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量
- 若Di(i=1,2,…,n)为有限集,域中所包含的值的个数称为域的基数,其基数为mi (i = 1,2,… ,n),则D1×D2×…×Dn的基数M为:M=mi的连乘;
- 元祖也是一个集合,是无序的。
举例
关系
D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为R(D1,D2,…,Dn)。
R :关系名
n :关系的目或度(Degree)
- 当n=1时,称该关系为单元关系(Unary relation)或一元关系
- 当n=2时,称该关系为二元关系(Binary relation)
关系可以是空集。对关系进行增删后,关系就会改变。所以是只在当下作用,是对客观世界某一时刻的状态的正确匹配。
关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。
属性
- 关系中不同列可以对应相同的域
- 为了加以区分,必须对每列起一个名字,称为属性(Attribute)
- n目关系必有n个属性
- 不同的属性可以共享一个域。age和score都可以是int域的
码
码反映了数据的依赖关系F
:属性间数据的依赖关系的集合,说明了有哪些码可以挑选
候选码(Candidate key)
- 若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。在学生中,假设性别、年龄、学号的组成的元祖可以区分其他学生,则这三个是候选码。
- 候选码是有穷属性的子集,候选码是可穷举的。
- 简单的情况:候选码可以只包含一个属性
- 最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)。关系是一个集合,所以不会出现相同的元祖。
主码
- 若一个关系有多个候选码,则选定其中一个为主码(Primary key)
主属性
- 候选码的诸属性称为主属性(Prime attribute)
- 不包含在任何侯选码中的属性称为非主属性(Non-Prime attribute)或非码属性(Non-key attribute)
关系的类别
对关系操作得到的结果也是一个关系 – > 可以实现流水线操作
- 基本关系(基本表或基表)实际存在的表,是实际存储数据的逻辑表示
- 查询表查询结果对应的表
- 视图表由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
- 知道更少的内容,开发更具有效率
- 更高的安全性
- 可以掩盖部分元组、也可以掩盖部分属性,也可以都掩盖部分。
- 实际上是在一个集合中挑选子集的过程,并对子集处理,是实现外模式的一种手段
基本关系的性质
关系模式与关系
关系模式
- 对关系的描述
- 静态的、稳定的
关系
- 关系模式在某一时刻的状态或内容
- 动态的、随时间不断变化的
关系模式和关系往往笼统称为关系通过上下文加以区别
关系数据库
关系数据库
- 在一个给定的应用领域中,所有关系的集合构成一个关系数据库
关系数据库的型与值
- 关系数据库的型: 关系数据库模式,是对关系数据库的描述
- 关系数据库的值: 关系模式在某一时刻对应的关系的集合,通常称为关系数据库
ch09 关系的完整性
三类完整性约束
实体完整性和参照完整性关系
- 模型必须满足的完整性约束条件称为关系的两个不变性,应该由关系系统自动支持
用户定义的完整性
- 应用领域需要遵循的约束条件,体现了具体领域中的语义约束
实体完整性 Entity Integrity
实体完整性规则(Entity Integrity)— 确保不能犯错,不能先取Null
,然后再对Null
取值。如果有多个Null
,就无法正常赋值了。
- 若属性A是基本关系R的主码属性,则属性A不能取空值
- 空值就是“不知道”或“不存在”或“无意义”的值
- 主码有属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体
例:选修(学号,课程号,成绩)
- “学号、课程号”为主码
- “学号”和“课程号”两个属性都不能取空值 — 主码的任意一个属性值不能为空
对于实体完整性规则说明如下:
- 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。例如学生关系对应于学生的集合。
- 现实世界中的实体是可区分的,即它们具有某种唯一性标识。例如每个学生都是独立的个体,是不一样的。
- 相应地,关系模型中以主码作为唯一性标识。
- 主码中的属性即主属性不能取空值。如果主码存在一个属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性。
参照完整性
关系间的引用
外码
设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是R的外码(Foreign Key)
- 基本关系R称为参照关系(Referencing Relation)
- 基本关系S称为被参照关系(Referenced Relation)或目标关系(Target Relation)
其中
- 关系R和S不一定是不同的关系
- 目标关系S的主码Ks和参照关系的外码F必须定义在同一个(或一组)域上
- 外码并不一定要与相应的主码同名
- 当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别
A表中有外码指向B,则
- 创建时需要先创建B,因为A是依赖B存在的
- 删除时需要先删除A,因为如果先删除B,则A依赖B就会出错。
参照完整性规则
- 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
- 或者取空值(F的每个属性值均为空值):F中有一个为空值,则所有的都为空值。因为R的外码F实际上是映射了S的主码Ks,而Ks不能为空。所以,如果F中有空值,则必须不存在这种对应关系,否则会导致Ks也为空。
- 或者等于S中某个元组的主码值
用户定义的完整性
- 针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
- 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不需由应用程序承担这一功能
- 例:课程(课程号,课程名,学分)
- “课程号”属性必须取唯一值非主属性
- “课程名”也不能取空值“
- 学分”属性只能取值{1,2,3,4}
- 数据对象本身是不是业务逻辑的一部分
ch10 关系操作和关系代数
关系操作
设关系模式为R(A1,A2,…,An)
- 它的一个关系设为R
- t属于R表示t是R的一个元组
- t[Ai]则表示元组t中相应于属性Ai的一个分量
- 若A={Ai1,Ai2,…,Aik},其中Ai1,Ai2,…,Aik是A1,A2,…,An中的一部分,则A称为属性列或属性组。
- t[A]=(t[Ai1],t[Ai2],…,t[Aik])表示元组t在属性列A上诸分量的集合。
- A ̅则表示{A1,A2,…,An}中去掉{Ai1,Ai2,…,Aik}后剩余的属性组。
关系代数
并操作
其实就是同一个关系下的两个实例进行并操作
差操作
不满足交换律
交操作
笛卡尔积
- 通过两个关系,构成更大的关系。
- 不需要两个关系是同一个关系集合
- 关系的笛卡尔积是值的笛卡尔积。域的笛卡尔积和值的笛卡尔积的区别?
举例
记号
- 属性组是所有属性的一个子集
t[Ai]
表示的是一个分量,t[A]
表示的是一个分量的集合
选择
- 结果中属性是完备的,只是减少了元祖的数量。
- 操作的结果也是一个集合
投影
挑选一部分的属性,排除掉对应解决问题没有作用的属性
因为关系是一个集合,所以删除了特定列后,会导致重复的元祖出现,需要额外操作。属于投影的副作用
连接
- 等值连接:A可以是年龄,B是价格,A、B属性值相等,就可以连接。A B并不一定要相等
- 自然连接:A B中是相同的含义、相同的域,只是隶属于不同关系
R的第四个元组和S的第五个元组都是悬浮元组
外连接
除操作
数据库-——关系代数的除法运算
除操作是同时从行和列的角度进行运算
- 棕黄方框只有一个
- 蓝绿色方框的a1都满足BC中的
- 通过象集的概念理解
举例
- 先投影,保留需要的列
- 通过除法
sno
学号cno
课程号sc
选修关系cpno
先行课