结构数据模型
- 数据结构:实体类型和实体间联系的表达和实现。
- 数据操作:对数据库的检索和更新(插入,删除,修改)
- 数据完整性约束:给出数据以及联系应具有的制约和依赖规则。
实体联系图(ER模型)
实体:客观存在,可以相互区别的事物。
联系:实体之间的相互关系。联系有 一元联系,二元联系和三元联系。
二元联系:一对一联系,一对多联系,多对多联系。
属性:实体的每一个特性称为属性。
DBMS工作模式
- 接受应用程序的数据请求和处理请求
- 将用户的数据请求(高级指令)转为复杂的机器代码(低层指令)
- 实现对数据库的操作
- 从对数据库的操作中接受查询结果
- 对查询结果进行处理(格式转换)
- 将处理结果返回给用户
用户访问DBMS的过程
用户对数据库进行操作,是由DBMS把操作从应用程序带到外部级,概念级,再导向内部级,进而通过OS操纵存储中的数据。同时,DBMS为应用程序在内部开辟一个DB的系统缓冲区,用于数据的传输和格式的转换。而三级结构定义存放在数据字典中。
DBMS总是基于某种数据模型,可以把DBMS看成是某种数据模型在计算机系统上的具体实现。根据数据模型的不同,DBMS可以分为层次型,网状型,关系型,面向对象型。
DBMS主要功能
-
数据库的定义功能
DBMS提供DDL(Data g Definition Language)定义数据库的三级结构,两级映像,定义数据库的完整性约束,保密限制等约束。在DBMS中应包含DDL的编译程序。
-
数据库的操纵功能
DMBS提供对数据的操作。基本的数据操作有两类:检索(查询)和更新(插入,删除,更新)。在DBMS中应包括DML的变异程序或解释程序。
-
数据库的保护功能
- 数据库的恢复。在数据库被破坏或数据不正确时,系统有能力把数据库恢复到正确的状态。
- 数据库的并发控制。在多个用户同时对同一个数据进行操作时,系统应能加以控制,防止破坏DB的数据。
- 数据库的完整性控制。保证数据库中的数据以及语义的正确性和有效性,防止任何对数据造成错误的操作。
- 数据库的安全性控制。防止未经授权的用户存取数据库中的数据,以免数据的泄漏,更改或破坏。
-
数据库的维护功能
包括数据库载入,转换,转储,数据库的改组以及性能监控。
-
数据字典
数据库汇总存放三级结构定义的数据库称为数据字典(Data Dictionary,DD)。对数据库的操作都要经过数据字典才能实现。数据字典还存放数据库运行时的统计信息,例如记录个数,访问次数。管理DD的子系统称为「DD系统」
关系数据模型
关键码和表之间的联系
- 超键:能唯一识别元组的属性或属性集称为关系的超键。
- 候选键:若一个属性集能唯一标识元组,且又不含有多余的属性,这个属性集称为关系的候选键。
- 主键:若一个关系中有多个候选键,选其中一个为关系的主键。用主键实现在关系定义中「表中任意两行(元组)不能相同」的约束。包含在任何一个候选键中的属性称为主属性,不包含在任何键中的属性称为非主属性或非键属性。
- 外键:若一个关系R中包含另一个关系S的主键所对应的属性组F,则称F为R的外键。
关系模型的完整性规则
实体完整性规则:关系元组中的主键不能为空
-
参照完整性规则:关系与关系之间是通过公共属性实现的。这个公共属性是一个表的主键和另一个表的外键。外键必须是另一个表的主键的有效值或「空值」。
参照完整性规则定义:
如果属性集K是关系模式R1的主键,K也是关系模式R2的外键,那么在R2中,K的值只能允许两种可能:空值 / 等于R1 关系中的某个主键值。
注意
1.外键和相应的主键不可以同名,只要定义在相同值域上即可。
2.R1和R2也可以是同一个关系模式,表示了同一个关系中不同元组之间的联系。
3.外键值是否允许空,应视具体情况而定。(在模式中,若外键为该模式主键中的成分时,则外键不允许为空,否则允许为空)
用户定义的完整性规则:这是针对具体数据的约束条件,由环境决定。系统应定义和检验这类完整性的机制,以便统一的系统方法处理它们。(如学生成绩应该大于或等于0,职工的工龄应小于年龄,人的身高不能超过3米)
关系模型的形式定义
- 数据结构:数据库中的全部数据及其相互联系都被组织成关系(二维表格),关系模型基本的数据结构是关系。
- 数据操作:关系模型提供一组完备的高级关系运算,以支持对数据库的各种操作,关系运算分为关系代数和关系演算两类。
- 关系模型的三类完整性规则。
关系代数的五个基本操作
并(Union)
RUS = {t | t ∈ R V t ∈ S }
t是元组变量,R和S的元数相同。两个关系的并运算是将两个关系中的所有元组构成一个新关系。并运算要求两个关系属性的性质必须一致且并运算的结果要消除重复的元组。
差(Difference)
R-S = {t | t∈ R ∧ t ∉ S }
t 是元组变量,R和S元数相同。相应的属性取自同一个域,则关系R和关系S的差由属于R但不属于S的所有元组组成。
笛卡尔积(Cartesian Product)
RXS = {t | t = < tr, ts > ∧ tr ∈ R ∧ ts ∈ S}
tr, ts 分别表示有 r个分量和s个分量,若R有n个元组,S有m个元组,则RXS有 mxn个元组。
(在学生和必修课程两个关系上,产生选修关系:要求每个学生必须选修所有的必修课程)
投影(Projection)
π <i1,.....im> (R) = {t | t = <ti1,.....tim> ∧ <ti1,.....tim> ∈ R}
这个操作是对一个关系进行垂直分割,消去某些列,并重新安排列的顺序,再删除重复的元组。是从R中选择若干属性列组成一个m元元组的集合。
(职工表(职工编号,姓名,部门) 映射 职工表中的「部门」,映射的新表只有部门一个元组,即删除除了部门的其他列,并且会删除职工表中部门出现重复的元组)
选择(Selection)
σF(R) = { t | t ∈ R ∧ F(t) = true}
这个操作是根据某些条件对关系进行水平分割,即选择符合条件的元组。
关系代数中的组合操作
交(Intersection)
R∩S = {t | t ∈ R ∧ t ∈ S}
交可由关系的差来实现:
R∩S = R-(R-S) 或 R∩S = S-(S-R)
联接(Join)
联接操作可将两个关系连在一起,形成新的关系。联接操作是笛卡尔积和选择操作的组合。
θ联接:从R关系和S关系的笛卡尔积中选取属性值满足某一θ操作的元组。如果 θ 为等号,那么这个联接操作为等值联接。
F联接:从R关系和S关系的笛卡尔积中选取属性值满足某一F操作的元组。这里的F是形为F1∧F2....∧Fn的公式,每个Fi是形为 iθj 的式子。
自然联接(Natural Union)
自然联接是一种特殊的等值联接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。
1.计算 R X S
2.设R和S的公共属性是A1....Ak,挑选R X S 中满足 R.Ai = S.Ai 的那些元组。
3.去掉S.Ai这些列(保留R.Ai)
除(Division)
R/S是(R-S)的元组的集合。
R /S 是满足下列条件的最大关系:其中每个元组t与S中的每个元组u组成的新元组 < t,u >必须在关系R中。
查询优化的一般策略
- 在关系代数表达式中尽可能早的进行选择操作。对于有选择运算的表达式,应尽可能提前执行选择操作,以得到较小的中间结果,减少运算量和读外存块的次数。
- 把笛卡尔积和其后的选择操作合并成F联接运算,因为两个关系的笛卡尔积是一个元组数较大的关系(中间结果),而做了选择操作以后,可能会获得很小的关系。这两个操作一起做,即对每个联接后的元组,立即检查其是否满足条件,决定其取舍,将会减少时间和空间的开销。
- 同时计算一连串的选择和投影操作,以免分开运算造成多次扫描文件,从而能节省操作时间。
- 如果在一个表达式中多次出现某个子表达式,那么应该把子表达式的结果保存起来,以免重复计算。
- 适当的对关系文件进行预处理。关系以文件形式存储,根据实际需要对文件进行排序或建立索引文件,这样能使两个关系在进行联接时,能很快有效的对应起来。
- 在计算表达式之前应该先估计一下怎么计算合算。