数据库系统的结构

corresponding slide-ch06

数据库系统的结构

  • 从数据库应用开发人员角度看
    • 数据库系统通常采用三级模式结构,是数据库系统内部的系统结构
  • 从数据库最终用户角度看,数据库系统的结构分为:
    • 单用户结构
    • 主从式结构
    • 分布式结构
    • 客户-服务器
    • 浏览器-应用服务器/数据库服务器多层结构等‘

模式和实例

模式(Schema)

  • 数据库逻辑结构和特征的描述
  • 是型的描述,不涉及具体值
    • 反映的是数据的结构及其联系
  • 模式是相对稳定的

    实例(Instance)

  • 反映数据库某一时刻的状态
    • 模式的一个具体值
  • 同一个模式可以有很多实例
  • 实例随数据库中的数据的更新而变动

数据库系统的三级结构模式

模式(Schema)

  • 模式(也称逻辑模式)
    • 数据库中全体数据的逻辑结构和特征的描述
    • 所有用户的公共数据视图
  • 一个数据库只有一个模式
  • 模式的地位:是数据库系统模式结构的中间层
    • 与数据的物理存储细节和硬件环境无关
    • 与具体的应用程序、开发工具及高级程序设计语言无关
  • 模式的定义
    • 数据的逻辑结构(数据项的名字、类型、取值范围等)
    • 数据之间的联系
    • 数据有关的安全性、完整性要求

外模式(External Schema)

  • 也称子模式或用户模式
  • 数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述
  • 数据库用户的数据视图,是与某一应用有关的数据的逻辑表示

    外模式的地位:介于模式与应用之间

  • 模式与外模式的关系:一对多
    • 外模式通常是模式的子集
    • 一个数据库可以有多个外模式。反映了不同的用户的应用需求、看待数据的方式、对数据保密的要求
    • 对模式中同一数据,在外模式中的结构、类型、长度、保密级别等都可以不同
  • 外模式与应用的关系:一对多
    • 同一外模式也可以为某一用户的多个应用系统所使用
    • 但一个应用程序只能使用一个外模式

      外模式的用途

  • 保证数据库安全性的一个有力措施
  • 每个用户只能看见和访问所对应的外模式中的数据

内模式(Internal Schema)

内模式(也称存储模式)

  • 是数据物理结构和存储方式的描述
  • 是数据在数据库内部的表示方式
    • 记录的存储方式(例如,顺序存储,堆存储,hash存储等)
    • 索引的组织方式
    • 数据是否压缩存储
    • 数据是否加密
    • 数据存储记录结构的规定

      一个数据库只有一个内模式

数据库的二级映像与数据独立性

  • 三级模式是对数据的三个抽象级别
  • 二级映象在数据库管理系统内部实现这三个抽象层次的联系和转换
    • 外模式/模式映像
    • 模式/内模式映像

外模式/模式映像

  • 模式:描述的是数据的全局逻辑结构
  • 外模式:描述的是数据的局部逻辑结构
  • 同一个模式可以有任意多个外模式
  • 每一个外模式,数据库系统都有一个外模式/模式映象,定义外模式与模式之间的对应关系
  • 映象定义通常包含在各自外模式的描述中
  • 保证数据的逻辑独立性
    • 当模式改变时,数据库管理员对外模式/模式映象作相应改变,使外模式保持不变
    • 应用程序是依据数据的外模式编写的,应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性

模式/内模式映像

  • 模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系。
    • 例如,说明逻辑记录和字段在内部是如何表示的
  • 数据库中模式/内模式映象是唯一的
  • 该映象定义通常包含在模式描述中
  • 保证数据的物理独立性
    • 当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变
    • 应用程序不受影响。保证了数据与程序的物理独立性,简称数据的物理独立性

数据库的二级映像

数据库模式

  • 即全局逻辑结构是数据库的中心与关键
  • 独立于数据库的其他层次
  • 设计数据库模式结构时应首先确定数据库的逻辑模式

    数据库的内模式

  • 依赖于它的全局逻辑结构
  • 独立于数据库的用户视图,即外模式
  • 独立于具体的存储设备
  • 将全局逻辑结构中所定义的数据结构及其联系按照一定的物理存储策略进行组织,以达到较好的时间与空间效率

    数据库的外模式

  • 面向具体的应用程序
  • 定义在逻辑模式之上
  • 独立于存储模式和存储设备
  • 当应用需求发生较大变化,相应外模式不能满足其视图要求时,该外模式就得做相应改动
  • 设计外模式时应充分考虑到应用的扩充性

    特定的应用程序

  • 在外模式描述的数据结构上编制的
  • 依赖于特定的外模式
  • 与数据库的模式和存储结构独立
  • 不同的应用程序有时可以共用同一个外模式

    数据库的二级映像

  • 保证了数据库外模式的稳定性
  • 从底层保证了应用程序的稳定性,除非应用需求本身发生变化,否则应用程序一般不需要修改

    数据与程序之间的独立性,使得数据的定义和描述可以从应用程序中分离出去

    数据的存取由数据库管理系统管理

  • 简化了应用程序的编制
  • 大大减少了应用程序的维护和修改

数据库系统的组成

corresponding slide-ch07

软硬件平台

硬件平台及数据库

  • 数据库系统对硬件资源的要求
    • 足够大的内存
    • 足够的大的磁盘或磁盘阵列等设备
    • 较高的通道能力,提高数据传送率

      软件

  • 数据库管理系统
  • 支持数据库管理系统运行的操作系统
  • 与数据库接口的高级语言及其编译系统
  • 以数据库管理系统为核心的应用开发工具
  • 为特定应用环境开发的数据库应用系统

人员

数据库管理员(DBA)

  • 决定数据库中的信息内容和结构
  • 决定数据库的存储结构和存取策略
  • 定义数据的安全性要求和完整性约束条件
  • 监控数据库的使用和运行
    • 周期性转储数据库
      • 数据文件
      • 日志文件
        • 系统故障恢复
    • 介质故障恢复
    • 监视审计文件
  • 数据库的改进和重组
    • 性能监控和调优
    • 定期对数据库进行重组织,以提高系统的性能
    • 需求增加和改变时,数据库须需要重构造

系统分析员和数据库设计人员

系统分析员

  • 负责应用系统的需求分析和规范说明
  • 与用户及数据库管理员结合,确定系统的硬软件配置
  • 参与数据库系统的概要设计

    数据库设计人员

  • 参加用户需求调查和系统分析
  • 确定数据库中的数据
  • 设计数据库各级模式

应用程序员

  • 设计和编写应用系统的程序模块
  • 进行调试和安装

最终用户

最终用户(End User)。最终用户通过应用系统的用户接口使用数据库

  • 偶然用户
    • 不经常访问数据库,但每次访问数据库时往往需要不同的数据库信息
    • 企业或组织机构的高中级管理人员
  • 简单用户
    • 主要工作是查询和更新数据库
    • 银行的职员、机票预定人员、旅馆总台服务员
  • 复杂用户
    • 工程师、科学家、经济学家、科技工作者等
    • 直接使用数据库语言访问数据库,甚至能够基于数据库管理系统的应用程序接口编制自己的应用程序

关系、关系模式和关系数据库

corresponding slide-ch08

域(Domain)

  • 域是一组具有相同数据类型的值的集合。例:
    • 整数
    • 实数
    • 介于某个取值范围的整数
    • 指定长度的字符串集合
    • {‘男’,‘女’}
    • ……
  • 例如
    • $D_1=SUPERVISOR ={张清玫,刘逸}$
    • $D_2=SPECIALITY={计算机专业,信息专业}$
    • $D_3=POSTGRADUATE={李勇,刘晨,王敏}$

笛卡尔积

笛卡尔积(Cartesian Product)

  • 给定一组域D1,D2,…,Dn ,允许其中某些域是相同的。
  • $D_1,D_2,…,D_n$的笛卡尔积为
  • 所有域的所有取值的一个组合
  • 不能重复

    元组(Tuple)

  • 笛卡尔积中每一个元素$(d_1,d_2,…,d_n)$叫作一个n元组(n-tuple)或简称元组
  • 例如:
    • (张清玫,计算机专业,李勇)
    • (张清玫,计算机专业,刘晨)

      分量(Component)

  • 笛卡尔积元素$(d_1,d_2,…,d_n)$中的每一个值$d_i$叫作一个分量
  • 例如:
    • 张清玫、计算机专业、李勇、刘晨等

      基数(Cardinal number)

  • 若$D_i(i=1,2,…,n)$为有限集,其基数为$m_i(i= 1,2,…,n)$,则$D_1×D_2×…×D_n$的基数$M$为:

    笛卡尔积的表示方法

  • 笛卡尔积可表示为一张二维表
  • 表中的每行对应一个元组,表中的每列对应一个域

关系

关系(Relation)

  • $D_1×D_2×…×D_n$的子集叫作在域$D_1,D_2,…,D_n$上的关系,表示为$R(D_1,D_2,…,D_n)$
    • R :关系名
    • n :关系的目或度(Degree)
      • 当n=1时,称该关系为单元关系(Unary relation)或一元关系
      • 当n=2时,称该关系为二元关系(Binary relation)

元组:

  • 关系中的每个元素是关系中的元组,通常用$t$表示

关系的表示

  • 关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域

属性

  • 关系中不同列可以对应相同的域
  • 为了加以区分,必须对每列起一个名字,称为属性(Attribute)
  • $n$目关系必有$n$个属性

  • 候选码(Candidate key)
    • 若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码
    • 简单的情况:候选码只包含一个属性
    • 最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)
  • 主码
    • 若一个关系有多个候选码,则选定其中一个为主码(Primary key)
  • 主属性
    • 候选码的诸属性称为主属性(Prime attribute)
    • 不包含在任何侯选码中的属性称为非主属性(Non-Prime attribute)或非码属性(Non-key attribute)

关系的类别

  • 基本关系(基本表或基表)
    • 实际存在的表,是实际存储数据的逻辑表示
  • 查询表
    • 查询结果对应的表
  • 视图表
    • 由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据

基本关系的性质

  • 列是同质的(Homogeneous)
    • 每一列中的分量是同一类型的数据,来自同一个域
  • 不同的列可出自同一个域
    • 其中的每一列称为一个属性
    • 不同的属性要给予不同的属性名
  • 列的顺序无所谓
    • 列的次序可以任意交换
  • 任意两个元组的候选码不能相同
  • 行的顺序无所谓
    • 行的次序可以任意交换
  • 分量必须取原子值

关系模式

  • 关系模式(Relation Schema)是型,关系是值
  • 关系模式是对关系的描述
    • 元组集合的结构
      • 属性构成
      • 属性来自的域
      • 属性与域之间的映象关系
    • 完整性约束条件
  • 关系模式可以形式化地表示为:$R(U,D,DOM,F)$
    • R:关系名
    • U:组成该关系的属性名集合
    • D:U中属性所来自的域
    • DOM :属性向域的映象集合
    • F :属性间数据的依赖关系的集合
  • 关系模式通常可以简记为$R(U)$或$R(A_1,A_2,…,A_n)$
    • R : 关系名
    • $A_1,A_2,…,A_n$ : 属性名
      • 注:域名及属性向域的映象常常直接说明为属性的类型、长度

关系模式与关系

  • 关系模式
    • 对关系的描述
    • 静态的、稳定的
  • 关系
    • 关系模式在某一时刻的状态或内容
    • 动态的、随时间不断变化的
  • 关系模式和关系往往笼统称为关系
    • 通过上下文加以区别

关系数据库

  • 关系数据库
    • 在一个给定的应用领域中,所有关系的集合构成一个关系数据库
  • 关系数据库的型与值
    • 关系数据库的型: 关系数据库模式,是对关系数据库的描述
    • 关系数据库的值: 关系模式在某一时刻对应的关系的集合,通常称为关系数据库

关系的完整性

corresponding slide-ch09

关系的三类完整性约束

  • 实体完整性和参照完整性
    • 关系模型必须满足的完整性约束条件称为关系的两个不变性,应该由关系系统自动支持
  • 用户定义的完整性
    • 应用领域需要遵循的约束条件,体现了具体领域中的语义约束

实体完整性

实体完整性规则(Entity Integrity)

  • 若属性A是基本关系R的主属性,则属性A不能取空值
  • 空值就是“不知道”或“不存在”或“无意义”的值

    例子:

  • 选修(学号,课程号,成绩)
    • “学号、课程号”为主码
    • “学号”和“课程号”两个属性都不能取空值

      实体完整性规则的说明

  1. 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集
  2. 现实世界中的实体是可区分的,即它们具有某种唯一性标识
  3. 关系模型中以主码作为唯一性标识
  4. 主码中的属性即主属性不能取空值
    • 主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第2点相矛盾,因此这个规则称为实体完整性

关系间的引用

  • 在关系模型中实体及实体间的联系都是用关系来描述的,自然存在着关系与关系间的引用。
  • 例1 :学生实体、专业实体以及专业与学生间的一对多联系,学生关系引用了专业关系的主码“专业号”。
    • 学生(学号,姓名,性别,专业号,年龄)
    • 专业(专业号,专业名)
  • 例2:学生、课程、学生与课程之间的多对多联系,选修关系引用了学生关系的主码“学号”和课程关系的主码“课程号”。
    • 学生(学号,姓名,性别,专业号,年龄)
    • 课程(课程号,课程名,学分)
    • 选修(学号课程号,成绩)
  • 例3:学生实体及其内部的领导联系(一对多),学生关系引用了自身的主码“学号”
    • 学生(学号,姓名,性别,专业号,年龄,班长

外码

  • 设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码$K_S$相对应,则称F是R的外码(Foreign Key)
    • 基本关系R称为参照关系(Referencing Relation)
    • 基本关系S称为被参照关系(Referenced Relation)或目标关系(Target Relation)
  • 其中

    • 关系R和S不一定是不同的关系
    • 目标关系S的主码$K_S$和参照关系的外码F必须定义在同一个(或一组)域上
    • 外码并不一定要与相应的主码同名
      • 当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别
  • 例1中,学生关系的“专业号”与专业关系的主码“专业号”相对应

    • “专业号”属性是学生关系的外码
    • 专业关系是被参照关系,学生关系为参照关系
  • 例2中,选修关系的“学号” 与学生关系的主码“学号”相对应,选修关系的“课程号”与课程关系的主码“课程号”相对应
    • “学号”和“课程号”是选修关系的外码
    • 学生关系和课程关系均为被参照关系
    • 选修关系为参照关系
  • 例3中,“班长”与本身的主码“学号”相对应
    • “班长”是外码
    • 学生关系既是参照关系也是被参照关系

参照完整性规则

参照完整性规则

  • 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码$K_S$相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
    • 或者取空值(F的每个属性值均为空值)
    • 或者等于S中某个元组的主码值

      例1

  • 例1中,学生关系中每个元组的“专业号”属性只取两类值:
    • 空值,表示尚未给该学生分配专业
    • 非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配一个不存在的专业

      例2

  • 例2中,选修(学号,课程号,成绩)
  • “学号”和“课程号”可能的取值 :
    • 选修关系中的主属性,不能取空值
    • 只能取相应被参照关系中已经存在的主码值

例3

例3中,学生(学号,姓名,性别,专业号,年龄,班长)

  • “班长”属性值可以取两类值:
    • 空值,表示该学生所在班级尚未选出班长
    • 非空值,该值必须是本关系中某个元组的学号值

用户定义的完整性

  • 针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
  • 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不需由应用程序承担这一功能
  • 例:课程(课程号,课程名,学分)
    • “课程号”属性必须取唯一值
    • 非主属性“课程名”也不能取空值
    • “学分”属性只能取值{1,2,3,4}

关系操作和关系代数

correspoding slide-ch10

基本的关系操作

  • 常用的关系操作
    • 查询操作:选择、投影、连接、除、并、差、交、笛卡尔积
      • 选择、投影、并、差、笛卡尔积是5种基本操作
    • 数据更新:插入、删除、修改
  • 关系操作的特点
    • 集合操作方式:操作的对象和结果都是集合,一次一集合的方式

关系代数

  • 关系代数是一种抽象的查询语言,它用对关系的运算来表达查询
    • 运算对象是关系
    • 运算结果亦为关系
    • 关系代数的运算符有两类:集合运算符和专门的关系运算符
      • 传统的集合运算是从关系的“水平”方向,即行的角度进行
      • 专门的关系运算不仅涉及行而且涉及列

关系代数运算符

传统的集合运算

  • $R$和$S$
    • 具有相同的目n(即两个关系都有n个属性)
    • 相应的属性取自同一个域

并(union)

关系$R$与关系$S$的并由属于$R$或属于$S$的元组组成,记作

差(except)

关系$R$与关系$S$的差由属于$R$而不属于$S$的所有元组组成,记作

交(intersection)

关系$R$与关系$S$的交由既属于$R$又属于$S$的所有元组组成,记作

笛卡尔积(cartesian product)

  • 严格地讲应该是广义的笛卡尔积(Extended Cartesian Product)
  • $R$: n目关系,$k_1$个元组
  • $S$: m目关系,$k_2$个元组
  • $R \times S$
    • 列:(n+m)列元组的集合
      • 元组的前n列是关系$R$的一个元组
      • 后m列是关系$S$的一个元组
    • 行:$k_1 \times k_2$个元组

专门的关系运算

使用的记号

  • 设关系模式为$R(A_1,A_2,…,A_n)$
    • 它的一个关系设为$R$
    • $t\in R$表示$t$是$R$的一个元组
    • $t[A_i]$则表示元组$t$中相应于属性$A_i$的一个分量
    • 若 $A={A{i1},A{i2},…,A{ik}}$ ,其中 $A{i1},A{i2},…,A{ik}$ 是 $A_1,A_2,…,A_n$ 中的一部分,则$A$称为属性列或属性组
    • $t[A]=(t[A{i1}],t[A{i2}],…,t[A_{ik}])$表示元组$t$在属性列$A$上诸分量的集合
    • $\overline{A}$ 则表示 ${A1,A_2,…,A_n}$ 中去掉 ${A{i1},A{i2},…,A{ik}}$ 后剩余的属性组
  • $R$为n目关系,$S$为m目关系。
    • $t_r\in R$,$t_s\in S$, $\overset{\frown} {t_r t_s}$ 称为元组的连接。
    • $\overset{\frown} {t_r t_s}$ 是一个n + m列的元组,前n个分量为$R$中的一个n元组,后m个分量为$S$中的一个m元组。
  • 给定一个关系$R(X,Z)$,$X$和$Z$为属性组。
    • 当$t[X]=x$时,$x$在$R$中的象集(Images Set)为:
    • 它表示R中属性组X上值为x的诸元组在Z上分量的集合

选择(selection)

  • 又称限制(restriction)
  • 选择运算符的含义
    • 在关系$R$中选择满足给定条件的诸元组
    • $F$:选择条件,是一个逻辑表达式,取值为“真”或“假”
      • 基本形式为:$X_1\theta Y_1$,$\theta$表示比较运算符,它可以是$>$,$\ge$,$<$,$\le$,$=$或$<>$
      • l在基本的选择条件上可以进一步进行逻辑运算(与,或,非)
  • 选择运算是从关系R中选取使逻辑表达式$F$为真的元组,是从行的角度进行的运算

投影(projection)

  • 从R中选择出若干属性列组成新的关系
  • 投影操作主要是从列的角度进行运算
  • 投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)

连接(join)

  • 也称为$\theta连接$
  • 连接运算的含义
    • 从两个关系的笛卡尔积中选取属性间满足一定条件的元组
      • $A$和$B$:分别为$R$和$S$上度数相等且可比的属性组
      • $\theta$:比较运算符
    • 连接运算从$R$和$S$的广义笛卡尔积$R\times S$中选取$R$关系在$A$属性组上的值与$S$关系在$B$属性组上的值满足比较关系$\theta$的元组
  • 等值连接(equijoin)
    • $\theta$为“=”的连接运算称为等值连接
    • 从关系$R$与$S$的广义笛卡尔积中选取$A$、$B$属性值相等的那些元组,即等值连接为:
  • 自然连接(Natural join)
    • 一种特殊的等值连接
      • 两个关系中进行比较的分量必须是相同的属性组
      • 在结果中把重复的属性列去掉
    • 自然连接的含义
      • $R$和$S$具有相同的属性组$B$
  • 一般的连接操作是从行的角度进行运算
    • 自然连接还需要取消重复列,所以是同时从行和列的角度进行运算
  • 外连接
    • 悬浮元组(Dangling tuple)
      • 两个关系$R$和$S$在做自然连接时,关系$R$中某些元组有可能在$S$中不存在公共属性上值相等的元组,从而造成$R$中这些元组在操作时被舍弃了,这些被舍弃的元组称为悬浮元组
    • 外连接(Outer Join)
      • 如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(Null),就叫做外连接
    • 左外连接(LEFT OUTER JOIN或LEFT JOIN)
      • 只保留左边关系R中的悬浮元组
    • 右外连接(RIGHT OUTER JOIN或RIGHT JOIN)
      • 只保留右边关系S中的悬浮元组

        除运算(division)

  • 给定关系$R (X,Y)$ 和$S (Y,Z)$,其中$X,Y,Z$为属性组
  • $R$中的$Y$与$S$中的$Y$可以有不同的属性名,但必须出自相同的域集
  • $R$与$S$的除运算得到一个新的关系$P(X)$,$P$是$R$中满足下列条件的元组在 $X$ 属性列上的投影:
    • 元组在$X$上分量值$x$的象集$Y_x$包含$S$在$Y$上投影的集合,记作:
  • 除操作是同时从行和列角度进行运算