1、数据库基础概念
数据库基本概念
- 数据(Data)
- 数据库(Database)
- 数据库管理系统(DBMS)
- 数据库系统(DBS)
1.数据(Data)
是数据库中存储的基本对象,是描述事物的符号记录。
数据的种类:
- 文本、图形、图像、音频、视频等。
2.数据库(Database, DB)
数据库是统一管理的、长期储存在计算机内的,有组织的相关数据的集合。
数据库的基本特征:
- 数据按一定的数据模型组织、描述和储存
- 数据间联系密切、冗余度较小
- 数据独立性较高
- 易扩展
- 可为各种用户共享
3.数据库管理系统(DBMS)
DBMS 是数据库系统的核心软件,是由一组相互关联的数据集合和一组用以访问这些数据的软件组成。它是一种解决如何科学地组织和储存数据如何高效地获取和维护数据的系统软件。
主要功能包括:
- 数据定义功能(DDL)
- 数据操纵功能(DML)
- 数据库的运行管理
- 数据库的建立与维护
4.数据库系统(Database System,DBS)
由数据库及其管理软件组成的系统。
数据库系统的构成:
- 数据库
- 硬件平台
- 软件(应用程序)
- 数据库管理员
数据模型
数据模型是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提
供一个抽象的框架。数据模型的三要素:
- 数据结构:对象类型的集合,是对系统静态特性的描述。
- 数据操作:对数据库中各种对象的实例(值)允许执行的操作集合,包括操作及操作规则。如检索、插入、删除和修改,操作规则有优先级等。
- 数据的约束条件:一组完整性规则的集合。对具体的应用数据必须遵循特定的语义约束条件。
常见的基本数据模型:
- 层次模型
- 网状模型
- 关系模型
- 面向对象数据模型(第三代数据库系统)
数据库管理系统
DBMS 功能主要包括数据定义,数据库操作,数据库运行管理,数据组织、存储和管理,数据库的建立和维护。
(1)数据定义
DBMS 提供数据定义语言 (DDL),可以对数据库的结构进行描述,包括外模式、模式和内模式的定义;数据库的完整性定义;安全保密定义,如口令、级别和存取权限等。这些定义存储在数据字典中,是 DBMS运行的基本依据。
(2)数据库操作
DBMS 向用户提供数据操纵语言 (DML),实现对数据库中数据的基本操作,如检索、插入、修改和删除。
(3)数据库运行管理。
数据库在运行期间,多用户环境下的并发控制、安全性检查和存取控制、完整性检查和执行、运行日志的组织管理、事务管理和自动恢复等都是 DBMS 的重要组成部分。这些功能可以保证数据库系统的正常运行。
数据库三级模式
数据库系统可以分为:
- 外模式(子模式、用户模式)
- 模式(概念模式、逻辑模式)
- 内模式(存储模式)
1.模式(概念模式、逻辑模式)
-
数据库中全体数据的逻辑结构和特征的描述
-
所有用户的公共数据视图,综合了所有用户的需求
一个数据库只有一个模式 -
2.外模式(子模式、用户模式)
-
数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述
-
数据库用户的数据视图,是与某一应用有关的数据的逻辑表示
外模式的地位:介于模式与应用之间
- 模式与外模式的关系:一对多
✓ 外模式通常是模式的子集
✓ 一个数据库可以有多个外模式。反映了不同的用户的应用需求、看待数据的方式、对数据保密的要求
外模式的用途
- 保证数据库安全性的一个有力措施
- 每个用户只能看见和访问所对应的外模式中的数据
(3)内模式(存储模式)
- 是数据物理结构和存储方式的描述
- 是数据在数据库内部的表示方式
- 一个数据库只有一个内模式
例:
采用三级模式结构的数据库系统中,如果对一个表创建聚簇索
引,那么改变的是数据库的( )。
A.外模式
B.模式
C.内模式
D.用户模式
答案: C
解析:
在一个三级模式结构的数据库系统中,数据库的结构被分为三个层次:外模式(外部模式)、模式(概念模式)和内模式(物理模式)。
外模式是用户对数据库的可见部分,它定义了用户可以看到和操作的数据的逻辑结构和访问路径。
模式定义了数据库的全局逻辑结构和组织方式,它定义了数据库中的表、属性、关系等概念,并描述了它们之间的关系。
内模式定义了数据库在存储介质上的物理结构和存储方式,它描述了数据在磁盘上的存储细节,如数据的排列方式、索引结构等。
当对一个表创建聚簇索引时,改变的是数据库的内部物理存储结构,即内模式。
三个级别
与三级模式相对应,数据库系统可以划分为三个抽象级:
- 1.用户级数据库:最高层抽象,对应于外模式,是用户看到和使用的数据库,又称用户视图。一个数据库可有多个不同的用户视图。
- 2.概念级数据库:对应于概念模式,是所有用户视图的最小并集,一个数据库应用系统只有一个DBA视图。
- 3.物理级数据库:对应于内模式,是数据库的低层表示,它描述数据的实际存储组织,是最接近于物理存储的,又称为内部视图。
两级独立性
- 1.物理独立性
指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。当数据的物理存储改变了,应用程序不用改变。 - 2.逻辑独立性
指用户的应用程序与数据库的逻辑结构是相互独立的。数据的逻辑结构改变了,用户程序也可以不变。
独立性是由DBMS的二级映像功能来保证的
2、关系型数据库 (很重要 要掌握 ☆☆☆☆☆)
关系数据库的基本概念
1.关系的基本术语
- (1)属性(Atribute)
描述一个事物常常取若干特征来表示。这些特征称为属性。 - (2)域(Domain)
每个属性的取值范围对应一个值的集合,称为该属性的域。所有的域都应是原子数据。 - (3)目或度(Degree)
指一个关系中属性的个数。 - (4)候选码(Candidate Key)
若关系中的某一属性或属性组的值能唯一的标识一个元组叫称该
属性或属性组为候选码。 - (5)主码(Primary Key)
或称主键,若一个关系有多个候选码,则选定其中一个作为主码。 - (6)主属性(PrimeAttribute)
包含在任何候选码中的属性称为主属性。不包含在任何候选码中
的属性称为非主属性。 - (7)外码 (Foreign Key)
如果关系中的一个属性是另外一个关系中的主码,则这个属性为
外码也叫外键。 - (8)全码(All-key)
关系模型的所有属性组是这个关系模式的候选码,称为全码。
2.关系数据库模式
关系的描述称为关系模式,关系模式是一个五元组,形式化地表示为: R (U, D, DOM, F)
R 关系名
U 组成该关系的属性名集合
D 属性组U中属性所来自的域
DOM 属性向域的映象集合
F 属性间的数据依赖关系集合
通常简记为R(A1, A2, … , An)。 R为关系名, A1, A2…为属性名。
3.完整性约束
- (1)实体完整性
- (2)参照完整性
- (3)用户自定义完整性
(1)实体完整性(Entity integrity)
是指关系的主关键字不能重复也不能取"空值"。如主关键字是多个属性的组合,则所有主属性均不得取空值。
(2)参照完整性(Referential integrity)
是指建立关系之间联系的主键与外键引用的约束条件。就是不允许引用不存在的实体。
(3)用户定义完整性(user defined integrity)
则是根据应用环境的要求和实际的需要,对某一具体应用所涉及的数据提出约束性条件。
常用的关系操作 (这个会考选择题 一定要掌握 ☆☆☆☆☆)
- 查询:选择、投影、连接、除、并、交、差
- 数据更新:插入、删除、修改
查询的表达能力是其中最主要的部分
- 传统的集合运算是二目运算,包括并、交、差、广义笛卡儿积
- 专门的关系运算包括:选择、投影、连接、除4种运算。
1、 并
关系R和S具有相同的目n(两个关系都有n个属性),R和S的并是由属于R或属于S的元组组成的集合,记为RUS。
形式定义如下:
式中t是元组变量。
RUS = SUR
2. 差
关系R和S具有相同的目n,R和S的差是由属于R 但不属于S的元组组成的集合,记为R-S。
形式定义如下:
式中t是元组变量。
3. 交
关系R和S具有相同的目n,R和S的交是由既属于R 又属于S的元组组成的集合,记为R ∩ S。
形式定义如下:
式中t是元组变量。
R∩S = R – (R-S)或者 R∩S = S – (S-R)
4. 笛卡儿积
R: n目关系,k1个元组
S: m目关系,k2个元组
R×S
列:(n+m) 列元组的集合
- 元组的前n列是关系R的一个元组
- 后m列是关系S的一个元组
行:k1×k2 行元组
式中t是元组变量。
关系运算
关系数据库还有一些专门的运算,主要有投影、选择、连接、除法和外连接。
在关系代数中,由五种基本代数操作经过有限次复合的式子称为关系代数运算表达式。
表达式的运算结果仍是一个关系。
1. 投影
投影操作从关系R中选择出若干属性列组成新的关系,该操作对关系进行垂直分割,消去某些列,并重新安排列的顺序,再删去
重复元组。记作:
形式定义 :
式中t是元组变量。
其中A为R的属性列
注意:
投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)。
例:
查询学生的姓名和所在系即求Student关系上学生姓名和所在系两个属性上的投影。
注意 其中A 可以是属性名称 也可以是属性列下标 且下标从1开始
2. 选择
选择操作在关系R中选择满足给定条件的所有元组,记作
其形式定义 :
式中t是元组变量。
其中F表示选择条件,是一个逻辑表达式(逻辑运算符+算术表达式)。选择运算是从行的角度进行的运算。
例:
查询信息系(IS系)全体学生。
3. 连接
连接分为θ连接、等值连接及自然连接 3 种。
连接运算是指从两个关系R和S的笛卡儿积中选取属性间满足一定条件的元组。
记作:
A和B:分别为R和S上度数相等且可比的属性组
θ:比较运算符
(1) θ连接
θ连接是从R与S的笛卡尔积中选取属性满足一定条件的元组。
其形式定义如下:
例:
关系R和关系S 如下所示,一般连接 的结果如下:
(2) 等值连接(equijoin)
θ为"="时的连接运算称为等值连接。
等值连接的含义是指从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组,即等值连接为:
例:
关系R和关系S 如下所示,等值连接
的结果如下:
(3) 自然连接(Natural join)
自然连接是一种特殊的等值连接
- 两个关系中进行比较的分量必须是相同的属性组
- 在结果中把重复的属性列去掉
自然连接的含义
R和S具有相同的属性组B
例:
关系R和关系S 如下所示,自然连接的结果如下:
例:
给定关系R(A, B, C, D)和S(A, C, E, F),以下( )与
等价。
答案: B
解析: 题目中
是关系R和关系S的自然连接 其中R(A, B, C, D)和S(A, C, E, F) 有相同属性列 A 、 C
并且在 R和S 自然连接后 选择 R的B列的值 大于S的E列的值 的过程
其中R的B列 可以用下标2表示 S的E列可以用下标 7表示 如果是带 单引号的 ‘7’ 表示字符串7 而不是第7列
选项A中 RXS 只是R和S的笛卡尔积 并没有选择 R和S中 进行比较的分量必须是相同的属性组,在结果中把重复的属性列去掉
所以A错误
选项B
先把R和S求笛卡尔积 然后 选择 相同的属性组 并且 符合题目中
R.B > S.E的选择条件
最后使用投影
在结果中把重复的属性列去掉 所以B选项正确
C选项和A选项类似的错误 并且比较的是字符串 ‘7’ 错误
D选项和B选项类似 但是比较的是字符串 ‘7’ 错误
4. 外连接(OUTER JOIN)
关系R、S 进行自然连接时,如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),这种连接就叫做外连接。
5. 左外连接
关系R、S 进行自然连接时,如果只把左边关系R中要舍弃的元组保留就叫做左外连接(LEFT OUTER JOIN或LEFT JOIN)
6. 右外连接
关系R、S 进行自然连接时,如果只把右边关系S中要舍弃的元组保留就叫做右外连接(RIGHT OUTER JOIN或RIGHT JOIN)
7. 除法
给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组。
R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。
R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在 X 属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合,记作:
例:
设关系R、S分别为下图的(a)和(b),R÷S的结果为下图 (c)
在关系R中,A可以取四个值{a1,a2,a3,a4}
- a1的象集为 {(b1,c2),(b2,c3),(b2,c1)}
- a2的象集为 {(b3,c7),(b2,c3)}
- a3的象集为 {(b4,c6)}
- a4的象集为 {(b6,c6)}
S在(B,C)上的投影为{(b1,c2),(b2,c1),(b2,c3) }
只有a1的象集包含了S在(B,C)属性组上的投影。
所以 R÷S ={a1}
函数依赖
定义:
设R(U) 是属性集 U上的关系模式,X、Y是U的子集。若对R(U) 的任何一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数决定Y,或Y函数依赖于 X,记作:X→Y。
如,学号→姓名 学号决定姓名 或姓名依赖于学号。
函数依赖中还可细分为多种函数依赖
- 部分函数依赖
- 完全函数依赖
- 传递函数依赖
1.部分函数依赖
设R(U)是属性集U上的关系,X、Y是U的子集,X’ 是X的真子集,若X→Y 且 X’→Y,则称Y部分依赖X,记作X→Y。
如: (学号,年龄)→学生姓名
学号→姓名 学生姓名依赖于主键–学号,因此学生姓名部分函数依赖于(学号,年龄)。
显然,当且仅当X为复合属性组时,才有可能出现部分函数依赖。
2.完全函数依赖
设R(U)是属性集U上的关系,X、Y是U的子集,X’是X的真子集。
若对于R(U)的任何一个可能的关系,有X→Y且X’ !→Y,则称Y完全函数依赖于X,记作X→Y。
所谓完全依赖是指在依赖关系的决定项(即依赖关系的左项)中没有多余属性,有多余属性就是部分依赖。
学号,姓名,课程号,课程名称,成绩
(学号,课程号)→成绩 成绩既不能单独依赖于学号,也不能单独依赖于课程号,因此成绩完全函数依赖于关键字(学号, 课程号)。
3.传递函数依赖
在关系模式R(U)中,设X,Y,Z是U的不同的属性子集,如果X确定Y、Y确定Z,且有X不包含Y,Y不确定X,(X∪Y)∩Z=空集合,则称Z传递函数依赖于X。
传递函数依赖会导致数据冗余和异常。传递函数依赖的Y和Z子集往往同属于某一个事物,因此可将其合并放到一个表中。
例:学号确定宿舍、宿舍确定费用,且有 学号不包含宿舍,宿舍不确定学号,符合传递函数依赖条件。
规范化理论
设有一个关系模式R(SNAME , CNAME , TNAME , TADDRESS),其属性分别表示学生姓名、课程名、任课教师姓名和任课教师地址。
学生姓名 | 课程名 | 教师名 | 教师办公室 |
---|---|---|---|
秀逗 | 信号与系统 | 老张 | 301 |
四眼 | 嵌入式系统 | 老六 | 302 |
大黄 | 操作系统 | 老张 | 301 |
豆豆 | 计算机网络 | 老六 | 302 |
这个模式存在下列存储异常的问题。
- (1)数据冗余
- (2)修改异常
- (3)插入异常
- (4)删除异常
把R分解成下列三个关系模式:R1(SNAME, CNAME)和R2(CNAME,TNAME) , R3(TNAME, TADDRESS),则能消除上述的存储异常现象。
模式设计强调“每个联系单独表达”是一条重要的设计原则
学生姓名 | 课程名 |
---|---|
秀逗 | 信号与系统 |
四眼 | 嵌入式系统 |
大黄 | 操作系统 |
豆豆 | 计算机网络 |
课程名 | 教师名 |
---|---|
信号与系统 | 老张 |
嵌入式系统 | 老六 |
操作系统 | 老张 |
计算机网络 | 老六 |
教师名 | 教师办公室 |
---|---|
老张 | 301 |
老六 | 302 |
老张 | 301 |
老六 | 302 |
范式
1. 第一范式(1NF)
如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是第一范式的模式,r是规范化的关系。
说明:在任何一个关系数据库中,第一范式是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
例如: | 学生姓名 | 课程名 |
2. 第二范式(2NF)
若关系模式R是1NF,且每个非主属性完全函数依赖于候选键,那么称R是2NF模式。
简单的说,是表中的属性必须完全依赖于全部主键,而不是部分主键。所以只有一个主键的表如果符合第一范式,那一定是第二
范式。
例如员工信息表中加上了"员工号"列,因为每个员工的员工编号是惟一的,因此每个员工可以被唯一区分。
3. 第三范式(3NF)
如果关系模式R是1NF,且每个非主属性都不传递依赖于R的候选码,则称R是3NF。
例如,存在一个部门信息表,其中每个部门有部门号、部门名称、部门简介等信息。那么在员工信息表中列出部门号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。
如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。
4.BC范式(BCNF)
若关系模式R是1NF,且每个属性都不传递依赖于R的候选键,那么称R是BCNF模式。
相对于第三范式,BC范式的要求更加严格。第三范式只是要求R为第二范式且非主属性不传递依赖于R的候选键,而BC范式则是对R的每个属性都做要求。
在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。
一个教师只教一门课。每门课由一名教师教,某一学生选定某门课,就确定了一个固定的教师。某个学生选修某个教师的课就确定了所选课的名称 : (S,J)→T,(S,T)→J,T→J
例:
给定关系模式R(U,F),其中:属性集 U={A1, A2, A3, A4, A5,A6}, 函数依赖集F={A1→A2, A1→A3, A3→A4, A1A5→A6}。关系模式 R 的候选码为( ),由于R存在非主属性对码的部分函数依赖,所以R属于( )
A. A1A3 B.A1A4 C.A1 A5 D.A1A6
A.1NF B.2NF C.3NF D.BCNF
答案:C 、A
解析:
候选码: 若关系中的某一属性或属性组的值能唯一的标识一个元组叫称该属性或属性组为候选码
这种题目的技巧 很简单 根据选项去计算闭包 不用理解闭包的概念 记住计算规则就行
A选项 A1A3 先看函数依赖集F={A1→A2, A1→A3, A3→A4, A1A5→A6} A1能推出A2 就把A2写上去
得到 A1A2A3 , A3能推出A4 得到 A1A2A3A4 , 只能推到这了 由于只能推出A1A2A3A4 而不是全部的属性集 U={A1, A2, A3, A4, A5,A6}
所以候选码不是 A1A3
B选项 A1A4 、 A1→A2 、A1A2A4、 A1→A3、 A1A2A3A4 只能推到这了 排除B选项
C选项 A1 A5 、 A1→A2 、 A1 A2A5, A1→A3, A1 A2A3A5 , A3→A4, A1A2A3A4A5 , A1A5→A6 , A1A2A3A4A5A6 能推出全部的属性集 U={A1, A2, A3, A4, A5,A6} 所以C正确
R存在非主属性对码的部分函数依赖 由于是部分函数依赖 所以 R属于 1NF
3、数据库设计
数据库设计的基本步骤(阶段)
- 需求分析
- 概念结构设计
- 逻辑结构设计
- 物理结构设计
- 数据库实施
- 数据库运行和维护
需求分析
数据需求分析是在项目确定之后,用户和设计人员对数据库应用系统所要涉及的内容(数据)和功能(行为)的整理和描述,是以用户的角度来认识系统。这一过程是后续开发的基础,因为逻辑设计、物理设计以及应用程序的设计都会以此为依据,是最困难、最耗费时间的一步。
概念结构设计
概念结构设计的目标是产生反映系统信息需求的数据库概念结构,即概念模式。概念结构是独立于支持数据库的 DBMS 和使用的硬件环境的。设计人员从用户的角度看待数据以及数据处理的要求和约束,产生一个反映用户观点的概念模式,然后再把概念模式转换为逻辑模式。
我们采用E-R模型将现实世界的信息加以抽象,由实体属性,以及实体之间的联系(E-R 图)来描述。
E-R模型 (ER图)
- 实体:用矩形框表示,框内标注实体名称。
- 属性:用椭圆形表示,并用连线与实体连接起来。
- 实体之间的联系:用菱形框表示,框内标注联系名称,并用连线将菱形框与有关实体相连,在连线上注明联系类型。
联系的类型
E-R图中的联系归结为三种类型:
- 一对一联系(1:1)
- 一对多联系(1:n)
- 多对多联系(m:n)
用E-R方法建立概念模型
(1) 选择局部应用
(2) 逐一设计分E-R图
(3) E-R图合并
选择局部应用
数据流图是对业务处理过程从高层到底层的一级级抽象,高层抽象流图一般反映系统的概貌,对数据的引用较为笼统,而底层又可能过于细致,不能体现数据的关联关系,因此要选择适当层次的数据流图,让这一层的每一部分对应一个局部应用,实现某一项功能。从这一层入手,就能很好地设计分 E-R 图
逐一设计分E-R图
对于每一局部应用,其所用到的数据都已经收集在数据字典中了,依照该局部应用的数据流图,从数据字典中提取出数据,使用抽象机制,确定局部应用中的实体、实体的属性、实体标识符及实体间的联系和其类型,就设计出了分E-R图。
E-R图合并
合并E-R图的目的在于在合并过程中解决分 E-R 图中存在的冲突,消除分 E-R 图之间存在的信息冗余,使之成为能够被全系统所有用户共同理解和接受的统一的、精炼的全局概念模型。
合并的方法:
将具有相同实体的两个或多个 E-R 图合二为一,在合成后的 E-R图中把相同实体用一个实体表示,合成后的实体的属性是所有分E-R 图中该实体的属性的并集。
E-R图合并时的冲突:
- 属性冲突 :属性的类型、取值范围、数据单位的不一致。
- 命名冲突:相同意义的属性,在不同的分 E-R 图上有着不同的命名(异名同义),或是名称相同的属性在不同的分 E-R 图中代表着不同的意义(同名异义)。
- 结构冲突 :同一实体在不同的分 E-R 图中有不同的属性;同一对象在某一分 E-R 图中被抽象为实体,而在另一分 E-R 图中被抽象为属性。
例:
在数据库设计的需求分析、概念结构设计、逻辑结构设计和物理结构设计的四个阶段中,基本E-R图是( )。
A.需求分析阶段形成的文档,并作为概念结构设计阶段的设计依据
B.逻辑结构设计阶段形成的文档,并作为概念结构设计阶段的设计依据
C.概念结构设计阶段形成的文档,并作为逻辑结构设计阶段的设计依据
D.概念结构设计阶段形成的文档,并作为物理设计阶段的设计依据
答案: C
解析: 记忆即可 E-R图是逻辑结构设计阶段形成的文档,并作为概念结构设计阶段的设计依据
逻辑结构设计
逻辑结构设计就是在概念结构设计的基础上进行数据模型设计,可以是层次模型、网状模型和关系模型。
逻辑结构设计的步骤:
- 1.确定数据模型
- 2.将 E-R 图转换成为指定的数据模型
- 3.确定完整性约束
- 4.确定用户视图
E-R图转换为关系模型
E-R图是由实体、属性和联系三要素构成,而关系模型中只有唯一的结构–关系模式。
采用以下方法加以转换:
(1)实体向关系模式的转换
(2)联系向关系模式的转换
(1)实体向关系模式的转换
- 每个实体类型转换成一个关系模式
- 实体属性即为关系模式的属性
- 实体标识符即为关系模式的键
注意:
得到的关系模式,有些可能会扩充属性。
(2)联系向关系模式的转换
- 1:1 联系
- 1:n 联系
- m:n 联系
1:1 联系
1:1联系,联系两端的实体类型转成两个关系模式,在任一个关系模式中加入另一个关系模式的键(作为外键)和联系的属性.
例:
- 学校(校名,地址,电话)
- 校长(姓名,性别,年龄,职称,所在学校,任职年月)
或 - 学校(校名,地址,电话,校长姓名,任职年月)
- 校长(姓名,性别,年龄,职称)
1:n 联系
1:n 联系,在N端实体类型转换成的关系模式中,加入1端实体类型的键(作为外键)和联系的属性。
例:
- 系(系号,系名,电话)
- 教师(工号,姓名,性别,年龄,所有系号,聘期)
m:n 联系
m:n 联系,联系类型需转换为关系模式,属性为两端实体类型的键(分别作为外键)加上联系的属性,而键为两端实体键的组合。
例:
- 学生(学号,姓名,年龄,性别)
- 课程(课程号,课程名,教师名)
- 选课(学号,课程号,成绩)
关系模式的规范化
由E-R图转换得来的初始关系模式并不完全符合要求,还会有数据冗余或更新异常存在,需要经过进一步的规范化处理。
步骤如下:
①根据语义确定各关系模式的数据依赖。
②根据数据依赖确定关系模式的范式。
③如果关系模式不符合要求,要根据关系模式的分解算法对其进行分解,达到3NF、BCNF或4NF。
④关系模式的评价及修正。
确定完整性约束
根据规范化理论确定了关系模式之后,还要对关系模式加以约束,包括数据项的约束、表级约束及表间约束。可以参照SQL标准来确定不同的约束,如检查约束、主码约束以及参照完整性约束,以保证数据的正确性。
用户视图的确定
根据数据流图及用户信息建立视图模式,提高数据的安全性和独立性。
- 根据数据流图确定处理过程使用的视图
- 根据用户类别确定不同用户使用的视图
反规范化
反规范化是加速读操作性能(数据检素)的方法,通过有选择地在数据结构标准化后添加特定的冗余数据来增加查询效率。常见的反规范化操作有:冗余列、派生列、表重组和表分割,其中表分割又分为水平分割和垂直分割。反规范化会带来冗余数据不一致问题,常采用数据同步的方法来解决。
方法有:应用程序同步、批量处理同步和触发器同步等。
物理结构设计
物理结构设计就是为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
物理结构设计的主要工作步骤:
- 确定数据分布
- 存储结构
- 访问方式
数据库实施
运用DBMS提供的数据库语言(如SQL)及宿主语言,根据逻辑设计和物理设计的结果,在计算机上建立起实际的数据库结构,数据加载(装入),进行试运行和评价的过程,叫数据库的实施(实现)。
包括以下三个步骤:
- 建立数据库结构
- 数据加载(组织数据入库)
- 试运行和评价
数据库运行维护
数据库维护工作的主要内容:
- 数据库性能的监测和改善
- 数据库备份及故障恢复
- 数据库重组和重构
数据库备份及故障恢复
数据备份是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。
备份可分为:
- 冷备份(静态备份)是在数据库正常关闭的情况下进行的,所以备份过程中不允许对数据库进行任何存取、修改活动。
- 热备份(动态备份)热备份是指备份期间允许对数据库进行存取或修改,即备份和用户事务可以并发执行。
按备份的内容分类
- 完全备份:备份全部文件,并不依赖文件的存档属性来确定备份那些文件。
- 差分备份:备份自上一次完全备份以来变化过的文件。
- 增量备份:备份上一次备份后(无论是哪种备份),所有发生变化的文件。
日志文件的作用
- 故障恢复必须用日志文件。
- 在动态备份方式中必须建立日志文件,备份和日志文件综合起来才能有效地恢复数据库。
例:
假设系统中有正在运行的事务,若要转储全部数据库,则应采用( )方式。
A.静态全局转储
B.动态增量转储
C.静态增量转储
D.动态全局转储
答案: D
4、应用程序和数据库交互
应用系统中,用户不能直接访问后台的数据库,需要高级程序语言来完成与用户之间的交互,因此数据库管理系统需要提供程序
级别的接口来访问数据。
常见的应用程序与数据库的交互方式:
- 库函数,如Oracle的OCI(Oracle调用接口)。
- 嵌入式 SQL,将SQL语句直接写入某种高级程序语言。
- 通用数据接口标准,如ODBC、JDBC、DAO、RDO、ADO等。
- 对象关系映射 (ORM),是一种为了解决面向对象与关系数据库不匹配的技术。就是将Java中的对象与数据库中的表关联对应起来。
常见的NoSQL数据库按存储方式,可分为文档存储、键值存储、列存储和图存储。
分 类 | 典型产品 | 应用场景 | 优点 | 缺点 |
---|---|---|---|---|
文档存储 | MongoDB、CouchDB | Web 应用,存储面向文档和半结构化数据 | 结构灵活,可以根据 value 构建索引 | 缺乏统一的查询语法:无事务处理能力 |
键值存储 | MMemcached、Redis | 内容缓存,如会话、配置文件、参数等 | 扩展性好,灵活性强,大量操作时性能高 | 数据无结构化,通常被当成字符串或者二进制数据,通过键查询值 |
列存储 | Bigtable、HBase、Cassandra | 分布式数据存储和管理 | 可扩展性强,查找速度快,复杂性低 | 功能局限;不支持事务的强一致性 |
图存储 | Neo4i、OrientDB | 社交网络、推荐系统专注于构建系统图谱 | 支持复杂的图形算法 | 复杂性高,只能支持一定的数据规模 |
文档存储
在文档存储中,文档可以很长,很复杂,无结构,可以是任意结构的字段,并且数据具有物理和逻辑上的独立性,这就和具有高度结构化的表存储(关系型数据库的主要存储结构)有很大的不同,而最大的不同则在于它不提供对参数完整性和分布事务的支持。
关系型数据库用语 | 数据库 | 表 | 记录 |
---|---|---|---|
文档型数据库用语 | 数据库 | 集合 | 文档 |
当前主流的文档型数据库:
名称 | 查 询 语 言 | 注释 |
---|---|---|
BaseX | Xquery, Java | XML 型数据库 |
CouchDB | Erlang | 集合 |
MongoDB | C++ | JSON 型数据库 |
Lotus Notes | LotusScript, Java, others | 多键值 |
MarkLogic Server | Xquery | XML 型数据库 |
文档数据库MongoDB
MongoDB是一个基于分布式文件存储的数据库,它的最大特点就是无表结构。在保存数据和数据结构的时候,会把数据和数据结构都完整地以BSON的形式保存起来,并把它作为值和特定的键进行关联。正是由于这种设计,使得它不需要表结构,而被称为文档型数据库。
MongoDB的特征:
- 高性能:提供JSON、XML等可嵌入数据快速处理功能;提供文档的索引功能,大大提高了查询速度。
- 丰富的查询语言:为数据聚合、结构文档,地理空间提供丰富的查询功能。
- 高可用性:提供数据冗余处理和故障自动转移的功能。
- 水平扩展能力:通过集群将数据分布到多台机器,而不是只提升单个节点的性能。具体处理分为主从和权衡两种处理模式。
键值存储
键值存储使用简单的键值方法来存储数据。键值数据库将数据存储为键值对集合,其中键作为唯一标识符。键和值都可以是从简单对象到复杂复合对象的任何内容。
类型 | 键 | 值 |
---|---|---|
图片名称 | 123.jpg | Binary image file |
网页 URL | https:///www.google.com | HTML of a web page |
文件路径名 | C:/usr/Zhang/file1.doc | WORD document |
MDS 哈希 | 9689e3612ioifej23ERFT93089r3456P | This is a test. |
REST Web 服务调用 | View-person?person-id=12334&format=xml | <Person><id>12334</id></Person> |
SQL 查询 | SELECT * FROM STUDENT | * |
数据操作方式
键值存储中存在三种操作:put、get 和 delete。开发者使用put、get 和 delete函数访问和操作键值存储:
- put($key as xs:string, $value as item())对表添加一个新的键值对,并且当键存在时,更新键对应的值。
- get($key as xs:string) as item()根据给出的任意键返回键对应的值,如果键值存储中没有该键,将返回一个错误信息。
- delete($key as xs:string)将键和对应的值从表中删除,如果键值存储中没有该键,将返回一个错误信息。
数据保存方式
- 临时性保存类型:这类数据库把数据都保存在内存中,读和写速度非常快,但当数据库停止或机器重启后,数据就不存在了。
- 永久性保存类型:这类数据库把数据保存在硬盘上。由于牵扯到对硬盘的IO操作,所以读写性能慢,优势是不会丢失数据。
- 两者兼具型:兼具临时性保存和永久性保存的优点。如Redis系统,它首先把数据存在内存中,在内存中进行读和写操作。在满足特定条件时,将数据写入到硬盘保存。既确保了内存中数据处理的高速性,又通过写入硬盘来保证数据的永久性
键值存储产品
键值存储产品主要有:亚马逊的Memcached、Redis、 Dynamo、Project Voldemort、Tokyo Tyrant、Riak、 Scalaries 等。
(1)Memcached
Memcached 属于临时性保存类型,是高性能的分布式内存对象缓存系统。通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web应用的速度、提高可扩展性。Memcached 常作为数据库前段 Cache 使用。因为它比数据库少了很多 SQL解析、磁盘操作等开销,而且它是使用内存来管理数据的,所以它可以提供比直接读取数据库更好的性能。
Memcached 也常作为服务器直接数据共享的存储媒介,例如SSO 系统中保持系统单点登录状态的数据就可以保持在Memcached中,被多个应用共享。
(2)Redis
Redis是一种主要基于内存存储和运行,能够快速响应的键值数据库,属于临时和永久兼具类型,有点像 Memcached,整个数据库系统加载在内存当中进行操作,但是通过定期异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作。其主要缺点是数据库容易受到物理内存的限制,不能用作海量数据的高性能读写,Redis没有内建的原生扩展机制,这意味着它不会自动水平扩展以处理更多的负载。要实现分布式读写,需要依赖客户端库(如Redis Cluster集群、Redis Sentinel等)来处理分片、复制和故障转移等操作因此 Redis 适合的场景主要局限在较小数据量的高性能操作和运算上、和需要快速响应和处理大量读写操作的场景。
比 较 内 容 | 传统关系型数据库 | MongoDB | Redis |
---|---|---|---|
读写速度 | 一般。基于硬盘读写,约束很强 | 较快。基于内存读写,约束很弱 | 最快。主要基于内存读写,约束弱 |
应用范围 | 最广,不能很好处理大数据和高并发访问 | 互联网应用为主,可以处理大数据和高并发访问 | 互联网特定应用为主,擅长处理高响应和高并发的访问的数据 |
列存储
面向列的数据库是以列作为单位来进行数据的存储的,擅长进行以列为单位的数据处理。
列存储数据库主要有Google的Bigtable、由Bigtable衍生的Hypertable和HBase、 Cassandra。
类型 | 数据存储方式 | 特点 |
---|---|---|
面向行的数据库 | 以行为单位进行存储 | 对少量行进行数据读取和更新 |
面向列的数据库 | 以列为单位进行存储 | 对大量行少数列进行读取,对所有行的指定列进行同时更新 |
HBase
HBase(Hadoop Database)是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server 上搭建起大规模结构化存储集群
图存储
图存储是一个包含一连串的节点和关系的系统,当它们结合在一起时,就构成了一个图。图存储有三个字段:节点、关系和属性。
图数据库对于那些对象之间具有复杂关系的业务问题很有用,如社交网路、规则引擎、生成组合和那些需要快速分析复杂网络结果并从中找出模式的图系统。
名 称 | 查询语言 | 注释 |
---|---|---|
AllegroGraph | SPARQL | RDF GraphStore |
DEX | Java,C# | High-performance Graph Database |
Neo4j | Java | – |
FlockDB | Scala | – |
其它存储模式
1.多值数据库
多值数据库系统提供了一个通用的数据集成与访问平台,屏蔽了现有各数据库系统不同的访问方法和用户界面,给用户呈现出一个访问多种数据库的公共接口。
常见的多值数据库有Rocket U2、Extensible Storage Engin(ESE/NT)、 OpenInsight 和OpenQM等。
2.时间序列与流数据库
时间序列数据库是指具有处理时间序列数据,能对时间数据数组建立索引的优化数据库系统。
流数据库又被称为实时数据库,是一种使用实时处理数据的方式来处理状态不断变化的数据库系统。对时间序列的数据库提出实时的
处理要求,那么时间数据库就是流数据库。例如股票的价格、自动驾驶汽车的数据曲线等都需要实时计算处理,此时流数据库发挥巨
大作用。
常见的时间序列数据库:InfluxDB、OpenTSDB
3.网格和云数据库
网格和云数据库(Grid & Cloud Database)是基于网格计算或者云
计算的数据库。
- 云计算是一种随需计算或者效用计算,允许用户无需了解底层IT基础设施架构,就能通过互联网访问各种基于IT资源的服务。
- 网格计算可以理解为“虚拟超级计算机”,以松耦合的方式将大量的计算资源连接在一起提供单个计算资源无法完成的计算能力。
主流数据库产品:GridGain和CrateDB。