软考(中级)软件设计师核心笔记(3)数据库系统——概念、数据库设计

一、数据库基本概念

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,对两个结果都不满足,所以这个分解不具有无损连接性(有损分解)

相关推荐
奈斯先生Vector2 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
漏刻有时2 小时前
PHP GeoJSON转PNG地图渲染程序开发笔记、源码解读、问题复盘与整改方案
android·笔记·php
暗影凋落3 小时前
CMake构建学习笔记-SQLite库的构建
笔记·学习·sqlite
建筑工程企业管理系统4 小时前
erp工程项目管理系统落地价值:实现工程多项目成本精细化核算与管控
大数据·数据库·人工智能
AI大模型-小华4 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
zzm6284 小时前
精读KDD 2017最佳论文:通过类比挖掘加速创新 | 阅读笔记
笔记
你有哈莫吗5 小时前
CMake构建学习笔记-iconv库的构建
笔记·学习
foolishlee5 小时前
Neon wal日志处理流程2
数据库
2601_965798475 小时前
Is Hygia Good for Maid & Janitorial Sites? Technical Audit
服务器·网络·数据库