美文网首页
关系代数

关系代数

作者: lesliefang | 来源:发表于2020-02-21 13:28 被阅读0次

    Database System Concepts 7th 第2章学习

    关系型数据库以集合论,谓词逻辑为基础
    SQL 以关系代数(Relational Algebra)为基础

    一个关系(relation)对应数据库的一张表(table)
    一个关系是多个元组(tuple)的集合,一个元组对应数据库一个表的一行
    一个元组由一系列属性(attribute)组成,一个属性对应数据库一个表的一列

    模式(schema)是关系的逻辑表示
    department (id, dept_name, building, budget)

    数据实现并不严格遵守关系理论,因为关系是集合,集合中不能有重复元素。而数据库中的一个表可以有重复的行。

    superkey(超键):能唯一标识一个关系中元组的一个或多个属性
    candidate keys(候选键):不能再分的 superkey
    primary key (主键):候选键可能有一个或多个,选出来一个作为主键

    对于 department, 假设 id 不重复,dept_name 不重复,id 是 超键, dept_name 也是 超键, (id, dept_name) 合在一起也是 超键。
    但只有 id, dept name 是候选键。 我们可以选择其中一个作为主键。

    Relational Algebra(关系代数)

    关系代数描述关系的运算,对关系执行操作可以生成新的关系。

    Select :
    select1.png

    选择符号是希腊字母读作 sigma
    选择操作相当于SQL中的 where。从关系 instructor 中选出 dept_name 等于物理系的元组。

    Project:(投影)
    project.png

    操作符读作(派)
    只返回部分属性,相当于SQL中的 select

    Composition.png

    操作可以组合,先筛选再投影

    Cartesian-Product (笛卡尔积)
    dikaer.png

    用✖️表示, r1 中的每一行分别对应 r2 中的每一行。如果 r1 有8个元组, r2 有9个元组。做笛卡尔积后得到 72 个元组。

    Join
    join.png

    join 等价于两个关系先做笛卡尔积然后再根据条件筛选

    集合操作(并、交、差)

    union(∪)并集


    union.png

    intersection(∩)交集
    set-difference(-) 差集
    差集求的是在第一个集合里面且不在第二集合里面的元组

    Assignment (<-)中间结果可赋值到一个变量
    variable.png

    重命名

    rename.png

    将关系 E 重命名为 x。
    应为 join 等操作等会出现重复字段, 一个表也可以和自身 join。为了区分左右两边的关系或重名的字段需要重新起一个名字。 SQL 中用 as 实现。

    一个SQL 查询语句会先解析成关系代数表达式,而后用关系代数运算,最后才生成具体的查询步骤。

    相关文章

      网友评论

          本文标题:关系代数

          本文链接:https://www.haomeiwen.com/subject/gfkcqhtx.html