一、数据库基本概念
1、体系结构
:集中式数据库系统
数据及数据管理都是集中的
:C/S结构
服务器与应用程序分开,ODBC,JDBC
:分布式数据库
物理上分布、逻辑上集中
物理上分布、逻辑上分布
)1:特点
1.数据独立性:除了数据的逻辑独立性与物理独立性外,还有数据分布独立性(分布透明性)
2.集中与自治共享结合的控制结构:各局部的DBMS可以独立地管理局部数据库,具有自治功能。同时系统又设有集中控制机制,协调各个局部DBMS的工作,执行全局应用
3.适当增加数据冗余度(备份):在不同的场地存储同一数据的多个副本,可以提高系统的可靠新与可用性,同时也提高系统性能
4.全局数据的一致性、可串行性和可恢复性
)2:透明性
分片透明:是指用户不必关心数据是如何分片的,他们对数据的操作在全局关系上进行,即如何分片对用户是透明的
复制透明:用户不用关心数据库在网络中各个节点的复制情况,被复制的数据的更新都由系统自动完成
位置透明:用户不必关心所操作的数据放在何处(物理地址),即数据分配到哪个或哪些站点存储对用户是透明的
局部映像透明(逻辑透明):用户不需要了解局部逻辑结构及数据模型
:并行数据库
共享内存式,无共享式
2、三级模式结构
三级模式与两级映射
外模式(视图) =》外模式-概念模式映射 =》概念模式(基本表) =》概念模式-内模式映射 =》内模式(文件)
外模式-概念模式映射:逻辑独立性,数据的逻辑结构发生变化后,应用程序不用改变。但是为了应用程序能够正确执行,需要修改外模式和概念模式之间的映像(即视图)
概念模式-内模式映射:物理独立性,数据的物理结构发生变化时,应用程序不用改变。但是为了应用程序能够正确执行,需要修改概念模式和内模式之间的映像(即表)

3、数据仓库
优势:
1.面向主题:数据按主题组织
2.集成:消除了源数据中的不一致性,提供整个企业的一致性全局信息
3.相对稳定(非易失):主要进行查询操作,只有少量的修改或删除操作(或者不删除)
4.反映历史变化(随着时间变化):记录了企业从过去某一时刻到当前各个阶段的信息,可对发展历程和未来趋势做定量分析和预测
阶段1:数据预处理(ETL)=》阶段2:数据仓库存储 =》阶段3:数据分析 =》阶段4:数据展现

二、数据库设计
1、数据库设计过程
需求分析 》概念结构设计 =》逻辑结构设计 =》物理设计
|--------|------------------------|------------|
| 过程 | 依据 | 产物 |
| 需求分析 | 当前和未来应用的数据要求、数据处理要求 | 数据流图DFD |
| 需求分析 | 当前和未来应用的数据要求、数据处理要求 | 数据字典DD |
| 需求分析 | 当前和未来应用的数据要求、数据处理要求 | 需求说明书 |
| 概念结构设计 | 用户的数据模型(即与DBMS无关的概念模型) | ER模型 |
| 逻辑结构设计 | 转换规则、规范化理论 | 关系模式(数据模型) |
| 物理设计 | DBMS特性、硬件、OS特性··· | 聚簇索引 |
2、概念设计阶段
:过程
需求 =》抽象数据 =》设计局部ER模型 =》集成(合并局部模型,消除冲突) =》重构优化,消除冗余
)1:集成:合并局部模型,消除冲突
1.多个ER图一次集成
2.逐步集成,用累加的方式一次集成两个局部E-R
)2:集成产生的冲突及解决办法
1.属性冲突:包括属性域冲突和属性取值冲突
2.命名冲突:包括同名异义和异名同义
3.结构冲突:包括同一对象在不同的应用中具有不同的抽象,以及同一实体在不同的局部ER图中所包含的属性个数和属性排列次序不完全相同
:ER图(实体联系图)

)1:实体、特殊化实体
是现实世界中,可以区别于其他对象的事件或事物(矩形、矩形带线)
)2:属性,是实体某方面的特性(椭圆)
1.简单与复合属性
简单属性:是原子的,不可以再分的
复合属性:可以细分为更小的部分(如地址,可拆分成省市区)
2.单值与多值属性
单值属性:定义的属性对于一个特定的实体都有一个单独的值
多值属性:在某些特定情况下,一个属性可能对应一组值
3.NULL属性:表示无意义或不知道
4.派生属性:可以从其他属性得来
)3:联系,分为实体内部间的联系、实体与实体间的联系(菱形)
>两个不同实体集之间的联系
1.一对一(1:1)
2.一对多(1:*)
3.多对多(*:*)
>三元联系:两个以上不同实体集之间的联系
>弱实体:在现实世界中有一种特殊的依赖关系,该联系是指某实体是否存在对于另一些实体具有很强的依赖关系。即一个实体的存在必须以另一个实体存在为前提,而将这些实体称为弱实体。例:邮件与附件,附件就是弱实体,两个嵌套菱形表示

>特殊化:在现实世界中,某些实体一方面具有一些共性,另一方面还具有各自的特性。例:员工、经理(员工的一种)
>聚集:一个联系作为另一个联系(实体)的一端
3.逻辑设计阶段
:关系模式概念
)1:数据模型
三要素:数据结构,数据操作,数据约束条件
1.层次模型:树形结构
2.网状模型:数据相互联系
3.关系模型:关系模式,关系模式名称(属性1,属性2)
4.面向对象模型:一对象为单位组织的数据模型
)2:相关概念
1.候选键
唯一标识元组,且无冗余
选择主键考虑的属性或多个属性
2.主属性:组成候选键的属性,都是主属性
3.外键:其他关系的主键
)3:关系类型
1.基本关系表(全表-实表)
2.查询表(查询结果集-虚表)
3.视图表(视图-虚表)
)4:完整性约束
1.实体完整性约束:主键(唯一)
2.参照完整性约束:外键(参照其他表主键)
3.用户自定义约束(业务逻辑)
4.触发器:完成复杂的完整性约束
:ER图转关系模型
)1:转换原则
(1)、一对一(可独立、可合并):
例:校长:姓名、性别、职称、年龄,学校:校名、地址、电话,任职:任职时间

1.独立关系:并入两端主键及自身属性(主键任意一端)
生成两张实体表及一张独立关系表:校长表、学校表、任职表(关系表)
其中任职表并入两端主键及自身属性,结果生成为:任职时间、校长姓名、学校名(主键:校长名、学校名均可)
2.合并关系:并入另一端主键及联系自身属性(主键保持不变)
生成两张实体表:校长表、学校表
将关系表(任职表)可以并入到任意一端(校长表或学校表,并将自身属性:任职时间加入到表中),另一端主键并入到表中作为外键(校长名/学校名)
(2)、一对多(可独立、可合并):
例:

1.独立关系:并入两端主键及自身属性(主键:多端主键)
关系表(存款者)独立成 存款表,包含:开户时间、账户号(主键:多端作为主键)、客户名
2.合并关系:并入另一端主键及联系自身属性(只能合并到多端)
关系表(存款者)合并到 账户表:账户号、余额、开户时间、客户名
(3)、多对多(只能独立):
例:

独立关系:并入两端主键及自身属性。(主键:两端主键组合键)
关系表(考试)独立成 考试表:考试成绩、学生学号、课程号
:关系代数(重要)
垂直:属性列
水平:元组行

设:表1:关系S1、表2:关系S2、表3:关系S3
|------|-------|-------|---|------|--------|-------|---|------|-----|
| 关系S1 ||| | 关系S2 ||| | 关系S3 ||
| SNO | Sname | Sdept | | SNO | Sname | Sdept | | SNO | age |
| No01 | mary | 1S | | No01 | mary | 1S | | No01 | 15 |
| No03 | candy | 1S | | No05 | katter | 1S | | No05 | 13 |
| No06 | jam | 1S | | No08 | tom | 1S | | No09 | 18 |
)1:并集、交集、差集
|------|--------|-------|---|------|-------|-------|---|------|--------|-------|
| S1 U S2 (并) ||| | 交集 ||| | 差集 |||
| SNO | Sname | Sdept | | SNO | Sname | Sdept | | SNO | Sname | Sdept |
| No01 | mary | 1S | | No01 | mary | 1S | | No03 | candy | 1S |
| No03 | candy | 1S | | | | | | No06 | jam | 1S |
| No06 | jam | 1S | | | | | | No05 | katter | 1S |
| No05 | katter | 1S | | | | | | No08 | tom | 1S |
| No08 | tom | 1S | | | | | | | | |
)2:笛卡尔积
属性列:二者之和
元组行:二者乘积
|--------|----------|----------|--------|----------|----------|
| 笛卡尔积 ||||||
| S1.SNO | S1.Sname | S1.Sdept | S2.SNO | S2.Sname | S2.Sdept |
| No01 | mary | 1S | No01 | mary | 1S |
| No01 | mary | 1S | No05 | katter | 1S |
| No01 | mary | 1S | No08 | tom | 1S |
| No03 | candy | 1S | No01 | mary | 1S |
| No03 | candy | 1S | No05 | katter | 1S |
| No03 | candy | 1S | No08 | tom | 1S |
| No06 | jam | 1S | No01 | mary | 1S |
| No06 | jam | 1S | No05 | katter | 1S |
| No06 | jam | 1S | No08 | tom | 1S |
)3:投影(π选择展示列展示)
|------|-------|
| π SNO,Sname 投影(select) ||
| SNO | Sname |
| No01 | mary |
| No03 | candy |
| No06 | jam |
)4:选择(θ条件筛选数据展示)(表达式中^符表示and)
|------|-------|-------|
| θ Sname mary 选择(where) |||
| SNO | Sname | Sdept |
| No01 | mary | 1S |
)5:自然连接(性能更优,先条件筛选,再笛卡尔积,再投影)
去除重复列,取重复数据行(运算表格尽可能小)
相当于:投影1列,2列,3列,5列(选择1列=4列(S2表*S3表)) = π1,2,3,5(θ1=4(S2*S3)) = 自然连接S2与S3
|------|--------|-------|-----|
| 自然连接S2、S3 ||||
| SNO | Sname | Sdept | age |
| No01 | mary | 1S | 15 |
| No05 | katter | 1S | 13 |
:规范化理论(重要)
)1:基本概念
1.函数依赖
设:R(U)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元祖u,v,只要有u(X) = v(X),就有u(Y) = v(Y),则称X函数决定Y,或称函数Y依赖X,记为X=>Y。X为决定因素,Y为被决定因素
包含二元组:属性U,函数依赖集F{,}
设:关系模式R(A,B,C)
依赖集1:{AB => C, A=>C} 部分函数依赖A+B=>C, A=>C
依赖集2:{A=>B, B=>C} 传递(冗余)函数依赖 A=>B=>C A=>C
*2.Amstrong公理体系
设:关系模式R推理规则:
A1.自反律,若Y属于X的子集,X属于U的子集,则X=>Y成立(子集:一部分属性,例:若U=ABC,X属于U的子集,则X=BC)
A2.增广律,若Z属于U的子集,增加属性Z且X=>Y,则XZ=>YZ成立
A3.传递律,若X=>Y且Y=>Z,则X=>Z成立
根据A1,A2,A3推理规则,可以得出以下三条推理规则:
合并规则(A2传递律+A3增广律):X=>Y,X=>Z,则X=>YZ
伪传递规则(A2传递律+A3增广律):X=>Y,XW=>YW,WY=>Z,则XW=>Z
分解规则(A1自反律+A3增广律):X=>Y,Z属于Y的子集,则X=>Z
3.候选键
候选键:唯一标识元组,且无冗余
主键:候选键的任意一个
外键:其他关系的主键
求候选键的图示:
条件1:用有向图方式表示出来
条件2:找出入度为0的属性
条件3:若入度为0的属性不能遍历所有节点,将一些既有入度也有出度的中间节点并入

例1:给定关系R(A1, A2, A3, A4),依赖关系集为:F={A1=>A2, A3=>A2, A2=>A3, A2=>A4},则R的候选键为(A1)
画出有向图:得出入度为0的属性为A1,通过A1可以遍历全图

例2:关系模式P(A, B, C, D, E, F, G, H, I, J),满足函数依赖:FD={ABD=>E,AB=>G,B=>F,C=>J,CJ=>I,G=>H},候选码为(A,B,C,D)

例3:关系R(A, B, C),函数依赖关系F{B=>C,B=>A,A=>BC},候选码为(A和B)
无入度0的属性,就找可以遍历所有属性的节点:即A可以找到B,C,B可以找到A,C,所以A和B都可以作为候选键

4.主属性与非主属性
组成候选码的属性是主属性,其他的为非主属性
例:关系模式R(A, B, C),其中依赖F={(A, B) => C, C=>A},求主属性与非主属性
解:已知入度为0的属性目前只有B,但是依靠B又无法遍历全部属性,所以需要组合A或C
得出候选键(A和B)或(B和C),主属性为候选键,则A、B、C均为主属性,无非主属性

例题:给定关系模式R(U, F),U={A1,A2,A3,A4},F={A1=>A2,A1A2=>A3,A1=>A4,A2=>A4},求得主键(A1),函数依赖集中冗余的是(A1=>A4)
解:已知A1=>A2,A1A2=>A3,A1=>A4,A2=>A4,得出A1入度为0,且可以遍历全部属性(A1可以找到,A2及A4,找到A2后可以找到A3)
问题1:所以主键为A1
问题2:已知A1=>A2,A2=>A4,得出A1=>A2=>A4,所以A1=>A4为必然,可以去掉。反之A1=>A2,A1=>A4,若去掉A2=>A4的话,A2=>A4的关系则不一定成立,所以A2=>A4是必不可少的
)2:范式判断
1.规范化问题:数据冗余,修改异常(数据不一致),插入异常(维度不一样会存在主键为空),删除异常(维度不一样会误删)
|------|-------|-------|---------|
| 学生姓名 | 选修课程名 | 任课教师名 | 任课教师地址 |
| 张三 | 数学 | 王一新 | 五一路107号 |
| 李四 | 数学 | 王一新 | 五一路107号 |
| 王五 | 数学 | 王一新 | 五一路107号 |
| 赵六 | 数学 | 王一新 | 五一路107号 |
2.规范化程度判断:
|------------|-------------------|
| 第一范式(1NF) | 属性值都是不可分的原子值 |
| 第二范式(2NF) | 消除非主属性对候选键的部分依赖 |
| 第三范式(3NF) | 消除非主属性对候选键的传递依赖 |
| 第四范式(4NF) | 暂不需要了解 |
| BC范式(BCNF) | 消除主属性对候选键的部分和传递依赖 |
》第一范式(1NF):在关系模式R中,所有域只包含原子值,即每个属性都是不可再分的数据项,则称关系模式R为第一范式,不满足1NF则无法建表
》第二范式(2NF):满足第一范式,且每一个非主属性完全依赖所有候选键时(仅针对多属性候选键,每一个非主属性完全依赖所有候选键,单属性必然满足第二范式),则称关系模式R为第二范式
如:学生课程关系{学号,课程号,成绩,学分}
|-----|-----|-----|----|
| 学号 | 课程号 | 成绩 | 学分 |
| S01 | C01 | 75 | 4 |
| S02 | C01 | 78 | 4 |
| S03 | C01 | 52 | 4 |
| S04 | C01 | 21 | 4 |
| S01 | C02 | 36 | 2 |
| S02 | C02 | 99 | 2 |
| S03 | C02 | 100 | 2 |
| S04 | C02 | 25 | 2 |
已知:候选键【学号+课程号】为多属性候选键,而非主属性【学分】仅依赖候选键【课程号】,属于非主属性部分函数依赖候选键,不满足第二范式
》第三范式(3NF):满足第二范式,且R中没有非主属性传递依赖于候选键时(每一个非主属性须由主属性直接传递),则称关系模式R为第三范式
如:学生关系{学号,姓名,系号,系名称,系位置}
|-----|----|-----|------|-----|
| 学号 | 姓名 | 系号 | 系名称 | 系位置 |
| S01 | 张三 | D01 | 计算机系 | 1号楼 |
| S02 | 李四 | D01 | 计算机系 | 1号楼 |
| S03 | 王五 | D01 | 计算机系 | 1号楼 |
| S04 | 赵六 | D02 | 信息系 | 2号楼 |
| S05 | 钱七 | D02 | 信息系 | 2号楼 |
已知:候选键学号为单属性,单属性不存在非主属性部分函数依赖,所以满足第二范式。但是系名称、系位置由系号传递,而非主属性学号传递,所以不满足第三范式
》第四范式(4NF):暂不需要了解
》BC范式(BCNF):设R是一个关系模式,F是依赖集,R属于F中,每个依赖的决定因素必定包含R的某个候选码
例:关系模式STJ(S,T,J),其中S表示学生,T表示老师,J表示课程,每一老师只教一门课程,每门课程有若干老师,某一学生选定某门课程就对应一个老师
得出结论:关系函数集F={T=>J, SJ=>T},求出候选键为ST或SJ,均为主属性,没有非主属性,则满足1NF,2NF,3NF
BC范式条件为:每个依赖的决定因素必定包含R的某个候选码。
已知两个依赖均包含候选键,即:关系函数1 T=>J包含候选键T/J,但是不包含S,关系函数2 SJ=>T包含候选键SJ,所以不符合BC范式
)3:模式分解
1.保持函数依赖分解
函数依赖:F={X=>Y}
数据库模式p={R1, R2, ······, Rk}是关系模式R的分解,F是R上的函数依赖集,p中每个模式Ri上的FD集是Fi。如果{F1, F2, ······, Fk}与F是等价的(即相互逻辑蕴含),那么称分解p保持FD(冗余函数依赖不需要保留)
设:关系模式R(U, F),其中U={A, B, C, D, E},F={A=>BC, C=>D, BC=>E, E=>A}
保持函数依赖:R1(A, B, C, E),R2(C, D),其中R1保持关系A=>BC, BC=>E, E=>A,R2保持C=>D,所以是等价
不保持函数依赖:R1(A, B, E),R2(C, D),其中R1未保持A=>BC, BC=>E,所以不是等价
》冗余函数不保留
设:关系模式R(U, F),其中U={A, B, C},F={A=>B, B=>C, A=>C},则分解p={R1(AB), R2(BC)},保持函数依赖
已知R1(AB)保持A=>B,R2(BC)保持B=>C,因此反向推断A=>B=>C,所以函数依赖中A=>C属于冗余函数,则不需要保留
2.无损分解(有损:无法还原,无损:可以还原)
》无损连接分解:将一个关系模式分解成若干个关系模式后,通过自然连接等运算,仍能还原到原来的关系模式
设:关系模式 成绩(学号,姓名,课程号,课程名,分数),函数依赖:学号=>姓名,课程号=>课程名,(学号,课程号)=>分数
候选键:学号,课程号。
不符合第二范式,将其分解后得出:成绩(学号,课程号,分数)、学生(学号,姓名)、课程(课程号,课程名)
还原过程(条件):
-存在同名属性列:成绩(学号,课程号,分数)、学生(学号,姓名)
-该属性列为左侧决定因素((学号,课程号)=>分数 和 学号=>姓名)
-函数依赖有保留:学生(学号,姓名)= 学号=>姓名
-求出 = 成绩(学号,课程号,分数,姓名)
-存在同名属性列:成绩(学号,课程号,分数,姓名)、课程(课程号,课程名)
-该属性列为左侧决定因素((学号,课程号)=>分数 和 课程号=>课程名)
-函数依赖有保留:课程(课程号,课程名)= 课程号=>课程名
-最后求出还原 = 成绩(学号,课程号,分数,姓名,课程名)
》表格还原法:
已知:
关系模式 成绩(学号,姓名,课程号,课程名,分数)
函数依赖:学号=>姓名,课程号=>课程名,(学号,课程号)=>分数
将其分解后得出:成绩(学号,课程号,分数)、学生(学号,姓名)、课程(课程号,课程名)
|----|----|----|-----|-----|----|
| 初始表 ||||||
| | 学号 | 姓名 | 课程号 | 课程名 | 分数 |
| 成绩 | √ | | √ | | √ |
| 学生 | √ | √ | | | |
| 课程 | | | √ | √ | |
|----|----|----|-----|-----|----|
| 查看同名属性列 ||||||
| | 学号 | 姓名 | 课程号 | 课程名 | 分数 |
| 成绩 | √ | | √ | | √ |
| 学生 | √ | √ | | | |
| 课程 | | | √ | √ | |
|----|----|----|-----|-----|----|
| 以左侧决定因素,是否保留 ||||||
| | 学号 | 姓名 | 课程号 | 课程名 | 分数 |
| 成绩 | √ | | √ | | √ |
| 学生 | √ | √ | | | |
| 课程 | | | √ | √ | |
|----|----|----|-----|-----|----|
| 还原右侧被决定因素 ||||||
| | 学号 | 姓名 | 课程号 | 课程名 | 分数 |
| 成绩 | √ | √ | √ | √ | √ |
| 学生 | √ | √ | | | |
| 课程 | | | √ | √ | |
|----|----|----|-----|-----|----|
| 直到最后有一排√被还原,就表示是无损分解 ||||||
| | 学号 | 姓名 | 课程号 | 课程名 | 分数 |
| 成绩 | √ | √ | √ | √ | √ |
| 学生 | √ | √ | | | |
| 课程 | | | √ | √ | |
》公式还原法(仅针对还原两个有效)
定理:如果R的分解p={R1,R2},F为R所满足的函数依赖集合,分解p具有无损连接性的充分必要条件是:
交集=》差集 即 R1,R2的交集=>(R1-R2的差集) 或 R1,R2的交集=>(R2-R1的差集)
其中交集为R1与R2的公共属性组成,R1-R2差集为R1中去除R2公共属性组成,R2-R1差集为R2中去除R1公共属性组成。当模式R分解成两个关系模式R1和R2时,如果R1与R2的公共属性能决定R1中或R2中的其他属性,这样的分解就具有无损连接性
设:R={A,B,C},F={A=>B}
分解p1={R1{A,B},R2{A,C}}:R1与R2的交集为A,R1-R2的差集(R1中去除R1与R2的交集)=B,R2-R1的差集(R2中去除R2与R1的交集)=C,套入公式(交集=>差集)A=>B 或 A=>C,有一个成立则为无损分。已知函数依赖A=>B,满足R1与R2的交集(A)可以决定R1-R2的差集(B),所以这个分解具有无损连接性
分解p2={R1{A,B},R2{B,C}}:R1与R2的交集为B,R1-R2的差集(R1中去除R1与R2的交集)=A,R2-R1的差集(R2中去除R2与R1的交集)=C,套入公式(交集=>差集)B=>A 或 B=>C,有一个成立则为无损分。已知函数依赖A=>B,对两个结果都不满足,所以这个分解不具有无损连接性(有损分解)