【2024软考架构师自学笔记】5. 数据库设计基础知识


5.1 数据库基本概念

5.1.1 数据库技术的发展及分类

  • 基本概念
    • 数据(Data):是描述事物的符号记录,它具有多种表现形式,如文字、图形、图像、声音和语言等。
    • 数据库系统(DataBase System,DBS):是一个采用了数据库技术,有组织地、动态地存储大量相关联数据,从而方便多用户访问的计算机系统。
    • 数据库(DataBase,DB):是统一管理的、长期储存在计算机内的,有组织的相关数据的集合。
    • 数据库管理系统(DataBase Management System,DBMS):是数据库系统的核心软件,是由一组相互关联的数据集合和一组用以访问这些数据的软件组成。DBMS 通常分三类:关系数据库系统(Relation DataBase System,RDBS)、面向对象的数据库系统(Object-Oriented DataBase Systems,OODBS)、对象关系数据库系统(Objective Relational DataBase System,ORDBS)。
  • 发展阶段
    (1)人工管理阶段。
    特点:数据量较少、数据不保存、没有软件系统对数据进行处理。
    缺点:应用程序与数据之间依赖性太强、数据组与数据组之间存在数据冗余。
    (2)文件系统阶段。
    特点:数据可长期保留、数据不属于某个特定应用、文件组织形式多样化。
    缺点:数据冗余、数据不一致性、数据孤立。
    (3)数据库系统阶段。
    特点:采用复杂的数据模型表示数据结构、有较高的数据独立性。
    优点:对应用程序的高度独立性、数据的充分共享性、操作方便性。

5.1.2 数据模型

  • 数据模型定义:数据库的基础结构是数据模型,是用来描述数据的一组概念和定义。
  • 数据模型的三要素:数据结构、数据操作和数据的约束条件。
  • 数据的约束条件:
    (1)实体完整性。实体完整性是指实体的主属性不能取空值。
    (2)参照完整性。在关系数据库中主要是指外键参照的完整性。若 A 关系中的某个或者某些属性参照 B 关系或其他几个关系中的属性,那么在关系 A 中该属性要么为空,要么必须出现在 B关系或者其他的关系的对应属性中。
    (3)用户定义完整性。用户定义完整性反映的是某一个具体应用所对应的数据必须满足一定的约束条件。例如,软考成绩不能小于0,也不能大于75。
  • 按照不同的数据模型,可以将数据库的发展历史分为3个阶段:
    • 层次和网状数据库系统
      • 层次模型:采用树形结构表示数据与数据间的联系。
      • 网状模型:采用网络结构表示数据间联系的数据模型称为网状模型。
    • 关系数据库系统
      关系数据库系统采用关系模型作为数据的组织方式,在关系模型中用表格结构表达实体集以及实体集之间的联系,其最大特色是描述的一致性。
    • 第三代数据库系统:NoSql数据库

5.1.3 数据库管理系统

  • DBMS定义:DBMS 是数据库系统的核心软件,是由一组相互关联的数据集合和一组用以访问这些数据的软件组成。
  • DBMS功能:数据定义、数据库操作、数据库运行管理、数据组织、存储和管理、数据库的建立和维护。
  • DBMS特点:数据结构化且统一管理、有较高的数据独立性、数据控制功能(对数据库中数据的安全性、完整性、并发和恢复的控制)。

5.1.4 数据库的三级模式

  • 数据库三级模式:
    • 外模式(视图层):也称用户模式或子模式,是用户与数据库系统的接口。对应的是用户视图。
    • 概念模式(逻辑层):也称模式,是数据库中全部数据的逻辑结构和特征的描述,它由若干个概念记录类型组成,只涉及“型”的描述,不涉及具体的值。是数据库核心,对应的是数据库表结构。
    • 内模式(物理层):也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。对应的是具体存储文件。
  • 二级映射关系:
    • 外模式与概念模式映射:可以保证数据逻辑独立性,即外部的应用程序与逻辑结构的基本表相互独立,当逻辑表发生变化时,应用程序不需相应修改,仅需要修改映射关系。
    • 内模式与概念模式映射:可以保证数据库物理独立性,即应用程序与内模式相互独立,当内模式的物理存储发生变化时,应用程序不需要变化。例如:数据迁移时,不需要修改应用程序。

5.2 关系数据库

5.2.1 关系数据库基本概念

关系数据库系统是支持关系数据模型的数据库系统。

  • 基本术语
    • 属性 (Attribute):字段、列
    • 域 (Domain):取值范围
    • 目或度 (Degree):属性的个数
    • 元组:记录、行
    • 候选码/键 (Candidate Key):能唯一的标识一个元组,可以是多个属性组合,可以有多个候选键。
    • 主码 (Primary Key):主键
    • 外码 (Foreign Key):外键
    • 全码 (All-key):关系模型的所有属性组是这个关系模式的候选码,称为全码。
    • 主属性和非主属性:组成候选码的属性就是主属性,其他为非主属性。
  • 关系数据库模式
    使用R(U,D,dom,F)表示,R表示关系名; U是组成该关系的属性名集合; D是属性的域; dom是属性向域的映像集合;F为属性间数据的依赖关系集合。通常将关系模式简记为:R(U) 或R(A1,A2,A3,…,An)
  • 关系的完整性约束
    • 实体完整性约束:必须有主键,不能为空,且唯一
    • 参照完整性约束:关系关系之间的引用约束
    • 用户自定义完整性约束:用户自定义的约束,例如:取值范围

5.2.2 关系运算

  • 集合运算
    • 并∪:若关系R和关系S是同构的(即并相容性:列数相同,且对应列的数值类型相同),则R和S的并运算结果为R和S所有记录(去除重复),记作:R∪S
    • 交 ∩:若关系R和关系S是并相容的,则关系R和关系S的交运算结果为R和S中都出现的元素,记作:R∩S
    • 差 - :若关系R和关系S是并相容的,则关系R和关系S的差运算结果为出现在R中但不出现在S中的元素,记作:R-S
    • 笛卡尔积 ×:关系R和关系S的笛卡尔积运算结果为:列相加(重名的用R.a、S.a表示),行相乘,记作R×S
  • 关系运算
    • 选择 σ:选择又称限制,它是在关系R中选择满足给定条件的诸元组。例如:查询信息系IS全体学生 σSdept=‘IS’(Student),查询年龄小于20岁的男生:σSage<20(Student)
    • 投影 Π:关系R上的投影是从R中选择出若干属性列组成新的关系。记作∏A(R)={t[A] | t∈R} 其中A为R的属性列。投影操作是从列的角度进行的运算。例如:查询学生的姓名和所在系 ∏Sname,Sdept(Student)。查询学生关系Student都有哪些系 ∏Sdept(Student)
    • 连接 θ:也称为θ连接,它是从两个关系的笛卡儿积中选择属性间满足一定条件的元组。
      • 等值连接
      • 自然连接:记作R▷◁S,自然连接是一种特殊的等值连接,它是R和S去除重复的属性列之和,同名属性列取值相等。
      • 此外,还有外连接,左外连接,右外连接。
    • 除 ÷:设关系R除以关系S的结果为关系T,则T包含所有在R但不在S中的属性及其值,则T的元组与S的元组的所有组合都在R中。例如:查询选修了全部课程的学生号码和姓名:∏Sno,Cno(SC)÷∏Cno(Course)▷◁∏Sno,Sname(Student)
  • 等价关系表达式判断
  • 自然连接查询效率判断:通常自然连接高于笛卡尔积的
  • 关系运算与SQL对应
    投影对应SELECT,选择对应WHERE,笛卡尔积对应多表关联JOIN
  • 例题1:关系R、关系S,如下图:
ABCD
6315
6151
6574
6374
CD
15
74
  • R、S做自然连接的元组个数和属性个数是多少?4和3
  • 与Π1,4(σ3=6(R×S))等价的关系代数表达式为(注意σ3=6为RS组合后的第3列和第6列)?ΠA,D(σR.C=S.D(R×S))
  • 例题2:
  • 各表达式中哪个性能最优?(注:需要补充例题)
  • 例题3:关系R(A,B,C,D,E)与关系S(A,B,C,F,G),与Π1,2,4,6,7(σ1<6(R▷◁S))等价SQL为?
    SELECT R.A,R.B,D,F,G FROM (R,S) WHERE R.A=S.A and R.B=S.B and R.C=S.C and R.A<S.F

待整理:
现在如下三个关系,分别描述学生、课程和选修信息:
S(S#,SNAME,AGE,SEX)
C(C#,CNAME,TEACHER)
SC(S#,C#,GRADE)
请用关系代数完成下列查询:
(1)检索“程军”老师所授课程的课程号(C#)和课程名(CNAME);
ΠC#,CNAME(σTEACHER='程军’©)
(2)检索年龄大于 21 的男学生学号(S#)和姓名(SNAME);
ΠS#,SNAME(σAGE>21∧SEX=‘男’(S))
(3)检索至少选修“程军”老师所授全部课程的学生姓名(SNAME);
(4)检索李强同学未选修课程的课程号(C#)。


5.2.3 关系数据库设计基本理论

  • 函数依赖(将用于范式判断)
    通过属性学号可以找到一个系号,属性系号可以决定系名,这就是函数依赖关系,记作 X→Y,即X可以决定Y,反之Y不能决定X。Y依赖于X。函数依赖是一种最重要、最基本的数据依赖。而关系数据库设计理论的核心就是数据间的函数依赖。
  • 部分函数依赖:(学号,课程号)→系号就属于部分函数依赖,因为对于系号来说有学号就可以推出系号。
  • 传递依赖:学号→系号,系号→系主任名,则称系主任名传递依赖于学号。

求候选键

  • 方法:将依赖关系用箭头链接成图,箭头流入为0的(无入度),入度为0只无入度,只有出度。
  • 例题1:
    关系R(A1,A2,A3,A4)的函数依赖集F={A1→A2, A3→A2, A2→A3, A2→A4},R的候选关键字为?画图尖头图,A1可以遍历找到其他属性,所以A1为候选关键字。
  • 列题2:
    关系模式P(A,B,C,D,E,F,G,H,I,J)满足下列函数依赖,FD={ABC→E, AB→G, B→F, C→J, CJ→I, G→H},求候选码?ABCD
  • 例题3:
    关系R(A,B,C)满足下列函数依赖,F{B→C, B→A, A→BC},关系R的候选关键字为?A和B都可以

Armstrong公理

从已知的一些函数依赖,可以推导出另外一些函数依赖,这就需要一系列推理规则,这些规则常被称作“Armstrong 公理”。

  • 设关系式 R(U,F),U 是关系模式 R 的属性集,F 是 U 上的一组函数依赖,则有以下三条推理规则:
    1)A1 自反律:若 Y⊆X⊆U,则 X→Y成立。如:属性集U包含A,B,C三个属性,X包含A,B属性,Y包含C属性,则AB组合可以决定A,AB组合也可以决定B。如:身份证号和姓名可以唯一确定一个身份证号,也可以唯一一个确定姓名。即一个较大版块可以确定其中的部分版块。
    2)A2 增广律:若Z⊆U且X→Y,则 XZ→YZ 成立。
    3)A3 传递律:若 X→Y,Y→Z ,则 X→Z,如:学号可以决定一个系号,系号决定系位置,则根据学号可以找到系位置。
  • 根据上面三条推理规则,又可推出下面三条推理规则:(注:详细推导过程查看视频)
    1)合并规则:若 X→Y,X→Z,则有X→YZ(由增广率和传递率推导)
    2)伪传递规则:若 X→Y,WY→Z,则 XW→Z(由增广率和传递率推导)
    3)分解规则:若 X→Y,Z⊆Y,则 X→Z(由自反率和传递率推导)

规范化

关系数据库设计的方法之一就是设计满足适当范式的模式,通常可以通过判断分解后的模式达到几范式来评价模式的规范化程度。范式包括:

  • 第一范式(1NF):属性值都是不可在分的原子值
  • 第二范式(2NF):符合第一范式,且非主属性完全依赖于主键。(2NF目标是消除非主属性对候选键的部分依赖,通常是由于候选键为组合候选键,常导致非主属性对主属性部分函数依赖)
  • 第三范式(3NF):符合第二范式,且没有非主属性对候选键的传递依赖。
  • BC范式(BCNF):符合第三范式,消除主属性对候选键的部分和传递依赖
  • 第五范式(5NF):

范式判断

  • 第一范式判断
    例如:关系模式R(系名称,高级职称人数)是否满足1NF?若不满足,如何调整?不满足,将高级职称分为:教授和副教授。
  • 第二范式判断
    例如:请思考该关系模式存在哪些问题(从数据冗余、更新异常、插入异常、删除异常等方面考虑),解决方案是什么?
学号课程号成绩学分
S01C01754
S02C01704
S01C02826
S02C02796

分析:

  1. 该关系模式满足1NF,候选键为学号课程号的组合,主属性为学号、课程号,非主属性为成绩、学分。函数依赖为学号课程号组合可以决定成绩,课程号可以决定学分。由于学分由课程号决定,存在非主属性对主属性的部分函数依赖。
  2. 存在问题:学分存在数据冗余问题,对学分进行修改时可能存在修改不全导致更新异常,如有一个新课程还没有学生报名,没有学号插入学分会导致插入异常,如果学生毕业需要删除学号会同时删除学分导致删除异常。
  3. 解决方案:通过拆分表格,提升规范化程度。拆分结果为:原表格变为:学号、课程号、成绩,新拆出表格:课程号、学分。通过拆分消除非主属性对候选键的部分依赖,达到2NF要求。
  • 第三范式判断
    例如:请思考该关系模式存在哪些问题(从数据冗余、更新异常、插入异常、删除异常等方面考虑),解决方案是什么?
学号姓名系号系名系位置
S01张三D01计算机系1号楼
S02李四D01计算机系1号楼
S03王五D02信息系2号楼

分析:

  1. 该关系模式中学号可以决定唯一一条记录,所以学号为候选键,且只有一个属性,不存在部分函数依赖,满足2NF。主属性为学号,非主属性为姓名、系号、系名、系位置。函数依赖为:学号→姓名,学号→系号,系号→系名,系号→系位置。而非主属性系名、系位置都通过系号依赖于学号,说明存在非主属性传递函数依赖于主属性,不满足3NF。
  2. 存在问题:系名、系位置存在数据冗余,更新系名或系位置时可能更新不完全、造成数据不一致导致更新异常,新增一个系时,无学生报名没有学号可导致插入异常,删除系信息时可以连带学员信息也删掉了导致删除异常,也可能删除学员信息时连带删除了系信息导致删除异常。
  3. 解决方案:通过拆分表格,提升规范化程度。拆分后结果为:原表变为:学号、姓名、系号,新拆出表为:系号、系名、系位置。通过拆分消除非主属性传递依赖于主属性,达到3NF要求。

模式分解

对关系模式中属性拆分,形成新的关系模式,成为模式分解。

  • 对关系模式分解结果判断:
    • 是否保持函数依赖:分解后的关系模式的函数依赖,合并后与原来等价,即保持函数依赖。
    • 是否无损:分解后的关系模式做自然连接和投影合并后,与原来一样的,即无损。
  • 列题:
  • 是否保持函数依赖判定:
    • 例题1:
      关系范式R(A, B, C),F= {A→B, B→C},将其拆分为: R1(A, B),R2(B, C),是否保持函数依赖?
      保持
    • 例题2:
      关系范式R(A, B, C),F= {A→B, B→C, A→C},将其拆分为: R1(A, B),R2(B, C),是否保持函数依赖?
      拆分后函数依赖为A→B, B→C,通过推导可得出A→C,所以:保持
    • 例题3:
      关系范式R(A, B, C),F= {A→B, B→C, A→C},将其拆分为: R1(A, B),R2(A, C),是否保持函数依赖?
      拆分后函数依赖为A→B, A→C,无法推导出A→C,所以:未保持
    • 例题4:
      关系范式R(A, B, C, D, E),F= {A→B, D→E},将其拆分为: R1(A, B, C),R2(D, E),是否保持函数依赖?
      拆分后函数依赖为A→B, D→E,所以:保持(有损)
  • 是否无损判定例题:
    • 例题1:
      关系范式:成绩(学号、姓名、课程号、课程名、分数),函数依赖:学号→姓名,课程号→课程名,(学号,课程号)→分数,若将其分解为:成绩(学号,课程号,分数),学生(学号,姓名),课程(课程号,课程名),该分解是否为无损分解?
      解题思路:
    1. 分析:该关系范式属性都不能在分解满足1NF。候选键为学号和课程号组合,主属性为学号、课程号,非主属性为姓名、课程名、分数,其中姓名部分依赖于学号,课程名部分依赖于课程号,所以存在非主属性对候选键的部分函数依赖,不满足2NF。分解后满足BCNF范式。
    2. 判断这种分解好不好:
      1)是否保持函数依赖:保持
      2)是否无损:无损
  • 判断是否无损方法可以用画表格方法。(详见视频)
  • 也可以用公式法判断(只能判断两个分解),例如:设R=ABC,F={A→B},则分解p1={R1(AB), R2(AC)}与p2={R1(AB), R2(BC)是否都为无损分解?
    • 因为p1的R1,R2的交集为{A},差集为{B} 或{C},只要存在交集决定差集的函数依赖就是无损的,所以p1是无损的。
    • 因为p2的R1,R2的交集为{B},差集为{A} 或{C}, 交集{B}与差集{A}无函数依赖,所以p2是有损的。
  • 真题:
    关系R(U, F),U={A,B,C,D,E}, F={A->BC, B->D, D->E},若将其分解成p={R1(U1, F1), R2(U2, F2)},其中U1={A,B,C},U2={B,D,E},判断分解p好不好?
    1)是否保持函数依赖:U1中A->BC,U2中B->D, B->E,保持了函数依赖。
    2)是否无损:
    • 公式法:U1∩U2={B},U1-U2={A,C},U2-U1={D, E},交集{B}存在决定差积{D, E}的函数依赖,所以是无损的。
    • 表格法:
ABCDE
R1
R2

首先找同名属性列为B,由于B->D在R2中保留下来,所以对应R1中D可以打√,D变成同名属性列,由于D->E,所以R1对应E可以打√,此时第一排都打√了,所以是无损的。

5.3 数据库设计

5.3.1 数据库设计基本步骤

用户需求分析、概念结构设计、逻辑结构设计、物理结构设计、应用程序设计、运行维护

5.3.2 数据需求分析

用户需求分析是综合各用户的应用需求,对现实世界要处理的对象进行详细调查,在了解先行系统的概况,确定新系统功能的过程中,协助用户明确对新系统的信息要求、处理要求和系统要求,确定新系统的边界。产物:数据流图、数据字典、需求说明书等。

5.3.3 概念结构设计

概念数据模型又称为实体-联系模型,它按照用户的观点来对数据和信息建模,主要用于数据库设计。概念模型主要用实体-联系方法(Entity-Relationship Approach)表示,简称 E-R 方法。概念结构设计工作步骤包括:选择局部应用、逐一设计分 E-R 图和 E-R 图合并。在进行 E-R 图合并时,需解决属性冲突、命名冲突和结构冲突。E-R 模型简称 E-R 图,是描述概念世界、建立概念模型的实用工具。

  • E-R图的三个要素有:实体(矩形)、属性(椭圆)、联系(菱形)
  • 实体之间联系:一对一(1:1)、 一对多(1:n)、多对一(n:1)、多对多(n:m)
  • E-R图的集成方法:多个局部E-R图一次集成、逐步集成,用累加方式一次集成两个局部E-R图。
  • 集成产生的冲突和解决办法:
    • 属性冲突: 包括属性域冲突和属性值冲突。
    • 命名冲突:包括同名异义和异名同义。(同一实体)
    • 结构冲突:包括同一对象在不同应用中具有不同的抽象(例如班级实体中老师为一个属性,但在其他E-R图中可能是实体),以及同一实体在不同局部E-R中所包含的属性个数和属性排列次序不完全相同。

5.3.4 逻辑结构设计

逻辑结构设计阶段主要工作步骤包括确定数据模型、将 E-R 图转换成指定的数据模型、确定完整性约束和确定用户视图。

  • 数据模型3要素:数据结构、数据操作、数据的约束条件。
  • 典型的数据模型有:
    • 层次模型:类似树形结构,包含父子层次,子节点只有一个父节点。
    • 网状模型:字节点可有多个节点。
    • 面向对象的模型:以对象为单位组织的模型。
    • 关系模型:即数据库表,关系即表名,关系属性即表字段。
  • 完整性约束
    • 实体完整性约束:主属性不能为空,且唯一
    • 参照完整性约束:关系关系之间的引用
    • 用户自定义完整性约束:自定义
    • 触发器
  • 逻辑结构设计阶段的主要工作:
  1. E-R图转关系模式
    • 实体向关系模式转换
    • 联系向关系模式转换
      • 一对一
  2. 关系模式规范化(后期详细介绍)
  3. 确定完整约束(保证数据的正确性)
  4. 确定用户视图(提高数据的安全性和独立性)
    • 根据数据流图确定处理过程使用的视图
    • 根据用户类别确定不同用户使用的视图
  5. 应用程序设计
  • 联系向关系模式转换
    • 一对一:转换为独立关系模式或归并(并到任意一端)
    • 一对多:转换为独立关系模式或归并(并到任意一端),多端主键为主键
    • 多对多:必须转换为独立关系模式,不能归并,组合为主键
  • 反规范化
    在关系模式的规范化过程中,会导致关系的概念愈来愈单一化,在响应用户查询时,往往需要涉及多表的关联操作,导致查询性能下降。为此需要对关系模式进行修正,对部分影响性能的关系模式进行处理,包括分解、合并、增加冗余属性等。这种修正称之为反规范化设计。反规范化都会在数据库中形成数据冗余,造成和更新异常的问题,为此常见的方法有应用程序同步、批量处理同步和触发器同步等。

5.3.5 物理设计

一般来说,物理设计的主要工作步骤包括:确定数据分布、存储结构、访问方式。

5.3.6 数据库实施

根据逻辑和物理设计的结果,在计算机上建立起实际的数据库结构,数据加载(或称装入),进行试运行和评价的过程,叫作数据库的实施(或称实现)。

  • 建立实际的数据库结构
  • 数据加载
  • 数据库试运行和评价:的目的是测试应用程序的功能;测试数据库的运行效率是否达到设计目标,是否为用户所容忍。测试的目的是为了发现问题,而不是为了说明能达到哪些功能。所以,测试中一定要有非设计人员的参与。

5.3.7 数据库运行维护

数据库维护工作的主要内容包括对数据库性能的监测和改善、故障恢复、数据库的重组和重构。在数据库运行阶段,对数据库的维护主要由DBA完成。

  • 对数据库性能的监测和改善:目前的DBMS都提供一些系统监控或分析工具。例如SQL Server Profiler组件、 Transaction-SQL工具和Query Analyzer组件等都可进行系统监测和分析。

  • 数据库的备份及故障恢复:数据库的备份及故障恢复方案,一般基于 DBMS提供的恢复手段。

  • 数据库的备份

    • 冷备份:也称静态备份,是指关闭数据库进行整体备份。(简单,低度维护高度还原)
    • 热备份:也称动态备份,利用备份软件不用关闭数据库的备份。
  • 根据备份的量划分:完全备份、差量备份(仅备份上一次完全备份后变化的数据)、增量备份(备份上一次备份后变化的数据)

  • 事务日志:是指针对数据库改变所作的记录,先写日志,再写数据库。

  • 数据库故障恢复

    • 事务本身可预期的故障(本身逻辑问题导致):通过程序中预先设定的回滚恢复
    • 事务本身不可预期的故障(算术溢出,违反存储保护):由DBMS的恢复子系统通过日志恢复
    • 系统故障:通常使用检查点,系统重启自动完成
    • 介质故障:一般使用日志重做业务
  • 恢复办法

    • 撤销事务UNDO:故障发生对未完成事务放入UNDO撤销。
    • 重做事务REDO:故障发生对已完成事务放入REDO重做。
  • 数据库性能优化

    • 集中式数据库优化策略
      • 硬件系统:升级硬件
      • 系统软件:配置参数等
      • 数据库设计:表与视图(规划)、索引、SQL优化(以不相干子查询代替相干子查询;只查询需要的列,用IN条件子句代替OR子句,经常提交Commit释放锁,减少多表查询)
      • 应用软件:数据库连接池
    • 分布式数据库优化策略
      • 各节点通信代价(全局查询树变换、多副本策略、查询树分解、半连接与直接连接)
  • 数据库重组和重构

5.4 用户访问数据库的标准接口

5.4.1库函数级别访间接口

如Oracle 数据库的 Oracle Call Interface(OCI)。 开发者可以使用高级程序语言编写程序实现人机交互和业务逻辑,而使用 OCI来访问数据库。缺点:强依赖于特定的数据库、学习成本高,开发效率低。

5.4.2嵌入SQL访问接口

将 SQL语句直接写入某些高级程序语言中。在 SQL86规范中定义了对于 COBOL、FORTRAN、PI/L等语言的嵌入式SQL的规范。在SQL89 规范中,定义了对于C 语言的嵌入式SQL的规范。

5.4.3通用数据接口标准

开放数据库连接 (Open DataBase Connectivity,ODBC) 是为解决异构数据库间的数据共享而产生的。 ODBC为异构数据库访问提供统一接口,允许应用程序以SQL为数据存取标准,存取不同DBMS管理的数据;使应用程序直接操纵数据库中的数据,免除随数据库的改变而改变,也可以访问如 Excel表和ASCII数据文件这类非数据库对象。
ODBC的最大优点就是能以统一的方式处理所有的关系数据库。

5…4.4 ORM访问接口

对象关系映射:用于实现面向对象编程语言里不同类型系统数据之间的转换。典型的ORM框架有Hibernate、Mybatis 和 JPA 等。

5.5 NoSQL数据库

泛指非关系型的数据库,它们不保证关系数据的ACID特性。

5.5.1分类与特点

  • 列式存储数据库:通常是用来应对分布式存储的海量数据。例如:HBase
  • 键值对存储数据库:Key-value模型,例如:Redis
  • 文档型数据库:mongoDB、国产SequoiaDB
  • 图数据库:Neo4J
    NoSql特点:易扩展、大数据量,高性能、灵活的数据模型、高可用

5.5.2体系框架

  • NoSQL整体框架分为4层,由下至上分为:
    • 数据持久层 (Data Persistence)
    • 数据分布层(Data Distribution Model)
    • 数据逻辑模型层 (Data Logical Model)
    • 接口层 (Interface):接口层提供了5种选择: Rest、Thrift、Map/Reduce、Get/Put、 特定语言API, 使得应用程序和数据库的交互更加方便。
  • NoSQL 数据库适用场景:
    ● 数据模型比较简单;
    ● 需要灵活性更强的IT系统;
    ● 对数据库性能要求较高;
    ● 不需要高度的数据一致性;
    对于给定key, 比较容易映射复杂值的环境。

附加

关系表的类型

  • 基本关系表:又称基本表,即数据库中实际创建的表。
  • 查询表:查询结果表。
  • 视图表:由基本表和和其他视图表导出的表,不独立存储,数据库只存放他们定义,又称虚表。优点:可以从多个用户角度组织展示数据,用户程序可直接查询视图结果,无须关联查询多表。只读,比较安全。对重构数据库时提供一定逻辑独立性。缺点:由于动态查询展示,性能低。
    固化视图:可以将视图结果实际存储下来,适用多查询少更新场景。

分布式数据库

  • 分布式数据库特点:
    • 数据独立性:除了逻辑独立性和物理独立性外,还具有分布独立性(分布透明性)
    • 集中与自治共享结合的控制结构:集中(可以集中管理)、自治(每个区域可以有自己的规则)
    • 适当增加数据冗余度:可就近访问、多节点备份容灾、提升可靠性、可用性。
  • 分布式数据库模式
    • 外模式
      • 全局外模式
    • 概念模式
      • 全局概念模式
      • 局部概念模式:切割:分片模式:垂直分片、水平分片、混合分片
  • 分布式数据库管理系统组成
    • LDBMS局部数据库管理系统
    • GDBMS全局数据库管理系统
    • 全局数据字典
    • 通信管理CM
  • 分布式数据库管理系统结构
    • 全局控制集中的DDBMS
    • 全局控制分散的DDBMS
    • 全局控制部分分离的DDBMS
  • 分片模式:
    • 水平分片:按元组分片
    • 垂直分片:按属性列分片
    • 混合分片:
  • 透明性
    • 分片透明性:用户不用关心数据库是如何分片的。
    • 复制透明性:用户不用关心数据库在各节点的复制情况,复制由数据库系统自动完成。
    • 位置透明性:用户不必关心数据存放的具体节点。
    • 局部映射透明性(逻辑透明):最底层次的透明,不用关系全局和局部的映射。
  • 分布式数据库事务
    • 两阶段提交协议2PC:
      • 表决阶段,目的是形成一个共同的决定。
      • 执行阶段,目的是实现这个协调者的决定。
    • 两条全局提交规则:
      • 只要有一个参与者撤销事务,协调者就必须做出全局撤销决定。
      • 只有所有参与者都同意提交事务,协调者才能做出全局提交决定。

并发控制

事务执行过程:读取-》修改-》提交Commit-》(有问题)回滚Rollback-》完成。多个事务同时执行即并发。

  • 事务ACID特性
    • 原子性Atomic
    • 一致性Consistency
    • 隔离性Isolation
    • 持久性Durablity
  • 并发产生的问题
    • 丢失更新:事务T1执行读取、更新时,事务T2更新了数据,造成T1更新丢失。
    • 不可重复读:T1读取了一条数据,此时T2修改了数据,T1不可重复读。
    • 脏读:T1修改了一条数据被T2读取,此时T1出现问题回滚,造成T2脏读。
  • 并发问题的解决方案-封锁协议
    • S封锁(读锁):可共享
    • X封锁(写锁):具有独占性
    • 一级封锁协议:事务T在修改数据前必须先加X锁,直到结束才能释放。可防止丢失修改。(事务T1加X锁开始执行,此时事务T2读取,可能出现脏读)
    • 二级封锁协议:一级封锁协议加上事务T在读取数据前先加S锁,读完后即可释放。可防止丢失修改,还可防止脏读。(事务T1加X锁开始执行,此时事务T2加读锁时,由于T1还没结束释放锁,所以T2无法加锁,防止了T2脏读。但由于读取后立即释放锁,可能数据不可重复读)
    • 三级封锁协议:一级封锁协议加上事务T在读取数据前先加S锁,直到事务结束才可释放。可防止丢失修改,还可防止脏读和数据不可重复读。
    • 两段锁协议:可串行化,可能发生死锁
  • 死锁

数据库安全性

  • 安全措施
    • 用户标识和鉴定:用户账号、密码登录登录连接
    • 存取控制:用户权限控制
    • 密码存储和传输:密码加密存储和传输
    • 视图保护:使用视图,只读的虚拟表
    • 审计:记录用户所有操作
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值