1.数据库介绍
内容大纲
- E-R模型,对数据进行建模
- 关系数据模型
- SQL:数据库查询语言
- 函数依赖
- 文件存储
- 索引
- 查询处理
- 查询优化
- 事务处理
- 并发协议
- 数据恢复
前言
什么是数据库
-
一个数据集合,通常描述了一个或多个相关组织信息
-
数据库应用广泛
- 银行交易记录
- 机票预订,航班信息
- 学生成绩
- 产品信息
- 生产、库存、订单、供应链等
- 人力资源管理等
-
数据库可以有任意的大小与复杂度,例如
- 简单的通讯录可以视作一个数据库
- 图书馆的藏书表
-
A schema,模式:定义了数据库中数据表的结构、关系和约束,以及它们之间的连接方式。
-
An instance,实例:指某一个特定的数据库实例
-
例如,在上表中,表头是该数据库的schema,剩余的行构成一个instance
什么是DBMS
- DBMS-Database Management System 数据库管理系统
- DBMS是一个计算机程序,用以创建、维护、使用一个数据库
- DBMS
- Insert records 插入记录(指一行数据)
- Delete records 删除
- Update records 更新
- Query records 检索
- 国外数据库产品
- 国产数据库
- tpmC指在国内外被广泛用于衡量计算机系统的事务处理能力,为“每分钟内系统处理的新订单个数”的英文缩写
为什么我们需要DBMS
- 目的:减少应用开发以及维护时间
- 否则:假设我们有一个占用500GB的源文件集合,没有DBMS的帮助,我们只能与这些原始数据交互
- 使用文件系统开发维护的成本巨大
- 文件系统的缺点
- 冗余和不一致性
- 比如在银行系统中“储蓄账户”和“支票账户”都存储了用户地址信息,而且你还要时刻保证这两个文件里的地址是一致的,而良好的DBMS设计可以避免这种情况
- 访问数据困难
- 提取不同的目标数据需要不同的程序
- 例如,寻找学生地址需要一个程序,寻找教师联系方式需要一个程序
- 而使用DBMS产品可以使得访问数据变得容易
- 数据库完整性
- 例如,对于一次银行请求
- 账户余额不能低于1000美元(该银行的特殊要求)
- 涉及日期中月的天数不能超过31(客观事实)
- 例如,对于一次银行请求
- 原子性
- 例如,考虑一次银行请求:从账户A转100美金到账户B
- 第一步:从账户A中扣除100美金
- 第二步:在账户B中增加100美金
- 若系统在执行完第一步后崩溃,重启后A+B原地少了100美金
- 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚(恢复执行前的状态)
- 例如,考虑一次银行请求:从账户A转100美金到账户B
- 并发处理
- (无控制的)数据并发访问容易导致数据错误
- 例如,考虑一个银行请求
- 有2个客户A和B共享一个账户,余额为5000
- 客户A和B同时取款1000
- 安全性
- 例如,我们不希望系统程序员有读取某些数据的权限
- 在文件系统,不同的访问权限也需要很多开发成本
- 冗余和不一致性
- 使用DBMS,我们有以下优势
- 数据独立性:应用程序和数据结构之间相互独立,互不影响
- 高效数据访问
- 完整性和安全性
- 数据权限管理
- 程序崩溃恢复
- 节省开发成本和数据交换成本
- 使用DBMS和文件系统的首先区别是,它对数据进行存储前会先对它们进行建模
数据模型
- 数据模型是描述数据的工具或概念的集合,表示数据、解释数据、数据关联和数据约束
- 面向对象的逻辑模型
- 实体关系模型(ER model)
- 实体关系模型(ER model)
- 面向记录的模型
- 关系模型(Relational Model)
- 涉及概念:Relation-数据表格。列也被成为字段(field)或属性(attribute)
- 我们将重点关注占主导地位的最广泛使用的关系模型
- 关系模型中,表头、属性约束等成为模式(schema)
- 关系模型(Relational Model)
抽象数据的不同层次
- DBMS抽象/隐藏了数据存储维护等细节。数据的“画像”可分为三个层次:
- 物理层面:数据如何存储访问
- 逻辑层面:数据的schema
- 视图层面:数据的表示方式
- 逻辑层面
- 物理层面:存储方法、索引方式等
- 视图层面:向所有学生发布成绩时的视图
- 根据需求展示不同层次、方面的视图
数据独立性
- 物理数据独立性
- 物理组织方式的改变不影响逻辑层面、应用程序
- 概念组织层面的改变不影响视图层面、应用层面
DBMS的语言
- Data Definition Language(DDL)
- 定义schema的语言
- Data Manipulation Language(DML)
- 用来检索、更新、插入、删除等操作的语言
- 为了检索数据,我们使用查询语言查询数据库,它是DML的一部分
- 管理员(DBA):对数据库具有集中控制权并负责以下任务的人员
- 定义schema
- 物理存储设定
- 数据访问权限
- 数据完整性定义
- 维护/监控数据库
- 根据需求改动数据库
- DBMS的其他使用者
- 程序员
- 将DML调用嵌入到以主机语言(例如Cobol、C、Java)编写的程序中。(DML代表数据操作语言)
- 例如,从C#程序里调用DML与数据库交互
- Python中使用SQLAIchemy框架
- 有经验的数据库用户
- 直接使用SQL查询数据,无host language
- 小白用户
- 调用别人写好的程序进行交互
- 例如,银行app中的转账按钮--小白可以直接使用该程序进程转账
- 程序员
DBMS的结构
- 查询优化、查询执行
- 关系运算符
- 文件和访问方法
- 缓存管理
- 磁盘管理
DBMS的历史
- 第一个DBMS是由 Bachman 在 20 世纪 60 年代初在GE 通用电气公司设计的
- 1970 年,IBM 的 Codd 提出了一种新的数据表示框架,称为关系数据模型。
- 关系数据库的 SQL 查询是 IBM System R 项目的一部分,在 20 世纪 80 年代末实现了标准化。
- 当前的标准 SQL-92 已被 ANSI(美国国家标准协会)和 ISO(国际标准组织)采用。
- 在 20 世纪 80 年代末和 90 年代,一些供应商(例如IBM 的 DB2、Oracle 8)已经扩展了他们的系统,使其能够存储新的数据类型,例如图像和文本。
- 为数据仓库开发的专用系统,整合来自多个数据库的数据。
- 进入互联网时代,人们提出了一种新的标记语言 XML,用于通过 Web 浏览器访问数据。 随着收集的数据越来越多,公司也有兴趣从数据中挖掘有用的信息。
- 图数据库、云数据库、知识图谱