• 个人笔记--数据库理论 01 关系模型介绍——基于《数据库系统概念》第七版


    关系模式

    关系的例子

    1. 关系模型是目前广泛应用的数据模型
    2. 由表的集合构成

    例如

    IDnamedpt_namesalary
    11111JAMCS12345
    1. 元组 tuple:表中的一行,元素无所谓
    2. 属性 attribute : 原子的,不可再分的,要有属性域,如上表的name,dept_name,salary
      1. 空值表示特殊值,表示这个属性未知or不存在

    另外的例子

    关系模式可以表示成
    R ( A 1 , A 2 , … , A n ) R(A_1,A_2,…,A_n) R(A1,A2,An)

    1. A 1 , A 2 , … A n A_1,A_2,…A_n A1,A2,An表示属性
    2. 如 instructor(ID, name, dept_name, salary)
    3. 如 department(dept_name, building, budget)
    4. 关系模式中,相同属性可以把不同关系的元组联系起来

    关系模式与实例

    1. 关系模式:关系的逻辑设计
    2. 关系实例:给定时刻关系中数据的快照
    3. 数据库模式versus 数据库实例 ——类比——> 类型与变量

    关系模式不常变化,关系实例常变化。(可以参考第7版教科书32页的图2-9)


    Keys(键与码)
    K K K唯一识别关系 r ( R ) r(R) r(R)中的一个元组,称 K K K是关系 r ( R ) r(R) r(R)超码(Superkey)

    1. K K K是一个或多个属性的集合, K ⊆ R K\sube R KR
      ( R R R是关系模式 r r r的属性集合 )
    2. 超码可能包含无关紧要的属性
    3. K的任意超集也是超码

    如 {ID}和{ID, name}是instructor的超码

    候选码与主码

    任意真子集不能称为超码的最小超码候选码

    如{ID}是instructor的候选码
    若{name, dept_name}可以唯一确定instructor的各成员,那他也是候选码

    于是需要选择其中一个候选码作为主码(primary key)

    外码

    一个关系模式 ( r 1 ) (r_1) (r1)在其属性上包含另一个关系模式 ( r 2 ) (r_2) (r2)的主码,此属性在 r i r_i ri上称为参照 r 2 r_2 r2的外码(foreign key), r 1 r_1 r1称为外码依赖的参照关系

    如 dept_name是instructor的外码

    参照完整性约束

    参照关系中任意元组在 特定属性(如外码) 的取值,必须等于被参照关系中某个元组在 此特定元素 上的取值

    例外:外码约束

    模式图

    一个含主码与外码依赖的数据库可用模式图表示

    1. 一个关系模式用一个矩形表示
    2. 主码用下划线标注
    3. 外码约束(依赖)用 从参照关系的外码到被参照关系的主码之间的 箭头表示

    在这里插入图片描述

    关系查询语言

    分过程化语言与非过程化语言

    纯查询语言

    1. 关系代数 – 过程化
    2. 元组关系演算 – 非过程化
    3. 域关系演算 – 非过程化

    所有过程化查询语言(如关系代数)都提供一组关系运算,施加于单个关系上或一对关系上,结果为单个关系

    关系代数

    基本关系运算

    选择 σ \sigma σ一元
    投影 Π \Pi Π一元
    ∪ \cup 二元
    − - 二元
    笛卡尔积 × \times ×二元
    更名 ρ \rho ρ一元

    交连接赋值都可由上述内容引申

    选择

    选择满足给定为此的元组
    σ p ( r ) \sigma_p(r) σp(r)
    其中 p p p是选择谓词

    在这里插入图片描述
    σ p ( r ) = { t ∣ t ∈ r ∧ p ( t ) } \sigma_p(r) = \{t|t\in r\land p(t) \} σp(r)={ttrp(t)}

    1. p是一个or多个元组选择条件组成的为此,由 ∧ ∨ ¬ \land\quad\lor\quad\lnot ¬连接
    2. p可包含两个属性的比较,如a=b
    3. 条件可以表示为 < 属性 > / < 常量 > " o p r e a t i o n " < 属性 > / < 常量 > <属性>/<常量> "opreation" <属性>/<常量> <属性>/<常量>"opreation"<属性>/<常量>, operation表示比较运算符的一种

    总的来说,就是在最后显示的时候只显示其中某些行。

    投影

    过滤掉特定元素

    Π A 1 , A 2 , … , A m ( r ) \Pi_{A_1,A_2,…,A_m}(r) ΠA1,A2,,Am(r)
    A i A_i Ai属性名, r r r是关系名

    通过去除未列出的列,获得的一个m 列的关系
    在这里插入图片描述

    对比
    σ 去除的是行, Π 去除列 \sigma去除的是行,\Pi去除列 σ去除的是行,Π去除列

    笛卡尔积

    结合来自任意两个关系的信息
    表示 r × s r\times s r×s

    由于相同属性名可能同时出现在 r ( R ) r(R) r(R) s ( S ) s(S) s(S),所以在这个过程中需要rename以区别这些属性

    r × s = { < t , q > ∣ t ∈ r ∧ q ∈ s } r\times s = \{|t\in r\land q\in s\} r×s={<t,q>trqs}

    r有n列m行数据,k有i列j行数据
    r × k 有 n + i 列, m × k 行 r\times k 有n+i列,m\times k 行 r×kn+i列,m×k

    连接运算

    r ⋈ θ s = σ θ ( r × s ) r\Join_\theta s = \sigma_\theta(r\times s) rθs=σθ(r×s)

    θ \theta θ R ∪ S R\cup S RS模式属性上的一个选择谓词

    在这里插入图片描述

    并运算

    符号表示 r ∪ s = { t ∣ t ∈ r ∨ t ∈ s } r\cup s = \{t|t\in r\lor t\in s\} rs={ttrts}

    如果要让 r ∪ s r\cup s rs有意义,要求两个条件成立

    1. r r r s s s必须同元——属性数目相同
    2. 属性域相同

    本质上是加行

    r − s = { t ∣ t ∈ r ∧ t ∉ s } r-s = \{t|t\in r\land t\notin s\} rs={ttrt/s}
    要求同并运算

    本质上就是减行

    更名运算

    p x ( E ) p_x(E) px(E)
    返回表达式E的结果并把名字x赋予给他

    若表达式E是多元的,可以设置
    p x ( A 1 , A 2 , . . . , A n ) ( E ) p_{x(A_1,A_2,...,A_n)}(E) px(A1,A2,...,An)(E)
    返回E的结果,赋予名字x,各属性更名为 A i A_i Ai

    在这里插入图片描述

    总结与其他关系运算

    基本表达式是如下二者之一:

    1. 数据库的一个关系
    2. 一个常数关系

    其他附加关系运算

    不增强关系代数表达能力,但可简化查询

    1. r ∩ s = { t ∣ t ∈ r ∧ t ∈ s } = r − ( r − s ) r\cap s = \{t|t\in r \land t \in s\} = r-(r-s) rs={ttrts}=r(rs),使用要求同并
    2. 赋值 r ← s r\leftarrow s rs
      将查询表达为一个顺序程序,包括
      ✓一系列的赋值
      ✓一个值被做为查询结果显示的表达式
      ➢ 赋值赋给一个临时关系变量,并不修改数据库关系实例
      ➢ 赋值赋给一个数据库关系,修改数据库关系实例
    3. 连接
      R = ( A , B , C , D ) S = ( E , B , D ) R = (A,B,C,D)\quad S=(E,B,D) R=(A,B,C,D)S=(E,B,D)
      r ⋈ s = Π r . A , r . B , r . C , r . D , s . E ( σ r . B = s . B ∧ r . D = s . D ( r × s ) ) r\Join s = \Pi_{r.A,r.B,r.C,r.D,s.E}(\sigma_{r.B=s.B\land r.D = s.D}(r\times s)) rs=Πr.A,r.B,r.C,r.D,s.E(σr.B=s.Br.D=s.D(r×s))
    4. ÷ \div ÷
    5. 外连接

    r ∩ s = { t ∣ t ∈ r ∧ t ∈ s } r\cap s = \{t| t\in r\land t\in s\} rs={ttrts}
    等价于
    r ∩ s = r − ( r − s ) r\cap s = r-(r-s) rs=r(rs)

    自然连接(不是连接

    如果r和s中有名字相同的列,那么需要先检验这些列内的数据是否一致,将一致的数据额外加上两个集合中都没有的列

    R = (A, B, C, D)
    ✓ S = (E, B, D)
    ✓ 自然连接结果的关系模式为(A, B, C, D, E)
    (如果是连接时 A,B,C,D,E,B,D)
    r ⋈ s = Π r . A , r . B , r . C , r . D , s . E ( σ r . B = s . B , r . D = s . B ( r × s ) ) r\Join s = \Pi_{r.A, r.B, r.C, r.D, s.E}(\sigma_{r.B= s.B, r.D=s.B}(r\times s)) rs=Πr.A,r.B,r.C,r.D,s.E(σr.B=s.B,r.D=s.B(r×s))
    在这里插入图片描述

    赋值

    赋值操作( ← \leftarrow )可以使复杂查询的表达变得简单,即将查询表达为
    一个顺序程序,包括
    ✓一系列的赋值
    ✓一个值被做为查询结果显示的表达式
    ➢ 赋值赋给一个临时关系变量,并不修改数据库关系实例
    ➢ 赋值赋给一个数据库关系,修改数据库关系实例

    参考乘的逆运算即可
    在这里插入图片描述

    Conclusion

    在这里插入图片描述

  • 相关阅读:
    分享Markdown编写文档的技巧
    JavaScript 62 JavaScript 版本 62.7 Internet Explorer - Edge
    解决 webpack 配置 sass-loader后报错,无法正常build
    【PMP】发起人
    一开始,我以为是跨域问题,原来是413
    猿创征文 | 组件的定义及复用性,局部组件和全局组件(2)
    国庆10.1
    LeetCode142.环形链表-II
    Hive 常用存储、压缩格式
    智慧水务,水务自动化无线监控方案
  • 原文地址:https://blog.csdn.net/JamSlade/article/details/126931704