一、候选码、主码和外码
1. 候选码(Candidate Key)
定义:能唯一标识关系中元组的一个属性或属性集,称为候选码。
性质:具有唯一性和最小性。
2. 关系的主码和外码
主码
- 定义:从多个候选码中选择一个作为查询、插入、删除元组的操作变量,被选用的候选码称为主关系码(主键,主码,关系键,关键字)
- 每个关系必定有且只有一个主码,选择后不能重复。
关系的主属性
- 主属性(Prime Attribute):包含在主码中的各个属性称为主属性。
- 非主属性(Non-Prime Attribute):不包含在任何候选码中的属性称为非主属性(或非码属性)。
- 全码: 所有属性的组合式关系的候选码。
- 超码:包含候选码的属性组合。
外码
- 定义:如果关系R2的一个或一组属性X不是R2的主码,而是另一个关系R1的主码,则该属性或属性组X称为关系R2的外部关系键或外码(Foreign Key),并称R2为参照关系(Referencing Relation),关系R1称为被参照关系(Referenced Relation)。
- 被参照关系的主码和参照关系的外码必须定义在同一个域上。
二、关系的完整性
1. 概述
为了维护关系数据库中数据与现实世界的一致性,对关系数据库的插入、删除和修改操作必须有一定的约束条件,这些约束条件实际上是现实世界的要求。任何关系在任何时刻都要满足这些语义约束。
2. 三类完整性约束
实体完整性 必须满足的性质
- 定义:实体完整性是指主码的值不能为空或部分为空。
参照完整性 必须满足的性质
-
定义:如果关系R2的外码X与关系R1的主码相符,则X的每个值
或者等于R1中主码的某一个值 或者 取空值。
用户自定义完整性 具体领域的语义约束
- 定义:针对某一具体关系数据库的约束条件,它反映某一具体应用所设计的数据必须满足的语义要求。
三、关系代数
1. 关系代数的分类及其运算符
- 关系代数是一种抽象的查询语言
- 关系代数的运算对象与运算结果都是关系
- 关系代数运算符
关系代数的运算按运算符的不同主要分为两类
-
传统的集合运算:把关系看成元组的集合,以元组作为集合中元素来进行运算, 其运算是从关系的“水平”方向即行的角度进行的。包括并(∪)、差(-)、交(∩)和广义笛卡尔积(×) 等运算。
-
-
传统集合(除笛卡尔积)是典型的二目运算。因此需要在两个关系中进行,两个关系R,S,若满足
- 具有相同的度
- R中第i个属性和S中第i个属性必须来自同一个域(列同质)
则说关系R、S是相容的。
-
并操作:增加一条记录;
差操作:删除一条记录。
-
-
专门的关系运算:不仅涉及行运算,也涉及列运算,这种运算是为数据库的应用而引进的特殊运算。包括选取(行)、投影(行列均改变)、连接(二目:θ连接 等值/大于/小于,自然连接 去掉重复列)和除法等运算。
-
θ连接:等值连接,小于连接,大于连接
自然连接:在等值连接的情况下,当连接属性X与Y具有相同属性组时,把在连接结果中重复的属性列去掉 -
等值连接与自然连接的区别
自然连接要求相等属性值的属性名相同,而等值连接不要求;
自然连接是去掉重复列的等值连接。 -
除法运算是二目运算,设有关系R(X,Y)与关系S(Y,Z),其中X,Y,Z为属性集合,R中的Y与S中的Y可以有不同的属性名,但对应属性必须出自相同的域。
同时考虑行和列,适合包含“全部”和“至少”之类的查询。
-
四、元组关系的演算
-
定义:元组关系演算中,以元组为单位,通过谓词公式约束所要查找元组的条件,可以表示为 {t |ψ(t)}。
其中,t为元组变量,即查询的目的。ψ称为元组演算的谓词公式,即查询的条件。
-
{t |ψ(t)}表示使为真的元组t的集合。
ψ(t) 可以通过原子公式、约束变量、自由变量和运算符构成。
-
若元组演算公式中的一个元组变量前有全称量词和存在量词,则称该变量为约束元组变量,否则称为自由元组变量。
五、域关系演算
定义:以元组中的域为单位,按照谓词公式所约束的条件查询所需的元组,表示为
{<x1,x2,…xn>|R(x1,x2,…xn)}
- 其中x1,x2,…xn代表域变量,即元组的分量,R代表由原子构成的公式;
- R的定义如元组演算关系,同样是反复由原子公式、自由变量、约束变量和运算符构成。
域关系演算语言
QBE(Query By Example)
- 一种高度的非过程化,基于屏幕表格的查询语言。
- 用户通过填写表格,并给出查询事例的方式获取结果。
- 给出的查询事例是域变量。
QBE语言的使用
关系名 | 属性1 | …… | 属性n |
---|---|---|---|
操作命令 | 属性值或查询条件 | …… | 属性值或查询条件 |
- 操作命令:P打印或显示、U修改、I插入、D删除
- 或关系写在两行中
- 多表查询时,需要给出相同例子的域变量