数据库系统概念学习笔记 (一)

数据库系统概念学习笔记 (一)

最近重新看一遍数据库系统概念,记录一些常用概念,方便以后查阅。
参考书:数据库系统概念(王珊)。

一. 数据模型
  • 层次模型: 以记录类型为结点的有向树,有且仅有一个结点无父结点。 是网状模型的一个特例。
    优点:性能高。
    缺点:现实世界中实体大部分不是层次模型,逻辑上不好理解。
  • 网状模型: 允许有多双亲结点,同时允许多个结点无双亲的模型。
    优点: 更贴近现实世界逻辑。
    缺点: 复杂度高,不易理解。
  • 关系模型:由规范化的二维表构成。
    优点: 简洁,方便使用。
    缺点: 查询效率略低。不过可从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,两表相仿则无所谓。
    参考链接

待续

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值