数据库系统概念学习笔记 (一)
最近重新看一遍数据库系统概念,记录一些常用概念,方便以后查阅。
参考书:数据库系统概念(王珊)。
一. 数据模型
- 层次模型: 以记录类型为结点的有向树,有且仅有一个结点无父结点。 是网状模型的一个特例。
优点:性能高。
缺点:现实世界中实体大部分不是层次模型,逻辑上不好理解。 - 网状模型: 允许有多双亲结点,同时允许多个结点无双亲的模型。
优点: 更贴近现实世界逻辑。
缺点: 复杂度高,不易理解。 - 关系模型:由规范化的二维表构成。
优点: 简洁,方便使用。
缺点: 查询效率略低。不过可从DBMS层面上优化。
二.三级模式和二级映像
-
三层模式:
- 内模式internal schema:物理结构和储存方式描述。一个DB只有一个内模式。
- 模式schema: 逻辑模式,数据库中数据逻辑结构和特征描述。一个DB对应一个模式。可以理解为抽离了具体数据的结构描述。
- 外模式external schema: 用户看到的局部数据的逻辑结构和特征描述。 用户级。 可以理解为包括了各种数据的table和view。
-
二级映像: 为了实现3种模式之间的转换提出的概念。可以理解为各层模式之间的接口,为了脱耦存在的。各层模式有改变时不影响其他模式。
三.关系数据库
- 一些定义
元组: 表中一行。
属性: 表中一列。
码: 即键,可以唯一确定一个元组的、表中的某个属性组。
分量: 元组中一个属性值。必须具备不可再分的原子性。
域: 一组具有相同数据类型的值的集合。
候选码: 某一属性值的值可以唯一地标识一个元组,而其子集不能。称为候选码。 一个关系可以有多个候选码。
主码:即主键,若一个关系有多个候选码,选取其中一个为主码。
笛卡尔积: 两个关系的乘积。比如A关系有7个元组,B关系有3个元组,则A * B 为21个元组。笛卡尔积本身对现实逻辑没有太大意义,主要用于 关系代数中的计算。
型: 即模式,对关系数据库的描述。
值: 这些型在某一刻对应的关系的结合。
四.关系操作
- 基本关系操作:
选择select、投影project、并union、差except、笛卡尔积。 - 扩展关系操作:
除divide、交intersection、连接join 。 - 关系代数和关系验算在表达能力上是等价的,SQL是介于两者之间的一种非过程化查询语言。
- 非过程化: 存取路径由DBMS优化。不用用户特意指出。
- 关系完整性:
此约束实际是对现实世界的要求,任何关系任何时可均应当满足此类予以约束。- 实体完整性: 主属性不得为空。即:主码不得为空。否则元组无法唯一标识。
- 参照完整性: 若外码F是R的外码,是S的主码。则R中的F,要么为空要么为S中已经存在的值。
- 用户定义完整性: 依据用户需求实际对关系的一些约束。比如,一个关系中的学生性别:约束在男或女上。
- 关系代数:
只记录部分,具体可看参考书。- 选择:筛选元组。
- 投影:筛选属性。
- 连接:
设对两关系A、B进行连接- 等值连接: 两表的等值连接将选取两表 A * B 后的笛卡尔积中 ,属性相等的那些元组。
- 自然连接: 等值连接的一种,会自动比较A、B中同名属性组,并在结果中把重复属性列去除。比一般连接多了个去除重复列的操作。
- 悬浮元组: A、B进行自然连接时,因为在公共属性上取值不同而被舍弃的那些元组。
- 外链接: 将悬浮元组也保留,其他属性填入空值,即为外链接。
- 右外连接: 保留 A 、B连接时的右表B的悬浮元组。
- 左外连接: 保留 A 、 B连接时的左表A的悬浮元组。
- 除操作: A关系 除 B关系结果为C关系,则C 包含所有在A中而不再B中的属性和值。且C与B中的元组的所有组合均在A中。 这个有点不好理解,可以举一个现实中的例子: 有选课SC(C# S#) 和课程表C(C#表,需要找出“选修了所有课程的学生”即可用SC除C。
五.exits和in的区别与比较 (目前不确定是否完全准确)
- in查询原理:可以理解为内表做一份缓存,遍历外表,每次对内表的缓存遍历查一次是否in。
- exits原理:遍历外表,每次查询内表是否“存在”匹配项,返回true or false,结果本身不返回。
- 区别: exist会针对子查询的表使用索引。not exist会对主子查询都会使用索引.。in与子查询一起使用的时候,只能针对主查询使用索引. not in则不会使用任何索引。
- 使用时机:内表大一般用exits,外表大一般用in,两表相仿则无所谓。
参考链接
待续