曾经沧海难为水,除却巫山不是云。|

Joey-Wang

园龄:4年3个月粉丝:17关注:0

2021-04-26 21:38阅读: 321评论: 0推荐: 0

《数据库系统概念》第二章

第二章 关系模型介绍

2.1 关系数据库结构

  1. 关系数据库由表组成,每个表有唯一名字。

  2. 表中一行代表了一组值之间的一种 联系,一个表就是这种联系的一个集合。

    数学术语中,元组 只是一组值的序列(或列表)。

    • 在 n 个值之间的一种联系可在数学上用关于这些值的一个 n元组 表示。换言之,n元组 是一个有n个值的元组,它对应表中的一行。
    • 关系是元组的集合。
    • 元组在关系中的顺序无关紧要,但为方便说明,在显示关系时,大多数情况都按第一个属性排序。
  3. 关系模型的术语 ——

    • 关系 :指代表

    • 元组 :指代行

    • 属性 :指代表中的列

    • 关系实例 :表示一个关系的特定实例,即所包含的一组特定的行

    • :对于关系的每个属性,都存在一个允许取值的集合,称为该属性的域

      我们要求对所有关系 r 而言, r 的所有属性的域都是 原子的 。—— 即域中元素都需为不可再分的单元。

    • 空值 null :一个特殊值,表示值未知或不存在。

      空值会给数据库访问和更新带来很多困难,因此应尽量避免使用空值。

2.2 数据库模式

  1. 数据库模式 🆚 数据库实例:前者是数据库的逻辑设计,后者是给定时刻数据库中数据的一个快照。

  2. 关系 🆚 关系模式 🆚 关系实例 :三者的概念对应程序设计语言中的变量、类型定义、变量的值

    • 关系模式不常变化,关系实例可能随时间发生变化。
  3. 关系模式中使用相同属性是将不同关系的元组联系起来的一种方法。

    🌰 department 关系的模式是:department(dept_name, building, budget)

    instructor 关系的模式是:instructor(ID, name, dept_name, salary)

2.3 码

  1. 超码:一个或多个属性的集合,可在一个关系中唯一地标识一个元组。

    形式化描述:设 R 表示关系 r 模式中的属性集合。若我们说 R 的一个子集 Kr 的一个超码,则限制了关系 r 中任意两个不同元组不会在 K 的所有属性上取值完全相等,即若 t1t2r 中且 t1t2 ,则 t1.Kt2.K

    • K 是个超码,则 K 的任意超集也是超码。
  2. 候选码最小的超码,它是一组构成超码的属性集,其任意真子集都不能成为超码。

    • 存在几个不同的属性集都可做候选码的情况。
  3. 主码:被数据库设计者选中的,主要用来在一个关系区分不同元组的候选码。

    • 应选择值从不或极少变化的属性作为主码。

    • 习惯上把一个关系模式的主码属性列在其他属性前面,主码属性加上下划线

      🌰 department(dept_name, building, budget)

  4. 外码:一个关系模式 r1 在它的属性中包含另一关系模式 r2 的主码,则此属性在 r1 上称作参照 r2 的外码。

    • 关系 r1 称为外码依赖的 参照关系r2 称为外码的 被参照关系
    • r1r2 的约束称为 参照完整性约束:要求在参照关系 r1 中任意元组在特定属性上的取值必然等于被参照关系 r2 中某个元祖在特定属性上的取值。

⚠️ 码是整个关系的一种性质,而不是单个元组的性质关系中任意两个不同的元组都不允许同时在码属性上具有相同的值码的指定代表了被建模的实物在现实世界中的约束。

2.4 模式图

模式图:可表示一个含有主码和外码依赖的数据库模式。

  • 关系用矩形表示,矩形上方写关系名,矩形内列出各属性,主码属性用下划线标注。
  • 外码依赖用从参照关系的外码属性到被参照关系的主码属性之间的箭头表示。
  • 模式图能显示外码约束,却没有表现出参照完整性约束,这需通过后面将学习的 实体-联系图 展示。
image-20210426192415566 image-20210426192818243

2.5 关系查询语言

查询语言:用户用来从数据库中请求获取信息的语言。通常比标准的程序设计语言层次更高。可分为:

  1. 过程化语言:用户指导系统对数据库执行一系列操作以计算出所需结果。
  2. 非过程化语言:用户只需描述所需信息,而不用给出获取该信息的具体过程。

实际使用的查询语言同时包含过程化方式与非过程化方式。🌰 SQL

有些”纯“查询语言:关系代数 是过程化的,元组关系演算域关系演算 是非过程化的。

关系代数:包含一个运算的集合,这些运算以一个或两个关系为输入,产生一个新的关系作为结果。

关系演算:使用谓词逻辑来定义所需结果,但不需给出获取结果的特定代数过程。

2.6 关系运算

所有的过程化关系查询语言都提供一组运算,运算施加于单个/一对关系上,结果总是单个关系

常用的关系运算:

  1. 选择元组:从单个关系中选出满足一些特定谓词的特殊元组。其结果是一个新关系,是原始关系的一个 子集

    🌰 从 instructor 关系中选择满足谓词”工资大于 85000 美元“ 的元组。

  2. 选择属性:从一个关系中选出特定的属性(列)。结果是一个只包含被选属性的新关系。

    🌰 从 instructor 关系中只希望列出教师的 ID 和工资。

  3. 连接运算:把分别来自两个关系的元组对合并成单个元组,以此结合两个关系。

    • 自然连接:两个关系上的自然连接运算所匹配的元组在两个关系共有的所有属性上取值相同。
  4. 笛卡尔积运算:也是从两个关系中合并元组,但不同于连接运算,其结果包含来自两个关系元素的 所有对,无论它们的属性值是否匹配。

  5. 集合运算:因为关系是集合,故可在关系上施加标准的集合运算。🌰 并、交、差运算

⚠️ 有时,查询结果中包含重复的元组。

🌰 我们从 instructor 关系中选出 dept_name 属性就可能包含重复。

一些关系语言严格遵守集合的数学定义,会去除重复;但另一些会考虑去重的大量处理,保留重复。

关系代数 是一种过程化关系查询语言:

image-20210426200701903

总结

image-202203260345936

术语回顾

image-20210426200538997

本文作者:Joey-Wang

本文链接:https://www.cnblogs.com/joey-wang/p/14706670.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Joey-Wang  阅读(321)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开