为什么需要数据库
考虑大学组织中的一个部分,除其他数据外,需要保存关于所有教师、学生、系和开设课程的信息。
在计算机中保存这些信息的一种方法是将它们存放在操作系统文件中。
为了对信息进行操作,系统中应该有一些对文件进行操作的应用程序,包括:
- 增加新的学生、教师和课程。
- 为课程注册学生,产生班级花名册。
- 为学生填写成绩、计算绩点、产生成绩单。
这些应用程序是由系统程序员根据大学的需求编写的。
随着需求的增长,时间的推移,越来越多的文件和应用程序会加入到系统中,这就是文件处理系统。永久记录被存储在多个不同的文件中,人们编写不同的应用程序来将记录从有关文件中去除或加入到适当的文件中。
文件处理系统中存储组织信息的主要弊端包括:
-
数据的冗余和不一致。因为文件和程序在很长时间内可能由不同的程序员创建,不同程序可能采用不同的程序设计语言写成。
数据的冗余,即相同的信息可能在几个文件重复存储,如某同学有两个专业(音乐和数学),该学生的地址和电话号码可能既在音乐系学生记录的文件中,又在数学系学生记录的文件中。
这种冗余除了存储和访问开销大,很可能导致 数据不一致性,即同一数据的不同副本不一致。如某学生地址的更改可能在音乐系记录中得到反映而在数学系记录中却没有。 -
数据访问困难。
假设大学某个办事人员需要找出居住在某个特定区域的所有学生的姓名,但是原始系统的设计者没有预料到会有这样的需求,所以没有现成的应用程序去满足这个需求。
有两种选择:一种是取得所有学生的列表从中手工提取所需信息,另一种是要求数据处理部门让某个程序员编写相应的应用程序。假设编写了相应的程序,几天以后可能需求又变化了,比如需要只列出至少选课 60 学时的那些学生。
由此,传统的文件处理不支持方便高效地去获取所需数据,需要开发通用的、能对变化的需求做出更快反应的数据检索系统。 -
数据孤立。数据分散在不同的文件中,这些文件可能又具有不同的格式,所以编写新的应用程序来检索适当数据是很困难的。
-
原子性问题。一旦故障发生,数据应该被恢复到故障发生以前的一致的状态。
比如把 A A A 系的账户余额中 1 w 1w 1w 元转入 B B B 系账户余额中,假设程序执行中发生了系统故障,很可能 A A A 系余额减去的 1 w 1w 1w 元还未来得及存入 B B B 系余额中,这就状态不一致。
显然,为了保证一致性, A A A 系余额减少和 B B B 系余额增加,这俩操作要么都发生,要么都不发生。即这个操作必须是原子的----要么全部发生,要么全不发生。
以上等一些问题,促进了数据库系统的发展。
数据库概览
走马观花快速一瞥,数据库为何方神圣?
假设你现在有很多很多表,为了快速 添加、删除、修改、查找 数据,你需要想办法管理这些表:
- 这些表中是一些 相互有关联关系的数据,这样的 表的集合叫做数据库 (Database);
- 管理数据库(也就是管理这些表)的 系统软件叫做 数据库管理系统(DBMS);
- 这些数据库管理系统 由谁来使用 呢?就是 数据库管理员(DBA);
- 那数据库管理员怎么使用这些系统?就需要 数据库语言(SQL);所以你要成为 DBA,就要先掌握这个语言,才能操作数据库;
- 如果有些人不学计算机,没有掌握数据库语言,怎么办呢?那我们学计算机的为他们开发 数据库应用程序(DBAP,图形界面);
- 不同的用户使用不同的能完成某功能的 数据库应用程序,通过数据库管理系统来操作数据库;
- 那如何根据数据库(那些表)设计 具体的数据库应用程序呢?需要从现实世界抽象出信息(ER图),再设计出关系模式,用数据库语言定义这些表,存储在计算机中;
- 学习了 数据库设计,再进一步学习 数据库的维护和控制,再学习 数据库的存储和查询,这又涉及到数据的一致性、可靠性,即 数据库事务处理。
- 数据库(DB): Database
- 数据库管理系统(DBMS): Database Management System
- 数据库管理员(DBA): DataBase Administrator
- 数据库应用(DBAP): DataBase Application
这就是,很多很多表引发的问题以及解决方法,即数据库。
【重点与难点】
- 一组概念的区分:数据库、数据库系统、数据库管理系统
- 表 的相关要素和术语
- 数据库系统 的构成、工作环境
- 了解 数据库管理系统 的功能:从 用户角度 和从 系统角度
数据库 缘起
数据库是一种技术,更是一种思维。
应用数据库,实现积累的收益。
表(Table)的理解
这里的数据,就是上文提到的一些有关联关系的 表(Table),表是以 按行按列 形式组织和展现的数据。
E.F.Codd, 基于对“表(Table)”的理解:
- 提出了“关系”及关系模型
- 提出了关系数据库理论
- 开创了数据库的时代
- 当前普遍应用的数据库管理系统的奠基者
- 获得了 计算机领域最高奖“图灵奖”
那么,表里有什么?
这需要 抽象,抽象就是要 理解 表的要素,然后 区分 开各个要素,再给它们 命名,用以 表达 表的信息。
Table 中描述了一些 相互有关联关系的数据。
- “学生成绩单” 是这个表的 表名;
- “班级”、“课程”、…、“成绩”这一行是表的 表标题(格式);
- 粉红色框框的一行行一列列的内容是表的 表内容(值);
- 表名 和 表标题 构成这个表的 关系(模式)。
- 表名、表标题和表内容 构成这个 表(关系)。
- 这个表内容的每一行又叫 行(row)/元组(tuple)/记录(record)。
- 这个表内容的每一列又包含 列名 和 列值。
用表来定义数据库
Database: 相互之间有关联关系的 Table 的集合。
除了表形式的关系数据库外,还有图像数据库和工程数据库。
数据库系统的理解
概念层次的理解
数据库系统(工作环境):
- 数据库(DB): Database
- 数据库管理系统(DBMS): Database Management System
- 数据库管理员(DBA): DataBase Administrator
- 数据库应用(DBAP): DataBase Application
- 计算机基本系统
实例层次的理解
数据库系统(工作环境):图书管理数据库系统
数据库管理系统的理解
- 怎样利用数据库管理系统管理数据库?
- 数据库管理系统应具有什么功能?
从用户角度看
- 数据库定义: 定义数据库中 Table 的名称、标题(内含的属性名称及对该属性的值的要求)等。
- DBMS 提供一套 数据定义语言 (DDL:Data Definition Language)给用户;
- 用户使用 DDL 描述 其 所要建立表的格式;
- DBMS 依照用户的定义,创建数据库及其中的 Table。
- 数据库操纵:向数据库的 Table 中 增加/删除/更新数据 及 对数据进行查询、检索、统计 等。
- DBMS 提供一套 数据操纵语言 (DML:Data Manipulation Language)给用户;
- 用户使用 DML 描述 其所要进行的 增、删、改、查 等操作;
- DBMS 依照用户的操作描述,实际执行 这些操作。
- 数据库控制:控制数据库中数据的使用—哪些用户可以使用,哪些不可以。
- DBMS 提供一套 数据控制语言 (DCL:Data Control Language)给用户;
- 用户使用 DCL 描述 其对数据库所要实施的控制;
- DBMS 依照用户的描述,实际进行控制。
- 数据库维护:转储/恢复/重组/性能监测/分析…
- DBMS 提供一系列 程序(实用程序/例行程序) 给用户;
- 在这些程序中提供了对数据库维护的各种功能;
- 用户使用 这些程序进行各种数据库维护操作。
数据库维护的实用程序,一般都是由数据库管理员(DBA)来使用和掌握的。
从系统实现角度看
“形式->构造->自动化”–数据库管理系统的实现。
DBMS 为完成 DB 管理,在后台运行着一系列程序…
- 语言编译器:将用数据库语言书写的内容,翻译成 DBMS 可执行的命令。(可以类比 C 编译器可以把 C 语言代码编译成 CPU 可以懂的二进制指令 来理解)例如:DDL 编译器, DML 编译器, DCL 编译器等;
- 查询优化(执行引擎)与查询实现(基本命令的不同执行算法):提高数据库检索速度的手段。例如:贯穿于数据存取各个阶段的优化程序;
- 数据存取与索引:提供数据在磁盘、磁带等上的高效存取手段。例如:存储管理器,缓冲区管理器,索引/文件和记录管理器等;
- 通信控制:提供网络环境下数据库操作与数据传输的手段。
- 事务管理:提供提高可靠性并 避免并发操作错误 的手段。
- 故障恢复:使数据库自动恢复到故障发生前正确状态的手段。例如:提供了备份、运行日志操控等实用程序;
- 安全性控制:提供合法性检验,避免非授权非法用户访问数据库的手段。
- 完整性控制:提供数据及数据操作正确性检查的手段。
典型的数据库管理系统
- Oracle
- MySQL
- PostgreSQL
- DB2(IBM)
- Sybase
- Microsoft SQL Server
- Microsoft Access
- Microsoft FoxPro
- MongoDB(面向文档)
【总结】
数据库管理系统,包括数据库语言,和数据库执行例行程序。
数据库语言
数据库语言:使用者通过数据库语言利用 DBMS 操作数据库;
SQL 语言是结构化的数据库语言。
数据库定义、操纵、控制语言
- 数据定义语言(DDL:Data Definition Language) ----DBMS 提供给用户,以便用户定义数据格式;
- 数据操纵语言(DML:Data Manipulation Language)----DBMS 提供给用户,以便用户对数据进行操作;
- 数据控制语言(DCL:Data Control Language)----DBMS 提供给用户,以便用户对数据进行控制;
- 数据库各种操作的执行----DBMS 按用户要求进行定义、操纵、控制和维护。
数据库语言 VS 高级语言
- 一条数据库语言语句相当于高级语言的一个或多个循环程序。
数据库语言(标准的 SQL 语言):
Select 学号,姓名 From 学生登记表 Where 性别 = ‘男’;
高级语言:
For K=1 to 最后一条记录
读第K条记录
If 性别=‘男’ then
显示第K条记录
Endif
Next K
- 数据库语言可以嵌入到高级语言(宿主语言)中使用。
交互式数据库语言(标准的:SQL语言):
Select 学号,姓名
From 学生登记表
Where 性别=‘男’;
嵌入式数据库语言(SQL 语句嵌入到某一种高级语言中):
内容回顾
练习
- 关于数据库系统和数据库管理系统,下列说法正确的是__________。
A. 数据库系统和数据库管理系统指的是同一软件产品
B. 数据库系统和数据库管理系统指的是不同软件产品
C. 数据库管理系统是软件产品,而数据库系统不仅仅是软件产品
D. 数据库系统是软件产品,而数据库管理系统不仅仅是软件产品
正确答案:C
- 关于数据库系统,下列说法正确的是__________。
A. 数据库系统的构成包括计算机/网络基本系统、数据库和数据库管理系统
B. 数据库系统的构成包括计算机/网络基本系统、数据库、数据库管理系统和数据库应用程序
C. 数据库系统的构成包括计算机/网络基本系统、数据库、数据库应用程序和数据库管理员
D. 数据库系统的构成包括数据库、数据库管理系统、数据库应用程序、数据库管理员以及计算机与网络基本系统
正确答案:D
- 从用户角度看数据库管理系统的功能,下列说法正确的是__________。
A. 数据库管理系统就是通过数据库语言让用户操作进而提供数据库操纵功能的系统
B. 数据库管理系统就是通过数据库语言让用户操作进而提供数据库定义和数据库操纵功能的系统
C. 数据库管理系统就是通过数据库语言让用户操作进而提供数据库定义、数据库操纵和数据库控制功能的系统
D. 数据库管理系统就是通过数据库语言让用户操作进而提供数据库定义、数据库操纵和数据库控制功能的系统,同时提供了一系列程序能够实现对数据库的各种存储与维护
正确答案:D
- 从系统角度看数据库管理系统,其功能包括__________。
A. 数据库语言及其编译
B. 查询实现与查询优化
C. 事务处理
D. 不仅仅有(A)(B)(C )功能,还包括其他功能
正确答案:D
- 从系统角度看数据库管理系统,其功能包括__________。
A. X-查询实现与查询优化
B. Y-事务处理
C. Z-数据存储与索引
D. 不仅仅包含X-、Y-、Z-功能,还包括其他功能
正确答案:D
- 下列哪些功能不是数据库管理系统的功能__________。
A. 完整性控制
B. 并发控制
C. 通讯控制
D. 处理机控制
正确答案:D
- 关于数据库系统语言,下列说法正确的是__________。
A. 数据库系统语言包括了DDL和DML
B. 数据库系统语言包括了DDL、DML和DCL
C. 数据库系统语言包括了DDL、DML和C++/Java
D. 数据库系统语言包括了DDL、DML和程序设计语言
正确答案:B
- 关于DDL,下列说法正确的是__________。
A. DDL是数据库定义语言
B. DDL是数据库操纵语言
C. DDL是数据库控制语言
D. DDL是数据库维护语言
正确答案:A
- 关于DML,下列说法正确的是__________。
A. DML是数据库定义语言
B. DML是数据库操纵语言
C. DML是数据库控制语言
D. DML是数据库维护语言
正确答案:B
- 从用户角度看数据库管理系统,其功能包括__________。
A. 数据库定义
B. 数据库操纵
C. 数据库控制
D. 上述全部
正确答案:D
- 从用户角度看数据库管理系统,其功能包括__________。
A. 数据库定义
B. 数据库操纵
C. 数据库控制
D. 数据库维护
正确答案:A、B、C、D