关系模型是E-R模型之后的又一大模型,而该模型也是现在的数据库中运用最广泛的模型,ORACLE,DB2都是基于关系数据库模型的。而且为关 系模型制定查询语言也是非常直截了当的事情(不知道又没有谁想想过E-R模型里面的查询语句应该是什么样子的),关系模型甚至还给出了一个让E-R模型平 滑转换到关系模型的方法。这样,关系模型就几乎成了E-R模型的一个完整替代品。本章讨论的就是这么三个问题-----关系模型的概念,关系查询语言,E -R模型转换为关系模型。
1.关系模型的基本概念
- 关系:一系列值之间的联系就叫做关系。
- 关系集合:一系列相同关系组成的集合就叫做关系集合。
- 关系数据库:由一组关系集合(表)组成的集合。
- 关系查询语言:操作关系获取信息的语言,例如SQL,就是其中一种实现。
2.E-R模型和关系模型的关系
因为E-R模型的设计比较直观,而可惜的是直接支持E-R模型的商业数据库确实少只有少,更多的是支持关系模型的。所以提供一个比较完善的E-R模型和关系模型转换方法是比较重要的。这里强调的是E-R模型中的主码怎么转换到关系模型中。
- 强实体集:实体集的主码成为关系的主码。
- 弱实体集:依赖的强实体集和弱实体集的分辨符的组合成为关系的主码。
- 联系集:按照对应情况
- 1-1:参与联系的任意一方的主码成为关系的主码。
- 1-N:参与联系的多方主码成为关系的主码。
- N-N:参与联系的各方的主码的组合成为关系的主码。
- 多值属性:多值属性的主码可以用采用该属性的实体集的主码和属性值组成的码作为关系的主码。
从E-R模式中导出的一个关系模式r1可能在他的属性中包括另一个模式r2的主码。那么这个属性叫做r1参照r2的外码(foreign-key),注意,模式图里面是没有foreign-key的。
3.关系代数
可以算作关系模式核心中的核心,都比较简单,这里来一个索引式的纪录。
- 基本运算
关系模型是E-R模型之后的又一大模型,而该模型也是现在的数据库中运用最广泛的模型,ORACLE,DB2都是基于关系数据库模型的。而且为关 系模型制定查询语言也是非常直截了当的事情(不知道又没有谁想想过E-R模型里面的查询语句应该是什么样子的),关系模型甚至还给出了一个让E-R模型平 滑转换到关系模型的方法。这样,关系模型就几乎成了E-R模型的一个完整替代品。本章讨论的就是这么三个问题-----关系模型的概念,关系查询语言,E -R模型转换为关系模型。
1.关系模型的基本概念
- 关系:一系列值之间的联系就叫做关系。
- 关系集合:一系列相同关系组成的集合就叫做关系集合。
- 关系数据库:由一组关系集合(表)组成的集合。
- 关系查询语言:操作关系获取信息的语言,例如SQL,就是其中一种实现。
2.E-R模型和关系模型的关系
因为E-R模型的设计比较直观,而可惜的是直接支持E-R模型的商业数据库确实少只有少,更多的是支持关系模型的。所以提供一个比较完善的E-R模型和关系模型转换方法是比较重要的。这里强调的是E-R模型中的主码怎么转换到关系模型中。
- 强实体集:实体集的主码成为关系的主码。
- 弱实体集:依赖的强实体集和弱实体集的分辨符的组合成为关系的主码。
- 联系集:按照对应情况
- 1-1:参与联系的任意一方的主码成为关系的主码。
- 1-N:参与联系的多方主码成为关系的主码。
- N-N:参与联系的各方的主码的组合成为关系的主码。
- 多值属性:多值属性的主码可以用采用该属性的实体集的主码和属性值组成的码作为关系的主码。
从E-R模式中导出的一个关系模式r1可能在他的属性中包括另一个模式r2的主码。那么这个属性叫做r1参照r2的外码(foreign-key),注意,模式图里面是没有foreign-key的。
3.关系代数
可以算作关系模式核心中的核心,都比较简单,这里来一个索引式的纪录。
- 基本运算
- 选择运算
- 投影运算
- 并运算
- 集合差运算
- 迪卡儿集运算
- 更名运算
- 附加运算
- 集合交
- 自然连接
- 除运算
- 扩展的关系代数运算
- 广义投影
- 聚集函数(avg,min,max,sun,group by ,etc)
- 外连接(左外连接,右外连接,全外连接)
4.数据库的修改
- 删除
- 插入
- 更新
5.视图
目前所给的例子,都是在逻辑层(参考第一章)上进行的操作,而有的时候,我们需要做出来一个虚拟的表给用户看,除安全性考虑(视图是只读的)之外,更加考虑到用户的直觉问题(让他看到更合理的数据)。
关于视图,其实很简单,就是一个查询语句而已,使用它的时候需要注意如下几点:
- 视图的更新通常是在显示的时刻(这非常像写时复制技术)
- 视图是只读的(因为通过视图更新是非常混乱的事情)
- 视图有可能被数据库缓存,所以对于查询量高的查询,尽量用试图吧。
- 视图是可以被展开的,也就是说,可以用视图来定义视图(这个功能很cool吧),但是不可以递归定义。
- 选择运算
- 投影运算
- 并运算
- 集合差运算
- 迪卡儿集运算
- 更名运算
- 附加运算
- 集合交
- 自然连接
- 除运算
- 扩展的关系代数运算
- 广义投影
- 聚集函数(avg,min,max,sun,group by ,etc)
- 外连接(左外连接,右外连接,全外连接)
4.数据库的修改
- 删除
- 插入
- 更新
5.视图
目前所给的例子,都是在逻辑层(参考第一章)上进行的操作,而有的时候,我们需要做出来一个虚拟的表给用户看,除安全性考虑(视图是只读的)之外,更加考虑到用户的直觉问题(让他看到更合理的数据)。
关于视图,其实很简单,就是一个查询语句而已,使用它的时候需要注意如下几点:
- 视图的更新通常是在显示的时刻(这非常像写时复制技术)
- 视图是只读的(因为通过视图更新是非常混乱的事情)
- 视图有可能被数据库缓存,所以对于查询量高的查询,尽量用试图吧。
- 视图是可以被展开的,也就是说,可以用视图来定义视图(这个功能很cool吧),但是不可以递归定义。