软考中级(软件设计师)必备知识解读——第十章:数据库
第十章 数据库
概念数据模型(E-R图)
-
实体:客观存在并且可以相互区别的事物称为实体。如一个单位,一个职工
-
属性:描述实体的特征称为属性。如学生实体用若干属性(学号、姓名、性别、出生日期、班级号)来描述。
-
码:唯一标识实体的属性称为码。如学号是学生实体的码。
-
域:属性的取值范围称为该属性的域。如性别域为(男、女)
-
联系:实体之间的对应的关系称为联系。
-
实体内部个属性之间的联系
-
实体之间的联系
-
一对一联系(1:1)。如班和班长之间是一对一联系。
-
一对多联系(1:n)。班和学生之间是一对多联系。
-
多对多联系(m:n)。课程和学生之间是多对多联系。
-
-
三级模式结构
- 外模式 ——> 视图
- 概念模式(模式) ——> 基本表
- 内模式 ——> 存储文件
两级映像
数据库系统在三级模式之间提供了两级映像:模式/内模式映像、外模式/模式映像。
保证了数据库中的数据具有较高的逻辑独立性和物理独立性。
- 模式/内模式映像:实现了概念模式和内模式之间的相互转换。
- 外模式/模式映像:实现了外模式和概念模式之间的相互转换。
- 数据的物理独立性:需要修改概念模式和内模式之间的映像。
- 数据的逻辑独立性:需要修改外模式和概念模式之间的映像。
关系型模式的基本术语
- 关系:一个关系就是一张二维表,每个关系有一个关系名
- 元组:表中的一行即为一个元组,对应存储文件中的一个记录值。
- 属性:表中的列称为属性,每一列有一个属性名。属性值相当于记录中的数据项或者字段值。
- 域:属性的取值范围。
- 关系模式:对关系的描述称为关系模式,由关系名和其属性集合构成,关系模式的格式为:关系名(属性名1,属性名2,…,属性名n)
- 候选码(候选健):属性或属性组合其值能够唯一地标识一个元组。
- 主码(主键):在一个关系中可能有多个候选码,从中选择一个作为主码。
- 主属性:所有候选键都称为主属性,其他的属性都称为非主属性。
- 外码(或外键):如果一个关系中的属性或属性组并非该关系(二维表)的码,但它们是另外一个关系(二维表)的码,则称其为该关系的外码。
- 全码:关系模式的所有属性组是这个关系模式的候选码,称为全码。
- 超码(超键):一个包含码的属性集称为超码。例如学号是码,则(学号,姓名)就是一个超码。
完整性约束
完整性规则保证用户对数据库做修改时不会破坏数据的一致性。
- 实体完整性:关系中主码的值不能为空或部分为空。即主属性不能为空。
- 参照完整性:如果关系R2的外码X与关系R1的主码相对应,则外码X的每个值必须在关系R1中的主码中找到,或者为空值。
- 用户定义完整性:指用户对某一具体数据指定的约束条件进行检验。(如手机号码为11位)
关系代数运算符

-
投影:投影运算是从关系的垂直方向进行运算,在关系R中选出若干属性列A组成新的关系,记作πA®
-
选择:选择运算是从关系的水平方向进行运算,是从关系R中选择满足给定条件的的元组,记作σF®
-
连接:连接运算是从两个关系R和S的笛卡儿积中选取满足条件的元组。
- θ连接:从R与S的笛卡儿积中选取属性间满足一定条件的元组。
- 等值连接:当 θ 为 “=” 时,称之为等值连接。
- 自然连接:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉。
可以认为笛卡儿积是无条件连接,其他的连接操作认为是有条件连接。
-
外连接:外连接运算是连接运算的扩展,可以处理由于连接运算而缺失的信息。(p27集)
- 左外连接(⟕):取出左侧关系中所有与右侧关系中任一元组都不匹配的元组,用空值null充填所有来自右侧关系的属性,构成新的元组,将其加入自然连接的结果中。
- 右外连接(⟖):取出右侧关系中所有与左侧关系中任一元组都不匹配的元组,用空值null填充所有来自左侧关系的属性,构成新的元组,将其加入自然连接的结果中。
- 全外连接(⟗)。完成左外连接和右外连接的操作。即填充左侧关系中所有与右侧关系中任一元组都不匹配的元组,并填充右侧关系中所有与左侧关系中任一元组都不匹配的元组,将产生的新元组加入自然连接的结果中。
SQL语言
- SQL不支持列的序号
- 投影、选择转SQL语言
- 笛卡尔积转SQL语言
- 自然连接转SQL语言
SQL语言的分类
-
DDL(Data Definition Language,数据定义语言):用来定义数据库对象:数据库,表,列等。
关键字:
CREATE、DROP、ALTER等。 -
DML(Data Manipulation Language,数据操作语言):用来对数据库中表的数据进行增删改。
关键字:
INSERT、DELETE、UPDATE等。 -
DQL(Data Query Language,数据查询语言):用来查询数据库中表的记录。
关键字:
SELECT等。 -
DCL(Data Control Language,数据控制语言):用来定义数据库的访问权限和安全级别,及创建用户。
SQL控制语句
- 插入权限:insert on
- 允许将该权限授予他人:WITH GRANT OPTION
- 视图:WITH CHECK IPTION
关系模式的范式
候选码中包含的属性称为主属性、不包含在候选码中的属性称为非主属性。若候选码多于一个,可以选定其中的一个为主码。
范式之间的关系

1NF(第一范式)
定义:若关系模式 R 每一个分量是不可再分的数据项,则关系模式 R 属于第一范式。
1NF可能存在的问题:
- 数据冗余:数据的冗余度大,R中可能出现多个元组在多个属性集中值相同
- 修改异常:引起修改操作的不一致性,修改一条记录可能需要修改其他多条记录才能保持数据一致性(由数据冗余引起)
- 插入异常:主码不能取空值或部分空值,会出现插入异常
- 删除异常:本该删除但又客观存在的元组,会出现删除异常。即,删除掉的数据可能包含着其他本不该被删除的属性
问题的原因是1NF中可能存在部分函数依赖。
2NF(第二范式)
定义:若关系模式 R∈1NF,且每一个非主属性完全依赖于码,则关系模式 R∈2NF。
当 1NF 消除了非主属性对码的部分函数依赖,则称为 2NF。
可能存在数据冗余和更新异常等问题。
3NF(第三范式)
2NF 消除了非主属性对码的传递函数依赖,则称为 3NF。
属于 3NF 的关系模式 R 可能存在主属性对候选码的部分依赖和传递依赖。
BC范式(BCNF)
定义:R是一个关系模式,F是它的依赖集,R属于BCNF,当且仅当其F中的每个依赖的决定因素必定包含R的某个候选码。
BC范式已经消除了插入和删除异常
规范化步骤
NF到4NF之间的转换关系:
| 范式 | 转换关系 |
|---|---|
| 1NF | 每一个分量是不可再分的数据项 |
| 2NF | 1NF消除了部分函数依赖后满足2NF |
| 3NF | 2NF消除了非主属性对候选码的传递函数依赖后满足3NF |
| BCNF | 3NF消除了主属性对候选码的部分和传递函数依赖后满足BCNF |
| 4NF | BCNF消除非平凡且非函数依赖的多值依赖后满足4NF |

数据库设计
新奥尔良法是目前公认的数据库设计方法,它将数据库设计分为以下几个阶段:
- 用户需求分析:收集用户需求,确定系统边界
- 概念结构设计:E—R图
- 逻辑结构设计:E—R图转换成关系模式、规范化
- 物理结构设计
需求分析
-
需求分析是后面几个阶段,逻辑结构设计、物理结构设计以及应用程序设计的依据。
-
需求分析将收集到的零碎的、局部的数据分析整理后,建立需求说明文档、数据字典和数据流程图。
-
需求分析阶段的成果:系统需求说明书、数据流图、数据字典、需求说明文档、各种说明性白表格
概念结构设计
对需求分析阶段所得到的数据进行分类、聚集和概括,确定实体、属性和联系。
- 选择局部应用
- 逐一设计分 E-R 图
- E-R 图合并
E-R 图之间的冲突
- 属性冲突。同一属性可能会存在于不同的分 E-R 图。
- 命名冲突。异名同义、同名异议
- 结构冲突。同一实体在不同的分E—R图中有不同的属性,同一对象在某一个E—R图中被抽象为实体,而在另一个E—R图中被抽象为属性,需要统一。
逻辑结构设计
逻辑结构设计阶段的主要工作步骤包括:
- 确定数据模型
- 将 E-R 图转换成为指定的数据模型
- 确定完整性约束和确定用户视图
- 关系规范化
事物管理
事务是一个操作序列,这些操作“要么都做,要么都不做”。
事务和程序是两个不同的概念,一般一个程序可包含多个事务。
事务的ACID性质:
- 原子性:事务是原子的,要么都做,要么都不做。
- 一致性:事务执行的结果必须保证数据库从一个一致性状态变到另一个一致性状态。
- 隔离性:事务相互隔离。当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的。
- 持久性:一旦事务成功提交,即使数据库崩溃,其对数据库的更新操作也将永久有效。
分布式数据库
- 分片透明:指用户或应用程序不需要知道逻辑上访问的表具体是怎么分块存储的
- 复制透明:指采用复制技术的分布方法,用户不需要知道数据是复制到哪些节点,如何复制的。
- 位置透明:指用户无须知道数据存放的物理位置
- 逻辑透明:指用户或应用程序无需知道局部场地使用的是哪种数据模型
- 共享性:指数据存储在不同的结点数据共享
- 自治性:指每结点对本地数据都能独立管理
- 可用性:指当某一场地故障时,系统可以使用其他场地上的副本而不至于使整个系统瘫痪
- 分布性:指数据在不同场地上的存储
软考资料,笔记获取,更多粉丝福利,关注下方公众号获取

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐






所有评论(0)