数据模型
客观对象的抽象过程——两步抽象
先把现实世界中的客观对象抽象为概念模型,再把概念模型转换为某一DBMS支持的数据模型。
概念模型是现实世界到机器世界的一个中间层次。
数据模型的不同层次
概念模型(Conceptual Data Model,CDM)
- 面向现实世界建模;
- 主要用来描述现实世界的概念化结构,与具体DBMS无关。
逻辑模型(Logical Data Model,LDM)
- 面向用户建模;
- 是用户从数据库所看到的数据模型。
物理模型(Physical Data Model,PDM)
- 面向具体的DBMS,面向机器;
- 描述数据在存储介质上的组织结构。
数据模型三要素
数据结构
- 与数据类型、内容、性质有关的对象,如关系模型中的域、属性、关系等;
- 与数据之间联系有关的对象;
- 数据结构是对系统静态特征的描述。
数据操作
- 指对数据库中各种对象的实例允许执行的操作的集合,包括操作及有关的操作规则;
用户可以通过关系语言来完成对数据的各种操作,关系语言特点是高度非过程化,即用户只需说明“做什么”而不必说明“怎么做”。
- 数据库主要有检索和更新(包括插入、删除、修改)两大类操作;
- 数据模型必须定义这些操作的确切含义、操作符号、操作规则(如优先级)及实现操作的语言;
- 数据操作是对系统动态特性的描述。
数据的约束条件
- 一组完整性规则的集合。
数据模型的发展过程
关系模型
关系模型是目前最重要的一种数据模型。关系数据库系统采用关系模型作为数据的组织方式。
1970年美国IBM公司的研究员E.F.Codd首次提出了关系模型,开创了数据库关系方法和关系数据理论的研究,为数据库技术奠定了理论基础。
20世纪80年代以来,计算机厂商新推出的关系数据库管理系统几乎都支持关系模型,非关系模型的产品也大都加上了关系接口。数据库领域当前的研究工作也都是以关系方法为基础。
关系模型的基本概念
关系(Relation)
关系是是笛卡尔积的一个有意义的子集,每个关系都有一个关系名。
关系是一张二维表,二维表存放两类数据:实体本身的数据、实体之间的联系。
相关术语
元组(Tuple):表中的一行,表示一个实体,关系是由元组组成的。
属性(Attribute):表中的每一列在关系中称为属性。每个属性都有一个属性名,属性值则是各元组属性的取值。
例如,属性:“Pno”,“Pname”,“Psex”,“Page”,“Pid”
域(Domain):属性的取值范围称为域。同一属性只能在相同域中取值。
例如,性别属性“Psex”的域为“男”和“女”
分量(Component):元组中的一个属性值。
超键:关系中能唯一区分不同元组的属性或属性组合。
候选键:如果一个属性集能唯一标识元组,且有不包含多余属性,那么这个属性集称为候选键;也即:候选键是没有多余属性的超键。
主键:关系模式中用户选作元组标识或正在使用的候选键称为主键。关系中主键是唯一的。每个关系中有且只有一个主键。DBMS用主键来唯一标识表中每一行。
外键:关系中某个属性或属性组合并非该关系的键,但却是另一个关系的主键,称此属性或属性组合组合为本关系的外键。
关系的性质
- 有一个关系名,并且跟关系模式中所有其他关系不重名;
- 每一个单元格都包含且仅包含一个原子值;
- 同一关系中,每个属性都有一个不同的名字;
- 同一属性中的各个值都取自相同的域;
- 各个元组互不相同,不存在重复元组;
- 属性的顺序并不重要;
- 元组的顺序并不重要。
关系的操作
关系的操作方式是集合操作。操作的对象与结果都是集合,一次操作对应一个集合。
操作分为两类:
- 查询:选择、投影、连接、除、并、交、差
- 数据更新:插入、删除、修改
关系的完整性
关系模型的完整性规则是对关系的某种约束条件,保证数据库中数据的正确性和一致性。
三类完整性约束:
- 实体完整性:主键不能取空值
- 参照完整性:通过外键实现,避免孤子记录
- 用户定义的完整性:各类商业规则
实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。
关系模式(Relation Schema)
对关系的描述称为关系模式。关系模式包括:关系名、属性的名字及相关联的域名、完整性约束。关系必须是规范化的,满足一定的规范条件。最基本的规范条件(第一范式1NF):关系的每一个分量必须是一个不可分的数据项,即不能表中有表。
关系模式的格式为:
关系名(属性名1,属性名2,…,属性名n)
例如:患者(编号,姓名,性别,年龄)
关系实例
关系实例是由命名的若干列和行组成的表格。一般地,关系指代实例。
- 关系中的行称为元组;
- 关系实例中元组的数目称为基(Cardinality);
- 元组的次序是无关紧要,即关系是元组的集合。
关系数据库
关系数据库是关系的有限集合。
关系数据库由两部分组成:关系模式的集合及对应的关系实例的集合。关系模式的集合称为数据库模式,对应的关系实例的集合称为数据库实例。
关系数据库模式
关系数据库模式S包含关系模式的集合R={R1,R2,…,Rm}和完整性约束的集合IC。
关系数据库语言
关系数据约束
关系数据约束分为三类:
- 一是数据模型中固有的约束,如元组不能重复;
- 二是可以在数据模型的模式中直接表述的约束,如数据定义语言(DDL)中指定的完整性约束;
- 三是不能在数据模型的模式中直接表述的约束,由应用程序表示和执行。
关系模型的优缺点
优点
- 关系模型与非关系模型不同,它是建立在严格的数学概念的基础上的;
- 数据结构简单、清晰;
- 更高的数据独立性,更好的安全保密性;
- 丰富的完整性。
缺点
- 对“现实世界”实体的表达能力弱;
- 由于存取路径对用户透明,查询效率往往不如非关系数据模型;
- 关系模型只有一些固定的操作集;
- 不能很好的支持业务规则。
关系运算
本质上是集合运算,分为两类:
- 基本集合运算:并运算、交运算、差运算、笛卡儿积运算
- 专门集合运算:选择运算、投影运算、连接运算、除运算
并运算
两个关系R和S进行并运算,可以得到所有至少出现在两个关系中之一的元组集合。
两个关系R和S若进行并运算,则它们必须是相容的。
相容有三个含义:
- 关系R和S必须是同元的,即它们的属性数目必须相同;
- 语义是一致的;
- R的第i个属性的域必须和S的第i个属性的域相同。
差运算
设关系R和S具有相同的关系模式,R和S的差是由属于R但不属于S的元组构成的集合。
两个关系R和S若进行差运算,则它们必须是相容的。
交运算
设关系R和S具有相同的关系模式,关系R和S的交运算结果仍为n目关系,由既属于R又属于S的元组组成。
两个关系R和S若进行交运算,则它们必须是相容的。
笛卡尔积运算
设关系R为n目,关系S为m目,R和S的笛卡尔积是一个(n+m)列的元组的集合。
- 元组的前n列是关系R的一个元组,后m列是关系S的一个元组;
- 若R有k1个元组,S有k2个元组,则关系R和关系S的笛卡尔积有k1×k2个元组。
选择运算
从关系中找出满足给定条件的所有元组称为选择运算。
经过选择运算得到的结果可以形成新的关系,其关系模式不变,但其中元组的数目小于或等于原来的关系中的元组的个数,它是原关系的一个子集。
投影运算
从关系中挑选若干属性组成的新的关系称为投影运算。
直观上看是在垂直方向抽取元组。
投影的结果中要去掉相同的行。
连接运算
条件连接(θ连接)
在两个关系的笛卡尔积上进行的选择运算称为条件连接(θ连接)。
A,B为R和S上度数相等且可比的属性列。
θ为等号时称为等值连接。
自然连接
从两个关系的广义笛卡儿积中选取在相同属性列B上取值相等的元组,并去掉重复的行。
- 自然连接中相等的分量必须是相同的属性组,并且要在结果中去掉重复的属性,而等值连接则不必;
- 如果两个关系没有公共属性,自然连接就是笛卡尔积。
左连接、右连接
R左连接S:所有来自R的元组和那些连接字段相等处的S的元组。
R右连接S:所有来自S的元组和那些连接字段相等处的R的元组。
查询优化
一个关系代数表达式转换为另一个具有较高效率的关系代数表达式的过程称为“查询优化”,但前提是结果等价。
关系代数表达式的优化准则:
- 提早执行选择运算;
- 合并笛卡尔积与其后的选择运算为连接运算;
- 将投影运算与其后的其他运算同时进行,以避免重复扫描关系;
- 将投影运算和其前后的二目运算结合起来,以避免为去掉某些字段再扫描一遍关系;
- 执行连接前对关系适当地预处理.就能快速地找到要连接的元组;
- 存储公共子表达式。