数据库体系结构
从模式的角度描述一般数据库系统的概念和结构
可以用于解释特定数据库系统的内部结构
ANSI/SPARC体系结构——三级模式结构+两级映象
- Oracle、Informix等SQL数据库系统的模式结构可通过ANSI/SPARC体系结构进行解释
模式(Schema)和实例(Instance)
- 模式是数据库中全体数据的逻辑结构和特征的描述,它仅仅涉及类型的描述,不涉及具体的值
- 模式的一个具体值称为模式的一个实例
模式类型 | 描述 | 特点 | 视图 | DDL |
---|---|---|---|---|
概念模式 | 数据库中全体数据的逻辑结构和特征的描述 | 不涉及数据物理存储的细节和硬件环境,一个数据库只有一个概念模式 | 概念视图 | 通过模式DDL进行定义 |
外模式 | 单个用户所看到的局部数据的逻辑结构和特征的描述 | 用户与数据库系统的数据接口,对于用户而言,外模式就是数据库,同一模式上可有多个不同的外模式 | 外部视图 | 通过子模式DDL进行定义 |
内模式 | 数据物理结构和存储方式的描述 | 不涉及物理块(或页)的大小,也不考虑具体设备的柱面或磁道大小,一个数据库只有一个内模式 | 内部视图 | 通过内模式DDL定义 |
数据库的三级模式结构
概念模式(模式、逻辑模式)
- 数据库中全体数据的逻辑结构和特征的描述
- 数据记录由哪些数据项构成
- 数据项的名字、类型、取值范围
- 数据之间的联系、数据的完整性等
- 不涉及数据物理存储的细节和硬件环境
- 一个数据库只有一个概念模式
- 概念视图:概念模式的实例
- 通过模式DDL进行定义
- 数据库中全体数据的逻辑结构和特征的描述
外模式(子模式、用户模式)
- 单个用户所看到的局部数据的逻辑结构和特征的描述
- 用户与数据库系统的数据接口,对于用户而言,外模式就是数据库
- 建立在概念模式之上,同一模式上可有多个不同的外模式
- 外部视图:外模式的实例
- 通过子模式DDL进行定义
内模式(存储模式)
- 数据物理结构和存储方式的描述
- 记录的存储方式:顺序存储、按B树组织还是散列存储?
- 索引按什么方式组织:排序、散列?
- 数据是否加密?是否压缩存储?
- 不涉及物理块(或页)的大小,也不考虑具体设备的柱面或磁道大小
- 一个数据库只有一个内模式
- 内部视图:内模式的实例
- 通过内模式DDL定义
- 数据物理结构和存储方式的描述
二级映象和数据独立性
- 二级映象实现三级模式结构间的联系和转换,使用户可以逻辑地处理数据,不必关系数据的底层表示方式和存储方式
外模式/模式映象
- 定义了外模式与概念模式之间的对应关系
- 属性名称可能不同
- 外模式中的属性可能由模式中的多个属性运算而得
- 当概念模式发生改变时,只要修改外模式/模式映象,可保持外模式不变,从而保持用户应用程序不变,保证了数据与用户程序的逻辑独立性——数据的逻辑独立性
- 定义了外模式与概念模式之间的对应关系
模式/内模式映象
- 定义了概念模式与内模式之间的对应关系 - 概念模式中的逻辑记录和字段在内部如何表示
- 当数据库的内部存储结构发生改变时,只要修改模式/内模式映象,可保持概念模式不变,从而保持外模式以及用户程序的不变,保证了数据与程序的物理独立性——数据的物理独立性
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}
- Student(U,D,dom,F)
关系模式通常简写为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是与具体应用相关的
- 对于关系模式 R( Tname, Addr, C#, Cname)
关系模型的形式化定义
- 数据结构 - 关系:数据库中全部数据及数据间联系都以关系来表示
- 数据操作
- 关系运算
- 关系代数
- 关系演算(元组关系演算、域关系演算)
- 关系运算
- 数据的完整性约束
- 关系模型的三类完整性规则
关系代数(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∈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可以是属性名、常量或简单函数
- σF(R)={t∣t∈R∧F(t)=TRUE}
投影
- πA(R)={t[A]∣t∈R},其中A是R的属性子集
- 垂直划分关系,选取若干列所构成的关系
- A中的属性不可重复
- πA(R)={t[A]∣t∈R},其中A是R的属性子集
联接:自然联接
- 设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的外码是它的一个属性集FK,满足:
- 参照关系R的任一个外码值必须
- 等于被参照关系S中所参照的候选码的某个值
- 或者为空
- 外码(Foreign Key)
用户自定义完整性(User-Defined Integrity)
- 针对某一具体数据的约束条件,反映某一具体应用所涉及的数据必须满足的特殊语义
- 由应用环境决定
SQL
数据库语言
- 数据库语言是用户使用数据库的接口,DBMS支持用户通过数据库语言进行数据存取与管理
有三类数据库语言
- 数据定义语言(Data Definition Language, DDL)
- 数据操纵语言(Data Manipulation Language, DML)
- 数据控制语言 (Data Control Language, DCL)
SQL基本组成
SQL与关系模型
- 数据结构:
- SQL使用表来组织和存储数据。
- 在关系模型中,数据以关系的形式组织。
- 数据操作:
- SQL使用数据操纵语言(DML)进行操作,如SELECT、INSERT、UPDATE、DELETE。
- 关系模型使用关系代数进行数据操作。
- 数据约束:
- SQL包含主键、外键、唯一和检查等约束。
- 在关系模型中,约束涉及实体完整性(确保每行具有唯一标识符)、参照完整性(维护表之间的关系)和用户自定义完整性(用户定义的其他约束