数据库系统概论
数据库系统概论
数据库核心术语
数据
数据是数据库中存储的基本对象,可以对数据做如下定义:描述事物的符号称为数据。
描述事物的符号多种多样,所以数据有多种表现形式。
数据的表现形式还不能完全地表达其内容,需要经过解释,数据和关于数据的解释是密不可分的,每一个数据都有它的意义,数据的解释指的是对数据含义的说明,数据的含义称为数据的语义,数据与其语义是不可分的。
数据库
数据库就是存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定格式存放的。
严格的来讲,数据库的含义如下:
- 长期存储在计算机内,有组织的,可共享大量数据的集合
- 里面的数据按照一定的数据模型组织,描述和储存
- 具有较小的冗余度,较高的数据独立性和易扩展性,并可为各种用户共享
数据库特点:
- 永久存储
- 有组织
- 可共享
数据库管理系统
数据库管理系统(Database Management System, DBMS)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。 用户通过 DBMS 访问数据库中的数据,数据库管理员也通过 DBMS 进行数据库的维护工作。
数据库管理系统的功能主要包括以下方面:
- 数据定义功能
- 数据组织,存储和管理
- 数据操纵功能
- 数据库的事务管理和运行管理
- 数据库的建立和维护功能
- 数据库初始数据输入,转换功能
- 数据库的转储,恢复功能
- 数据库的重组织功能
- 数据库的性能监视,分析功能
- 其他功能
- 数据库管理系统与网络中其他软件系统的通信功能
- 一个数据库管理系统与另一个数据库管理系统或文件系统的数据转换功能
- 异构数据库之间的互访和互操作功能等
数据库系统
数据库系统是由数据库,数据库管理系统,应用程序和数据库管理员组成的存储,管理,处理和维护数据的系统。
OLTP 和 OLAP
OLTP 和 OLAP 的共性:
OLTP 和 OLAP 都是用于存储和处理大量数据的数据库管理系统。它们都需要高效可靠的 IT 基础设施才能平稳运行。可以同时使用它们来查询现有数据或存储新数据。两者都支持组织中数据驱动的决策。大多数公司同时使用 OLTP 和 OLAP 系统来满足其商业智能需求。
OLTP 和 OLAP 的区别:
“联机事务处理 (OLTP) ”系统的主要用途是处理数据库事务。
“联机分析处理 (OLAP) ”系统的主要用途是分析聚合数据。
数据模型
数据模型是对现实世界数据特征的抽象,也就是说数据模型是用来描述数据,组织数据和对数据进行操作的。
现有的数据库都是基于某种数据模型的,数据模型是数据库系统的核心和基础。
数据模型可以分为两类:第一类是概念模型,第二类是逻辑模型和物理模型。
概念模型
概念模型也称为信息模型,它是按照用户的观点来对数据和信息建模,主要用于数据库设计。
概念模型主要涉及以下一些概念:
- 实体 - 客观存在并可相互区别的事务称为实体。
- 属性 - 实体具有的某一特性称为属性。
- 码 - 唯一标识实体的属性集称为码。
- 实体模型 - 用实体名及其属性名集合来抽象和刻画同类实体,称为实体模型。
- 实体集 - 同一类型实体的集合就是实体集。
- 联系
- 实体之间的联系通常指的是不同实体集之间的联系。
- 实体之间的联系有一对一,一对多和多对多等多种类型。
概念模型的一种表示方法是:实体-联系方法,该方法使用 ER 图来描述现实世界的概念模型,ER 方法也成为 ER 模型。
逻辑模型
逻辑模型是计算机系统的观点对数据建模,主要用于数据库管理系统的实现。
逻辑模型通常由三部分组成:
- 数据结构 - 数据结构描述数据库的组成对象以及对象之间的联系,也就是说,数据结构描述的内容有两类,一类是对象的类型、内容、性质有关的,一类是与数据之间联系有关的对象。
- 数据操作 - 数据操作指的是对数据库中各种对象的实例允许执行的操作的集合,包括操作及有关的操作规则。主要有查询和更新两大操作。
- 数据的完整性约束 - 数据的完整性约束条件是一组完整性规则。
物理模型是对数据最底层的抽象,他描述数据在系统内部的表示和存储方式,是面向计算机系统的。
函数依赖
定义:设 R(U) 是属性集合 U={ A1, A2, ... , An } 上的一个关系模式,X, Y 是 U 上的两个子集,若对 R(U) 的任意一个可能的关系 r ,r 中不可能有两个元组满足在 X 中的属性值相等而在 Y 中的属性值不等,则称 “ X 函数决定 Y ” 或 “ Y 函数依赖于 X ” ,记作 X->Y 。
白话:在一个关系 R 中,属性(组) Y 的值是由属性(组) X 的值所决定的 。又可以说,在关系 R 中,若两个元组的 X 属性值相同,那么这两个元组的 Y 属性值也相同。
为什么叫做函数依赖? 函数的定义:对于定义域中任意 x ,有且只有一个 y 与之对应。 属性之间的依赖:对于相同的 X 属性值,有且只有一个 Y 属性值与之对应。
本质:函数依赖的本质就是反应了 一个关系中属性之间的约束关系,或者依赖关系。函数依赖是一种数据依赖。
举例:
U = { 学号,姓名,年龄,专业 }
{学号} → { 姓名,年龄,专业 }
范式
数据库规范化,又称“范式”,是数据库设计的指导理论。范式的目标是:使数据库结构更合理,消除存储异常,使数据冗余尽量小,增进数据的一致性。
根据约束程度从低到高有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)等等。现代数据库设计,一般最多满足 3NF——范式过高,虽然具有对数据关系更好的约束性,但也导致数据关系表增加而令数据库 IO 更繁忙。因此,在实际应用中,本来可以交由数据库处理的关系约束,很多都是在数据库使用程序中完成的。
第一范式 (1NF)
1NF 要求属性具有原子性,不可再分解。
第二范式 (2NF)
2NF 要求记录有唯一标识,即实体的唯一性,即不存在部分依赖。
假设有一张 student 表,结构如下:
-- 学生表
student(学号、课程号、姓名、学分、成绩)
举例来说,现有一张 student 表,具有学号、课程号、姓名、学分等字段。从中可以看出,表中包含了学生信息和课程信息。由于非主键字段必须依赖主键,这里学分依赖课程号,姓名依赖学号,所以不符合 2NF。
不符合 2NF 可能会存在的问题:
- 数据冗余 - 每条记录都含有相同信息。
- 删除异常 - 删除所有学生成绩,就把课程信息全删除了。
- 插入异常 - 学生未选课,无法记录进数据库。
- 更新异常 - 调整课程学分,所有行都调整。
根据 2NF 可以拆分如下:
-- 学生表
student(学号、姓名)
-- 课程表
course(课程号、学分)
-- 学生课程关系表
student_course(学号、课程号、成绩)
第三范式 (3NF)
如果一个关系属于第二范式,并且在两个(或多个)非主键属性之间不存在函数依赖(非主键属性之间的函数依赖也称为传递依赖),那么这个关系属于第三范式。
3NF 是对字段的冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖。
假设有一张 student 表,结构如下:
-- 学生表
student(学号、姓名、年龄、班级号、班主任)
上表属于第二范式,因为主键由单个属性组成(学号)。
因为存在依赖传递:(学号) → (学生)→(所在班级) → (班主任) 。
可能会存在问题:
- 数据冗余 - 有重复值;
- 更新异常 - 有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况 。
可以基于 3NF 拆解:
student(学号、姓名、年龄、所在班级号)
class(班级号、班主任)
反范式
前文已提及,范式的目标是:使数据库结构更合理,消除存储异常,使数据冗余尽量小,增进数据的一致性。反范式,顾名思义,与范式正好相反。
是不是范式越严格越好呢(也就是意味着极力避免冗余,甚至消除冗余)?这也不是一定的,范式越高意味着表的划分更细,一个数据库中需要的表也就越多,用户不得不将原本相关联的数据分摊到多个表中。当用户同时需要这些数据时只能通过关联表的形式将数据重新合并在一起。同时把多个表联接在一起的花费是巨大的,尤其是当需要连接的两张或者多张表数据非常庞大的时候,表连接操作几乎是一个噩梦,这严重地降低了系统运行性能。因此,有时为了提高查询效率,有必要适当的冗余数据,以达到空间换时间的目的——这就是“反范式”。
ER 图
E-R 图又称实体关系图,是一种提供了实体,属性和联系的方法,用来描述现实世界的概念模型。通俗点讲就是,当我们理解了实际问题的需求之后,需要用一种方法来表示这种需求,概念模型就是用来描述这种需求。
ER 图中的要素:
- 实体 - 用矩形表示。实际问题中客观存在的并且可以相互区别的事物称为实体。实体是现实世界中的对象,可以具体到人,事,物。可以是学生,教师,图书馆的书籍。
- 属性 - 用椭圆形表示。实体所具有的某一个特性称为属性,在 E-R 图中属性用来描述实体。比如:可以用“姓名”“姓名”“出生日期”来描述人。
- 主键 - 在属性下方标记下划线。在描述实体集的所有属性中,可以唯一标识每个实体的属性称为键。键也是属于实体的属性,作为键的属性取值必须唯一且不能“空置”。
- 联系 - 用菱形表示。世界上任何事物都不是孤立存在的,事物内部和事物之间都有联系的,实体之间的联系通常有 3 种类型:一对一联系,一对多联系,多对多联系。
绘制 ER 图常用软件:
- drawio 官网 - 开源的绘图工具,特点是简洁、清晰,并且同时支持线上线下绘图。
- Visio - Office 的绘图工具,特点是简单、清晰。
- 亿图 - 国内开发的、收费的绘图工具。图形模板、素材非常全面,样式也很精美,可以导出为 word、pdf、图片。
- StarUML - 样式精美,功能全面的 UML 工具。
- Astah 官网 - 样式不错,功能全面的绘图工具。
- ArgoUML 官网
- ProcessOn 官网 - 在线绘图工具,特点是简洁、清晰。
扩展阅读: