关系模型和关系代数
关系模型
基本术语:
关系模型:用二维表格表示实体集,用关键码表示实体之间联系的数据模型称为关键模型。
在关系模型中,字段称为属性,字段值称为属性值,记录类型称为关系模式。记录称为元组,元组的集合称为关系或实例。一般用大写字母A、B、C...表示单个属性,用大写字母...X、Y、Z表示属性集,用小写字母表示属性值,元组为行(Row), 属性为列(Column)。
关系中的属性的个数称为“元组”,元组个数称为“基数”。
关键码(Key,键)由一个或多个属性组成。在实际使用中,有下列几种键。
- 超键:在关系中能唯一标识元组的属性或属性集称为关系模式的超键;
- 候选键:不含多余属性的超键称为候选键;
- 主键:用户选作元组标识的候选键称为主键。一般不加说明键指主键;
- 外键:如果模式R中属性K是其他模式的主键,那么K在模式R中称为外键。
关系中每一个属性都有一个取值范围,称为属性的值域(Domain),属性A的取值范围用DOM(A)表示。
关系的定义和性质
关系是一个属性数目相同的元组的集合。
在关系模型中,对关系做了下列规范性限制:
- 不可分解:关系中每个属性值都是不可分解的;
- 不重复:关系中不允许出现重复元组;
- 无行序:由于关系是一个集合,因此不考虑元组间的顺序;
- 无列序:元组中的属性理论上也是无序的,但使用时按习惯考虑列的顺序。
三类完整性原则
实体完整性原则:
这条规则要求关系中元组在组成主键的属性上不能有空值。如果出现空值,那么主键值就起不到唯一标识元组的作用。
参照完整性规则:
这条规则的实质是“不允许引用不存在的实体”。该规则在具体使用时有三点可变通:
- 外键和相应的主键可以不同名,只要定义在相同的值域上即可;
- 可以引用本关系中的主键。这样表示同一个关系中不同元组之间的联系;
- 外键值是否为空,应视具体情况而定。
用户定义的完整性原则:
建立关系模型时对属性定义了数据类型可能还满足不了用户的需求。用户应该可以根据具体数据约束,设置完整性原则,设置完整性规则,由系统来检查实施,以统一的方法处理它们,不再由应用程序承担这份工作。
关系模型的三层体系结构
关系模式:
记录类型称为关系模式,而关系模式的集合就是数据库的概念模式。
子模式:
用户所用到的那部分数据的描述。
存储模式:
在DBMS中,关系存储时是作为文件看待的,每个元组就是一条记录。由于关系模式有键,因此存储一个关系可以用散列的方法或索引方法实现。
关系模型的形式定义和优点
关系模型有三个重要的组成部分:数据结构、数据操纵和数据完整性控制。
- 数据结构:数据库中全部数据及其相互联系都被组织成“关系”的形式。关系模型的基本数据类型是关系。
- 数据操纵:关系模型提供一组完备的高级关系运算,以支持对数据库的各种操作;
- 数据完整性原则:数据库中的数据必须满足实体完整性、参照完整性和用户定义完整性原则。
关系模式优点:
- 关系模型提供单一的数据结构形式,具有高度的简明性和精确性;
- 逻辑结构和相应的操作完全独立于数据的存储方式,具有高度的数据独立性;
- 关系模型使数据库的研究建立在比较坚实的数学基础上;
- 为以关系数据库为基础的推理系统和知识库系统的研究提供了方便,并成为新一代数据库技术不可缺少的基础。
关系代数
关系代数的五个基本操作:
- 并(Union):设关系R和S具有相同的关系模式,R和S的并是由属于R或属于S的元组构成的集合,记为R∪S。
- 差(Difference):设关系R和S具有相同的关系模式,R和S的差是由属于R但不属于S的元组构成的集合,记为R-S。
- 笛卡儿积(Cartesian Product):设关系R和S的元组数分别为r和s,R和S的笛卡儿积是一个(r+s)的元组集合,每个元组的前r个分量(属性值)来自R的一个元组,后s个分量来自S的一个元组,记为R×S。
- 投影(Projection):对一个关系进行垂直分割,消去某些列,并重新安排列的排序,用π表示。
- 选择(Selection):根据某些条件对关系进行水平分割,即选取符合条件的元组,用σ表示。
关系代数的四个组合操作:
- 交(Intersection):由即属于R又属于S的元组构成的集合,记为R∩S。这里要求R和S定义在相同的关系模式上。
- 连接(Join):从关系R和S的笛卡儿积中选取属性值满足某一操作θ的元组。
- 自然连接(Natural Join):第一步,计算R和S的笛卡儿积;第二步,挑选公共属性相同的元组;第三步,去掉S中的相关列。
- 除/逆笛卡儿积(Division):R÷S是一个(r-s)元的元组集合,满足下列条件的最大关系:其中每个元组t与S中的每个元组u组成的新元组<t,u>必在关系R中。
关系代数的七个扩充操作:
- 改名:改名运算符用ρS(A1,A2,...An)(R)表示。表示把关系R改名为S,S中的元组和R中一样,属性顺序为A1,A2,...An。如果只需要改名不需要重新排列属性,可以简写为ρS(R)。
- 广义投影:广义投影允许在投影列表中使用算术函数来对投影进行拓展。
- 赋值:赋值运算符“←”,通过把临时变量赋值,可以把关系代数分开写,以把复杂的表达式化整为零,成为简单的表达式。注意:赋值操作不执行关系操作,仅仅是保存关系形式,该表达式可以重复使用。
- 外连接:如果在做R和S的自然连接时,把原本该舍弃的元组也保留在新关系中,同时在这些元组新增的属性上填上空值,这种操作称为“外连接”。同样的,如果只保留R中该舍弃的元组,称为“左外连接”,只保存S中该舍弃的元组,称为“右外连接”。
- 外部并:上面定义R和S的并操作时,规定两者需要有两桶的关系模式。如果关系模式不同,构成的新关系的属性由两者的所有属性组成(公共属性只取一次),新关系的元组由属于R或S的元组组成,同时在元组新增加的属性上填上空值,这种操作称为“外部并”。
- 半连接:定义为R和S的自然连接在关系R的属性集上的投影。半连接主要用于分布式数据库中。
- 聚集操作:指输入一个值的集合,根据该集合得到一个单一值作为结果。常用的聚集函数包括求最大值max,最小值min,平均值avg,总和值sum和计数值count等。