第2章 关系型数据库回顾

数据库体系结构

  • 从模式的角度描述一般数据库系统的概念和结构

  • 可以用于解释特定数据库系统的内部结构

  • ANSI/SPARC体系结构——三级模式结构+两级映象

    • Oracle、Informix等SQL数据库系统的模式结构可通过ANSI/SPARC体系结构进行解释
  • 模式(Schema)和实例(Instance)

    • 模式是数据库中全体数据的逻辑结构和特征的描述,它仅仅涉及类型的描述,不涉及具体的值
    • 模式的一个具体值称为模式的一个实例
模式类型描述特点视图DDL
概念模式数据库中全体数据的逻辑结构和特征的描述不涉及数据物理存储的细节和硬件环境,一个数据库只有一个概念模式概念视图通过模式DDL进行定义
外模式单个用户所看到的局部数据的逻辑结构和特征的描述用户与数据库系统的数据接口,对于用户而言,外模式就是数据库,同一模式上可有多个不同的外模式外部视图通过子模式DDL进行定义
内模式数据物理结构和存储方式的描述不涉及物理块(或页)的大小,也不考虑具体设备的柱面或磁道大小,一个数据库只有一个内模式内部视图通过内模式DDL定义

数据库的三级模式结构

  1. 概念模式(模式、逻辑模式)

    • 数据库中全体数据的逻辑结构和特征的描述
      • 数据记录由哪些数据项构成
      • 数据项的名字、类型、取值范围
      • 数据之间的联系、数据的完整性等
    • 不涉及数据物理存储的细节和硬件环境
    • 一个数据库只有一个概念模式
    • 概念视图:概念模式的实例
    • 通过模式DDL进行定义
  2. 外模式(子模式、用户模式)

    • 单个用户所看到的局部数据的逻辑结构和特征的描述
    • 用户与数据库系统的数据接口,对于用户而言,外模式就是数据库
    • 建立在概念模式之上,同一模式上可有多个不同的外模式
    • 外部视图:外模式的实例
    • 通过子模式DDL进行定义
  3. 内模式(存储模式)

    • 数据物理结构和存储方式的描述
      • 记录的存储方式:顺序存储、按B树组织还是散列存储?
      • 索引按什么方式组织:排序、散列?
      • 数据是否加密?是否压缩存储?
    • 不涉及物理块(或页)的大小,也不考虑具体设备的柱面或磁道大小
    • 一个数据库只有一个内模式
    • 内部视图:内模式的实例
    • 通过内模式DDL定义

二级映象和数据独立性

  • 二级映象实现三级模式结构间的联系和转换,使用户可以逻辑地处理数据,不必关系数据的底层表示方式和存储方式
  1. 外模式/模式映象

    • 定义了外模式与概念模式之间的对应关系
      • 属性名称可能不同
      • 外模式中的属性可能由模式中的多个属性运算而得
    • 当概念模式发生改变时,只要修改外模式/模式映象,可保持外模式不变,从而保持用户应用程序不变,保证了数据与用户程序的逻辑独立性——数据的逻辑独立性
  2. 模式/内模式映象

    • 定义了概念模式与内模式之间的对应关系 - 概念模式中的逻辑记录和字段在内部如何表示
    • 当数据库的内部存储结构发生改变时,只要修改模式/内模式映象,可保持概念模式不变,从而保持外模式以及用户程序的不变,保证了数据与程序的物理独立性——数据的物理独立性

SQL数据库体系结构

关系型数据库

  • 使用数据库技术,首先必须把现实世界中的事物表示为计算机能够处理的数据
  • 模型是对现实世界特征的抽象
  • 数据模型是对现实世界数据特征的抽象
  • 数据模型的定义
    • 描述现实世界实体、实体间联系以及数据语义和一致性约束的模型

数据模型的分类

  • 概念数据模型(概念模型)

    • 按用户的观点对数据进行建模,强调语义表达功能
    • 独立于计算机系统和DBMS
    • 主要用于数据库的概念设计
  • 结构数据模型(数据模型)

    • 按计算机系统的观点对数据进行建模,直接面向数据库的逻辑结构
    • 与计算机系统和DBMS相关(DBMS支持某种数据模型)
    • 有严格的形式化定义,以便于在计算机系统中实现

数据抽象的层次

数据模型的例子

  • 现实世界

    • 客户存款
  • 信息世界

    • 概念模型(E-R模型)
  • 机器世界

    • 数据模型(关系模型

数据模型的要素

  • 数据结构
    • 现实世界实体及实体间联系的表示和实现
  • 数据操作
    • 数据检索和更新的实现
  • 数据的完整性约束
    • 数据及数据间联系应具有的制约和依赖规则

关系模型

  • 关系模型
    • 规范化的二维表格结构表示实体集,外码表示实体间联系,三类完整性表示数据约束的数据模型

几个术语

术语定义
属性(Attribute)二维表格的每一列称为关系的一个属性,列的数目称为度(degree)
元组(Tuple)每一行称为关系的一个元组,元组的数目称为势(cardinality)
域(Domain)一组具有相同数据类型的值的集合。每个属性有一个域
关系(Relation)元组的集合
超码(Super Key)在关系中能唯一标识一个元组的属性集称为关系模式的超码
候选码(Candidate Key)不含多余属性的超码
主属性(Primary Attribute)包含在任何一个候选码中的属性
非主属性(Nonprime Attribute)不包含在任何一个候选码中的属性
主码(Primary Key)用户选作元组标识的一个候选码称为主码,其余的候选码称为替换码(Alternate Key)
Student(Sno, Name, Age, LibraryID)
  • 超码
    • (sno,name)
    • (libraryID, name) …
  • 候选码
    • Sno
    • LibraryID
  • 主码
    • 若选sno,则sno为主码,libraryID为替换码
    • 若选libraryID,则libraryID 为主码, sno为替换码

关系的性质

  • 一个关系是一个规范化的二维表格

    • 属性值不可分解
    • 不允许表中有表
  • 元组不可重复

    • 因此一个关系模式至少存在一个候选码
  • 没有行序,即元组之间无序

    • 关系是元组的集合,集合的元素是无序的
  • 没有列序,即属性之间无序

    • 关系模式是属性的集合

关系模式与关系数据库

  • 关系模式(Relation Schema)

    • 关系的逻辑结构和特征的描述
    • 对应于二维表格的表头
    • 通常由属性集和各属性域表示,不关心域时可省略域
      • Student(Name, Age, Class)
  • 关系:关系模式的实例,即二维表(元组的集合)

  • 关系数据库模式(Relational DatabaseSchema):关系模式的集合

  • 关系数据库:关系数据库模式的实例

关系模式的形式化定义

  • 关系模式可以形式化定义为:

    • R(U,D,dom,F)
    • R为关系模式名,U是一个属性集,D是U中属性的值所来自的域,Dom是属性向域的映射集合,F是属性间的依赖关系
  • 例:Student关系模式的定义

    • Student(U,D,dom,F)
      • U={sno,name,age}
      • D={CHAR,INT}
      • Dom={dom(sno)=dom(name)=CHAR,dom(age)=INT}
      • F={sno→name, sno→age}
  • 关系模式通常简写为R(U),或R(A1,A2,…,An)

函数依赖

  • R(U,D,dom,F)中的F在实际中一般只考虑函数依赖

  • 函数依赖(Functional Dependency, FD)是指一个关系模式中一个属性集和另一个属性集间的多对一关系

    • 例如选课关系SC(S#, C#, Score)
    • 存在由属性集{S#, C#}到属性集{Score}的函数依赖
      • 对于任意给定的S#值和C#值,只有一个Score值与其对应
      • 反过来,可以存在多个S#值和C#值,它们对应的Score值相等
  • 函数依赖(FD,Functional Dependency)的形式化定义

    • 设关系模式R(A1,A2,…,An)或简记为R(U),X和Y是U的子集。r是R的任意一个实例(关系),若r的任意两个元组t1、t2,由t1[X]=t2[X]可导致t1[Y]=t2[Y],即如果X相等则Y也相等,则称Y函数依赖于X或称为X函数决定Y,记作 X→Y
    • 即R的X属性集上的值可唯一决定R的Y属性集上的值
    • 也即对于R的任意两个元组,X上的值相等,则Y上的值也必相等
  • FD是相对于关系模式而言的,因此关系模式R的所有实例都要满足FD

  • 例如

    • Student关系模式中,{S#} →{Sname} (单个属性可去掉括号,简写成 S# →Sname )
    • SC关系模式中, {S#,C#} →{Score}
  • FD是否成立,唯一办法是仔细考察应用中属性的 含义。FD实际上是对现实世界的断言。数据库设计者在设计时把应遵守的函数依赖通知DBMS,则DBMS会自动检查关系的合法性

    • 对于关系模式 R( Tname, Addr, C#, Cname)
      • 若一门课只能有一个教师,则有{C#} →{Tname}
      • 若一门课可有多个教师任教,则{C#} →{Tname}不成立
      • 因此FD是与具体应用相关的

关系模型的形式化定义

  • 数据结构 - 关系:数据库中全部数据及数据间联系都以关系来表示
  • 数据操作
    • 关系运算
      • 关系代数
      • 关系演算(元组关系演算、域关系演算)
  • 数据的完整性约束
    • 关系模型的三类完整性规则

关系代数(Relational Algebra)

  • 以关系为运算对象的一组运算集合

  • 运算结果仍是关系

  • 以集合操作为基本运算

  • 关系代数表达式的符号

    • 数学符号表示 并∪ 、交∩、差-、笛卡儿积× 选择σ 、投影π 、联接 ∞ 、除÷ 重命名 ρx(E) 赋值 ←
  • 英语关键字表示

    • 并Union、交Intersect、差Minus、笛卡儿积Times、选择Where…、投影{All But…}、联接Join、除Devidedby
  • 关系代数的封闭性

    • 任意关系代数操作的结果仍是一个关系
  • 关系代数的封闭性保证了关系代数操作的可嵌套性

  • 例子:

  • 关系代数表达式

    • 关系模型中数据操作都通过关系代数表达式来表示
  • 关系代数中的基本表达式是关系代数表达式,基本表达式由如下之一构成:

    • 数据库中的一个关系
    • 一个常量关系
  • 设E1和E2是关系代数表达式,则下面的都是关系代数表达式:

    • E1∪E2 、E1-E2、E1×E2
    • σP(E1),其中P是E1中属性上的谓词
    • πs(E1),其中S是E1中某些属性的列表
    • ρx(E1),其中x是E1结果的新名字
  • 关系代数操作的语义

    • 并∪ 、交∩、差-、笛卡儿积×
    • 选择σ 、投影π 、联接 ∞ 、除÷
    • R∪S={t∣t∈R∨t∈S}
      • t是元组变量
      • R和S是关系代数表达式
      • R与S的degree必须相同
      • R与S的类型必须相同
    • R∩S={t∣t∈R∧t∈S}
    • R-S={t∣t∈R∧t S}
    • R×S={t∣t=<tr,ts>∧tr∈R∧ts∈S}
  • 选择

    • σF(R)={t∣t∈R∧F(t)=TRUE}
      • 水平划分关系
      • F是一个逻辑表达式,表示所选的元组应满足的条件
      • F由逻辑运算符┐(NOT)、∧(AND)、∨(OR)连接算术表达式构成
        • 算术表达式形为XθY,θ可以是>,<,=, ≤,≥或≠,X和Y可以是属性名、常量或简单函数
  • 投影

    • πA(R)={t[A]∣t∈R},其中A是R的属性子集
      • 垂直划分关系,选取若干列所构成的关系
      • A中的属性不可重复
  • 联接:自然联接

    • 设R的属性集为{X,Y},S的属性集为{Y,Z}
    • R∞S=t|t=<X,Y,Z>∧t[X,Y]∈R∧t[Y,Z]∈S}
      • 相当于在R×S中选取R和S的所有公共属性值都相等的元组,并在结果中去掉重复属性
  • 联接: θ联接

    • 设R的属性集为{X,Y},S的属性集为{Y,Z}
      • 相当于在R×S中选取R的属性A值与S的属性B值满足比较关系θ的元组。
  • 联接: 等值联接(equijoin)

    • 在θ联接中θ为等号时,称为“等值联接”
    • 等值联接是θ联接中比较常见的形式
  • 数据更新仍通过关系代数实现

  • 删除

    • R←R-E:R是关系,E是关系代数查询
    • 例“从数据库中删除姓名为‘Rose’的学生”
      • Student←Student-σname=‘Rose’(Student)
  • 插入

    • R←R∪E:R是关系,E是关系代数表达式
    • 如果E是常量关系,则可以插入单个元组
    • 例:插入一个新的学生
      • S1←S1∪ { (‘001’,’Rose’,19) }
  • 修改

关系模型的三类完整性规则

  • 实体完整性(Entity Integrity)

    • 关系模式R的主码不可取空值
  • 参照完整性(Referential Integrity)

    • 外码(Foreign Key)
      • 关系模式R的外码是它的一个属性集FK,满足:
        • 存在带有候选码CK的关系模式S,且
        • R的任一非空FK值都在S的CK中有一个相同的值
      • S称为被参照关系(Referenced Relation),R称为参照关系(Referential Relation)
    • 参照关系R的任一个外码值必须
      • 等于被参照关系S中所参照的候选码的某个值
      • 或者为空
  • 用户自定义完整性(User-Defined Integrity)

    • 针对某一具体数据的约束条件,反映某一具体应用所涉及的数据必须满足的特殊语义
    • 由应用环境决定

SQL

  • 数据库语言

    • 数据库语言是用户使用数据库的接口,DBMS支持用户通过数据库语言进行数据存取与管理
  • 有三类数据库语言

    • 数据定义语言(Data Definition Language, DDL)
    • 数据操纵语言(Data Manipulation Language, DML)
    • 数据控制语言 (Data Control Language, DCL)

SQL基本组成

SQL与关系模型

  1. 数据结构:
    • SQL使用表来组织和存储数据。
    • 在关系模型中,数据以关系的形式组织。
  2. 数据操作:
    • SQL使用数据操纵语言(DML)进行操作,如SELECT、INSERT、UPDATE、DELETE。
    • 关系模型使用关系代数进行数据操作。
  3. 数据约束:
    • SQL包含主键、外键、唯一和检查等约束。
    • 在关系模型中,约束涉及实体完整性(确保每行具有唯一标识符)、参照完整性(维护表之间的关系)和用户自定义完整性(用户定义的其他约束

习题