Computer Science · An Overview · Chapter 9

数据库系统DATABASE SYSTEMS

数据库是把大量数据转化成抽象工具的系统——用户以简便的方式搜索和提取相关的信息项。本章讨论数据库这个主题,还将讨论与数据挖掘相关的领域和传统的文件结构。

数据库 database模式 schemaDBMS关系模型 relational model 元组 tupleSQL事务 transaction锁 lock散列 hashing数据挖掘 data mining
数据库:信息集成池
从分散文件到信息集成池——数据库系统应用抽象,把大型数据集合转换为有用的信息源。
Learning Map

本章学习地图

每节末尾附「本节小结」与 2 道课堂选择题(A / B / C / D),共 14 题,参考答案见页尾。一条主线:数据库系统应用抽象,把大型数据集合转换为有用的信息源。

小节核心问题关键概念
9.1 数据库基础为什么要用数据库而不是分散的文件?多维数据集合 · 模式/子模式 · DBMS · 数据库模型
9.2 关系模型数据怎样存成“表格”并被查询?关系/元组/属性 · 无损分解 · SELECT/PROJECT/JOIN · SQL
9.3 面向对象数据库对象范型如何与数据库结合?对象间的链接 · 持久对象 persistent
9.4 维护数据库完整性多用户并发下如何防止数据出错?事务 · 提交/回滚 · 日志 · 共享锁/独占锁
9.5 传统文件结构数据库技术从哪儿演变而来?顺序文件 · 索引文件 · 散列 hash
9.6 数据挖掘如何从数据里发现未知的模式?数据仓库 · 类描述/辨别 · 聚类/关联/离群/时序
9.7 社会影响数据库技术带来哪些伦理问题?数据收集 · 隐私 · 法律与舆论
9.1 Database Fundamentals

9.1 数据库基础

数据库 database多维的数据集合——之所以说多维,是因为通过数据项之间的内部链接,可以从不同的角度获取信息。数据库旨在高效处理大量数据,同时提供数据的一致性、安全性和完整性。

File-Oriented → Database-Oriented

从数据孤岛到信息集成池

面向文件:客服部管客户记录、薪资部管工资记录、人事部管雇员记录……各部门各自维护文件——数据重复、不一致,难以汇总决策。

面向数据库:所有部门共享一个集成的数据库——这种信息集成池提供的有价值的资源,可以支持管理层做出决策。

Metadata

元数据:关于数据的数据

元数据 metadata:关于其他类型数据的信息——可以是关于图像、网页或其他复杂对象的描述性数据。

元数据通过提供数据各方面的附加信息,增加数据或数据集的有效使用。例:照片的EXIF 信息(拍摄时间、相机型号)就是元数据。

Schema & Subschema

模式与子模式:共享与控制的平衡

模式 schema:整个数据库结构的一个描述,数据库系统用模式来维护数据库。

子模式 subschema:只是与特定用户需求相关的那部分数据库的描述——让不同用户访问不同信息,是管理敏感信息使用权的有用工具。注意:非常大型的动态分布式数据库在实践中很难完全保护。

DBMS & Database Model

数据库管理系统与数据库模型

分层视角:用户 → 应用软件 → 数据库管理系统(DBMS)→ 实际的数据库。应用软件并不直接操纵数据库,实际操纵者是 DBMS——每个软件层都从自己的抽象视角看待数据。

数据库模型 database model:组织和管理数据的结构、操作与关系的框架。寻找更好模型的工作永无止境:让复杂系统容易概念化、请求表达简明、DBMS 高效。

本节小结 · 9.1

数据库 = 多维的数据集合,内部链接让信息可从多角度获取;数据库把分散文件整合成“信息集成池”支持管理决策。模式描述整个数据库,子模式描述特定用户可见的部分——既共享数据又控制访问;元数据是关于数据的数据。应用软件不直接操纵数据库,DBMS 是中间的实际操纵者。一句话:文件各管各的,数据库大家共享——集成带来价值,也带来访问控制的需求。

课堂练习 · 9.1(单选,参考答案见页尾)
Q1关于模式(schema)与子模式(subschema),正确的是?
答案 B。子模式 = 特定用户相关部分的描述;模式才是整个数据库结构的描述。
Q2在一个典型的数据库应用中,直接操纵实际数据库的是?
答案 C。应用软件不直接碰数据库——它把请求交给 DBMS,由 DBMS 实际操纵。
9.2 The Relational Model

9.2 关系模型:表格里的数据

关系模型 relational model:数据存储在类似电子表格的表格中,这些表格称为关系 relation——E.F.Codd 于 1970 年提出,利用数学中的集合论和关系代数管理数据,成为数据库设计的主流模型。

Tuple & Attribute

元组与属性

关系中的一行称为一个元组 tuple——表示一个实体的记录;一列称为属性 attribute——描述对应实体的特征。

例:EMPLOYEE 关系中,一行 = 一名员工(EmplId、Name、Address、SSNum 四个属性)。

Lossless Decomposition

无损分解

设计关系数据库的关键步骤是设计构成数据库的关系。把一个关系分解成几个较小的关系时,信息有时丢失、有时不丢失。

不丢失信息的分解称为无损分解 lossless decomposition——目标:找出会引发问题的关系特征(如冗余),并重组消除它们。

关系运算作用例子
SELECT从一个关系中提取(选满足条件的元组)NEW ← SELECT from EMPLOYEE where EmplId='34Y70'
PROJECT从一个关系中提取MAIL ← PROJECT Name, Address from EMPLOYEE
JOIN按条件把两个关系的元组拼接成一个新关系新关系的属性 = 原来两个关系的属性之和
SQL:结构化查询语言 structured query language
SELECT EmplId, Dept
FROM Assignment, Job
WHERE Assignment.JobId = Job.JobId
  AND Assignment.TermDate = '*'

每条 SQL 查询 = 三条子句 SELECT + FROM + WHERE,本质 = 先对 FROM 中的关系做 JOIN,再按 WHERE 条件做 SELECT,最后对 SELECT 列出的列做 PROJECT。SQL 是陈述性语句——描述“要什么”而不是“怎么做”,应用程序员不必为开发处理关系的算法花费精力。

动手试一试:SQL 查询的三步拆解Interactive · JOIN → SELECT → PROJECT
上面那条 SQL 是怎样一步步执行的?点击「执行下一步」:先 JOIN 两表、再 SELECT 选出 TermDate 为 '*' 的行、最后 PROJECT 出两列。
FROM 子句列出 Assignment 和 Job 两个关系——第一步:把它们 JOIN 起来。
本节小结 · 9.2

关系 = 表格;行 = 元组,列 = 属性;设计关系是建库的关键步骤,分解要追求无损。SELECT 提取行,PROJECT 提取列,JOIN 按条件拼接两个关系——运算结果都是新关系;SQL 是陈述性语句,把三条子句翻译成 JOIN→SELECT→PROJECT 的组合。一句话:陈述“要什么”而不是“怎么做”——这就是 SQL 的解放。

课堂练习 · 9.2(单选,参考答案见页尾)
Q3PROJECT 运算的作用是?
答案 B。SELECT 提取行,PROJECT 提取列——别记混。
Q4一条 SQL 查询语句本质上是?
答案 B。SQL 是陈述性的:只描述所需信息,处理关系的算法交给 DBMS。
9.3 Object-Oriented Databases

9.3 面向对象数据库

对象范型与数据库结合:数据库由对象构成,对象之间用链接表示关联——员工数据库可以由三个类(对象类型)构成:Employee、Job 和 Assignment。

关系表格与对象链接
关系靠表格连接,对象靠链接相连——顺着一个 Employee 对象的链接就能找到它的所有 Assignment 和对应的 Job。
Links Maintained by DBMS

对象间的链接

对象之间的链接由 DBMS 维护:新增对象时,应用软件只需指明它应该链接到哪些对象,DBMS 会创建所需的链接系统(例如用类似链表的方式把一个员工的多个 Assignment 串起来)。

Persistent Objects

持久对象

普通面向对象程序中的对象是短暂的 transient:程序终止就被丢弃。加入数据库的对象必须在创建它的程序终止后仍然保存——称为持久的 persistent。创建持久对象是对常规的显著突破。

Why Object-Oriented?

为什么用对象范型?

面向对象的方法允许整个软件系统(应用软件 + DBMS + 数据库本身)在同一个范型下设计——这与历史上的常见做法形成对比:用命令式语言开发的应用软件去查询关系数据库,两种范型之间存在固有的冲突。

本节小结 · 9.3

面向对象数据库:数据 = 对象,关联 = 对象间的链接,链接由 DBMS 维护(可类似链表实现);数据库中的对象是持久的——程序终止后仍被保存;同一范型贯穿整个系统是最大卖点。一句话:顺着链接找对象——关系靠表格连接,对象靠指针相连。

课堂练习 · 9.3(单选,参考答案见页尾)
Q5面向对象数据库中,“持久对象”(persistent object)指?
答案 B。持久对象 = 创建它的程序终止后仍被保存——这正是数据库对象与普通程序对象的区别。
Q6面向对象数据库中,对象之间的链接通常由谁维护?
答案 C。链接由 DBMS 维护——程序员只需指明对象该和谁相连,实现细节不用操心。
9.4 Maintaining Database Integrity

9.4 维护数据库的完整性

个人用的小型数据库出错了还能手动补救;大型多用户商用数据库中,数据出错或丢失的代价巨大——DBMS 的重要角色:防止事务只做了一半、或事务之间相互干扰。

Commit / Rollback Protocol

提交 / 回滚协议

一个事务 transaction(如转账:一个账户减、另一个账户加)在数据库层面涉及多个步骤,中间状态可能不一致。DBMS 把每个事务的活动先记入日志 log(非易失存储)。

所有步骤都记录完毕的时刻叫提交点 commit point——此后 DBMS 负责保证事务生效;提交点之前出故障,则用日志回滚 roll back 撤销已做的部分。注意级联回滚 cascading rollback:回滚一个事务可能牵连别的事务。

Locking

锁定协议

并发危险:错误汇总问题 incorrect summary(转账进行到一半时统计总额)与丢失更新问题 lost update(两个事务基于同一余额各自扣款)。

对策:访问前先声明类型。共享锁 shared lock:只读,允许多个事务共享;独占锁 exclusive lock:要修改,必须独占。请求被拒就等待——可能死锁 deadlock,用 wound-wait 协议让老事务优先。

动手试一试:转账事务与提交点Interactive · Commit / Rollback
从 A 账户转 100 元到 B 账户需要两步:A 减 100 → B 加 100。点击「逐步执行」观察中间的不一致状态,然后选择——模拟故障点在不同位置时 DBMS 的处理。
账户 A
500
——100——▶
账户 B
300
日志 LOG
(空)
初始:A=500,B=300。点「逐步执行」开始转账事务。
本节小结 · 9.4

事务 = 一组要么全做、要么全不做的步骤;日志先行——提交点后 DBMS 保证生效,提交点前可用日志回滚;回滚可能级联。锁定协议区分共享访问(只读、可共享)与独占访问(修改、独占),防错误汇总与丢失更新;等待可能死锁,老事务优先(wound-wait)可解。一句话:先记日志再动手——做到一半出故障,也能按日志“倒带”。

课堂练习 · 9.4(单选,参考答案见页尾)
Q7提交点(commit point)是指?
答案 B。提交点 = 所有步骤已记入日志的时刻——此后 DBMS 承诺事务一定生效;之前出故障则可回滚。
Q8一个事务准备修改某数据项时,它必须获得?
答案 B。要修改数据必须独占访问(exclusive access)——拿到独占锁后才能改。
9.5 Traditional File Structures

9.5 传统文件结构

数据存储与检索系统的历史起点——今天的数据库技术由此演变而来;索引与散列至今仍是构建大型数据库的重要工具。

Sequential File

顺序文件

顺序文件 sequential file:从头到尾串行访问的文件——音频、视频、文档都是。例:员工文件每条记录定长 31 字符(姓名 25 + 编号 6),按逻辑记录 logical record 存取。顺序处理很高效,乱序查找很狼狈。

Indexed File

索引文件

索引文件 indexed file:为文件建一本“书的索引”——索引 index 列出键及对应记录的存放位置。索引通常先调入主存,查记录 = 索引里找键 → 按位置直接取块。

动手试一试:散列 hashing——算出来的柜号Interactive · Hash Function
存储空间分成 41 个桶 bucket;散列函数 = 键值除以 41 取余数(除法散列)。输入一个数字键,看它落进哪个桶——再想想:如果桶太少或函数选得不好会怎样?
除法散列:桶号 = 键 mod 41。键 25X3Z 编码成数字后散列到某个桶——检索时重算一次即可定位。
本节小结 · 9.5

顺序文件串行访问,适合按存储顺序处理;索引文件靠“键 → 位置”的索引快速定位;散列文件用散列函数直接把键值算成桶号——取记录 = 算桶号 → 取该桶 → 桶内查找。散列还可用于认证网上传送的消息。索引与散列是今天数据库系统的基石。一句话:索引像查书的目录,散列像算出来的柜号——目的都是少翻几页。

课堂练习 · 9.5(单选,参考答案见页尾)
Q9索引文件(indexed file)检索记录的方式是?
答案 B。索引文件:索引里找键 → 按位置取记录;C 描述的是散列。
Q10散列(hashing)系统的核心做法是?
答案 B。散列不查索引——散列函数直接把键算成桶号,一步到位。
9.6 Data Mining

9.6 数据挖掘

数据挖掘 data mining:在数据集合上发现模式的技术——不同于传统数据库查询只检索已存储的事实;数据挖掘的对象是静态的数据仓库 data warehouse(数据库的快照),因为静态系统比动态系统更容易找模式。

Class Description

类描述

找出刻画某一组数据的性质——例:购买小型经济车的人群有什么特征。

Class Discrimination

类辨别

找出区分两组的性质——例:买二手车的客户 vs 买新车的客户有何不同。

Cluster Analysis

聚类分析

发现“类”本身——例:观影人群分成 4~10 岁与 25~40 岁两群(孩子与家长?)。

Association Analysis

关联分析

寻找数据组之间的关联——例:买薯片的顾客往往也买啤酒和汽水。

Outlier Analysis

离群分析

识别不符合常规的数据项——例:信用卡盗刷会突然偏离正常消费模式;也可用于发现数据错误。

Sequential Pattern Analysis

时序模式分析

发现随时间变化的行为模式——例:股市、气候的变化趋势;挖掘结果可用于预测未来行为。

本节小结 · 9.6

数据挖掘 = 在数据中发现未知的模式,对象是静态的数据仓库而非在线数据库;它与统计学渊源深厚。六种常见形式:类描述、类辨别、聚类分析、关联分析、离群分析、时序模式分析——结果可用于预测,也常用于更好地理解数据(如解读 DNA)。一句话:传统查询取回“你知道有的”,数据挖掘发现“你不知道有的”。

课堂练习 · 9.6(单选,参考答案见页尾)
Q11“买薯片的顾客往往也买啤酒和汽水”——这属于哪种数据挖掘形式?
答案 B。寻找数据组之间的关联 = 关联分析 association analysis。
Q12数据挖掘通常在什么对象上进行?
答案 B。静态系统更容易找模式——所以数据挖掘在数据仓库(快照)而非在线数据库上进行。
9.7 Social Impact of Database Technology

9.7 数据库技术的社会影响

曾经埋在故纸堆里的信息变得触手可及——法律与伦理上的影响(无论好坏)不是学术辩题,而是现实。

Data Collection

数据收集:明显的与隐蔽的

明显的:问卷调查、竞赛报名表、政府规定要求提供——自愿与否取决于视角(申请贷款时提供个人信息算自愿吗?)。

隐蔽的:信用卡公司记录消费习惯、网站记录访客身份、超市积分卡悄悄汇总你的购物清单——记录的价值远超折扣本身。

The Value of Linking

价值来自“链接”

数据库技术把不同来源的数据链接、比对,揭示原本埋藏的关系:信用卡消费模式被分类成交叉营销画像;买健身器材的人收到健身杂志订阅单;福利记录与犯罪记录比对找出违反假释者——组合信息的方式有时非常有想象力。

Legal Remedies

对策一:法律手段

例:美国《1974 年隐私法》Privacy Act of 1974——要求政府机构公布其数据库、允许公民查阅和更正个人信息。但立法只能让滥用非法,并不能阻止其发生;官僚系统的拖延同样值得警惕。

Public Opinion

对策二:公众舆论

或许更有力的办法是舆论:滥用的代价超过收益,数据库就不会被滥用——企业最怕声誉受损。保护隐私,技术之外还需要制度与监督。

本节小结 · 9.7

数据库技术放大了数据的价值,也放大了隐私与安全的风险——收集可能明显,也可能在你不知情时发生;数据的价值(能被链接出隐藏信息)是收集热潮的根本动力。防范滥用:法律手段 + 公众舆论双管齐下。一句话:数据越能链接,隐私越需守护——能力是技术,分寸是伦理。

课堂练习 · 9.7(单选,参考答案见页尾)
Q13教材提到保护社会免受数据库滥用的办法包括?
答案 B。法律(如《1974 年隐私法》)+ 公众舆论等多种途径共同防范滥用。
Q14推动当今数据收集热潮的根本动力是?
答案 B。数据能链接出价值,价值驱动收集——数据库技术把这种价值放大了。
Answer Key

课堂练习参考答案(共 14 题)

逐题一句话解析;错题请回到对应小节复习。速记:9.1→B C|9.2→B B|9.3→B C|9.4→B B|9.5→B B|9.6→B B|9.7→B B

9.1 数据库基础

Q1 B 子模式 = 特定用户相关部分的描述;模式才是整体描述。

Q2 C 应用软件不直接碰数据库,DBMS 才是实际操纵者。

9.2 关系模型

Q3 B SELECT 提取行,PROJECT 提取列。

Q4 B SQL 是陈述性语句:描述要什么,而非怎么做。

9.3 面向对象数据库

Q5 B 持久对象 = 程序终止后仍被保存的对象。

Q6 C 对象间的链接由 DBMS 维护,程序员不用操心实现。

9.4 维护完整性

Q7 B 所有步骤记入日志的时刻 = 提交点;之前可回滚。

Q8 B 要修改数据必须独占访问——独占锁。

9.5 传统文件结构

Q9 B 索引文件:索引里找键,按位置取记录。

Q10 B 散列:用散列函数把键值直接算成桶号。

9.6 数据挖掘

Q11 B 找数据组之间的关联 = 关联分析。

Q12 B 数据挖掘在静态的数据仓库(快照)上进行。

9.7 社会影响

Q13 B 法律 + 舆论等多种途径共同防范滥用。

Q14 B 数据能链接出价值,价值驱动收集热潮。

Glossary

全章总结与术语表

数据库系统应用抽象,把大型数据集合转换为有用的信息源。下一章预告:计算机图形学。

小节一句话总结
9.1 数据库基础多维数据集合;模式/子模式控访问;DBMS 实际操纵数据库
9.2 关系模型关系 = 表格:行元组、列属性;SELECT/PROJECT/JOIN;SQL 陈述所需
9.3 面向对象数据库数据 = 对象,关联 = 链接;对象必须是持久的
9.4 维护完整性日志先行、提交点生效、可回滚;共享/独占锁防干扰
9.5 传统文件结构顺序串行、索引查键、散列算桶——数据库技术的源头
9.6 数据挖掘在数据仓库中发现未知模式:六种分析形式
9.7 社会影响数据可链接出价值,也可侵犯隐私——法律与舆论共同约束
数据库 database元数据 metadata模式 schema子模式 subschema 数据库管理系统 DBMS数据库模型 database model关系 relation元组 tuple 属性 attribute无损分解 lossless decomposition结构化查询语言 SQL持久对象 persistent object 事务 transaction提交点 commit point回滚 roll back共享锁 / 独占锁 shared / exclusive lock 顺序文件 sequential file索引文件 indexed file散列 hashingbucket 数据挖掘 data mining数据仓库 data warehouse关联分析 association analysis