数据管理基础
Contents
chap01计算、数据与数据管理
人工管理:
特点:
- 数据的管理者:用户(程序员),数据不保存
- 数据面向的对象:某一应用程序
- 数据的共享程度:无共享、冗余度极大
- 数据的独立性:不独立,完全依赖于程序
- 数据的结构化:无结构
- 数据控制能力:应用程序自己控制
文件系统
- 数据的管理者:文件系统,数据可长期保存
- 数据面向的对象:某一应用
- 数据的共享程度:共享性差、冗余度大
- 数据的结构化:记录内有结构,整体无结构
- 数据的独立性:独立性差
- 数据控制能力:应用程序自己控制
文件相比于人为管理更有组织性,不过由于文件格式与内容的差异所以具有比较大的隔裂性
共享数据
问题:如何确保数据结构和存储机制对于所有应用来说都是可以接受的?如何解决数据的并发?如何确保数据安全性,完整性?如何在动态条件下解决上述问题?
数据库管理系统
数据库系统应运而生,我们会在下一章详细分析数据库的特点以及优越之处
chap02数据、数据库的基本概念
intro:数据库需要了解的四个基本概念:
数据库的4个基本概念?
- 数据(Data)
- 数据库(Database,DB)
- 数据库管理系统(DataBase Management System,DBMS)
- 数据库系统(DataBase System,DBS)
数据(Data)是数据库中存储的基本对象
数据的含义称为数据的语义,数据与其语义是不可分的。
数据库的定义
数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据的集合
数据库的基本特征:
- 数据按一定的数据模型组织、描述和储存
- 可为各种用户共享
- 冗余度较小
- 数据独立性较高
- 易扩展
数据库管理系统(Database Management System,简称DBMS)
位于用户与操作系统之间的一层数据管理软件,是基础软件,是一个大型复杂的软件系统
数据库管理系统的主要功能
- 分类组织、管理各种系统
- 确定组织数据的文件结构和存取方式
- 实现数据之间的联系
- 提供多种存取方法提高存取率
数据操纵功能:提供数据操纵语言(DML)
实现对数据库的基本操作 (查询、插入、删除和修改)
数据库的事务管理和运行管理:
数据库在建立、运行和维护时由数据库管理系统统一管理和控制
保证数据的安全性、完整性、多用户对数据的并发使用
发生故障后的系统恢复
数据库的建立和维护功能:
数据库初始数据的装载和转换
数据库转储、恢复功能
数据库的重组织
性能监视、分析等
数据库系统(Database System,简称DBS),在计算机系统中引入数据库后的系统构成
数据库系统的构成
- 数据库
- 数据库管理系统(及其应用开发工具)
- 应用程序
- 数据库管理员(DBA)
数据库的重要特点 :整体结构化、面向全组织,数据记录可以变长、数据的最小存取单位是数据项
数据面向整个系统,可以被多个用户、多个应用共享使用
数据控制功能:
- 数据的安全性(Security)保护
保护数据以防止不合法的使用造成的数据的泄密和破坏。 - 数据的完整性(Integrity)检查
保证数据的正确性、有效性和相容性。 - 并发(Concurrency)控制
对多用户的并发操作加以控制和协调,防止相互干扰而得到错误的结果。 - 数据库恢复(Recovery)
将数据库从错误状态恢复到某一已知的正确状态。
chap03 数据模型
数据模型是对现实世界数据特征的抽象,用以抽象、表示和处理现实世界中的数据和信息
数据模型应满足三方面要求
能比较真实地模拟现实世界
容易为人所理解
便于在计算机上实现
概念/逻辑/物理模型
概念模型,也称信息模型,按用户的观点来对数据和信息建模,用于数据库设计
逻辑模型
按计算机系统的观点对数据建模,用于DBMS实现
主要包括网状模型、层次模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等。
物理模型
是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法。
数据模型的组成要素-数据结构
描述数据库的组成对象,以及对象之间的联系
数据结构是对系统静态特性的描述
数据模型的组成要素-数据操作
- 数据操作
对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则
数据操作的类型 - 查询
- 更新(包括插入、删除、修改)
数据模型对操作的定义 - 操作的确切含义、操作符号、操作规则(如优先级)
实现操作的语言 - 数据操作是对系统动态特性的描述
chap04 概念模型
概念模型的用途
- 构建信息世界
- 是现实世界到机器世界的一个中间层次
- 数据库设计的有力工具
一些基本概念:
实体(Entity):客观存在并可相互区别的事物称为实体。
可以是具体的人、事、物或抽象的概念。
属性(Attribute) 实体所具有的某一特性称为属性。
一个实体可以由若干个属性来刻画。
码(Key)唯一标识实体的属性集称为码。
实体型(Entity Type)
用实体名及其属性名集合来抽象和刻画同类实体称为实体型
实体集(Entity Set)
同一类型实体的集合称为实体集
联系(Relationship)
现实世界中事物内部以及事物之间的联系在信息世界中反映为实体(型)内部的联系和实体(型)之间的联系。
例如,如果我们有一组学生,每个学生都有学号、姓名和年级,那么“学生”就是一个实体型,其属性集合包括学号、姓名和年级。在E-R图中,实体型通常用矩形表示,矩形内部写上实体名,外部则连接到表示属性的椭圆形
如何画一张ER图?
- E-R图中的基本元素(以上面的学生饭卡E-R图为例):
1)实体
实际问题中客观存在的并且可以相互区别的事物称为实体。实体是现实世界中的对象,可以具体到人,事,物。比如:上图中的饭卡、学生、办公室、食堂、超市。
2)属性
实体所具有的某一个特性称为属性,在E-R图中属性用来描述实体。比如上图中的学生,可以用“姓名”、“院系”、“班级”、“手机号”进行属性描述。
3)实体集
具有相同属性的实体的集合称为实体集。例如:全体学生就是一个实体集,(983573,李刚,男,2000/12/12)是学生实体集中的一个实体。
4)键
在描述实体集的所有属性中,可以唯一标识每个实体的属性称为键。键也是属于实体的属性,作为键的属性取值必须唯一且不能“空置”。比如:不重复的学生号,就可以作为学生的“键”。
5)实体型
具有相同的特征和性质的实体一定有相同的属性,用实体名及其属性名集合来抽象和刻画同类实体称为实体型,其表示格式为:实体名(属性1,属性2,……)
6)联系
世界上任何事物都不是孤立存在的,事物内部和事物之间都有联系的,实体之间的联系通常有3种类型:一对一联系,一对多联系,多对多联系。
chap05 逻辑模型
基本问题,如何在机器世界中表达“低层”数据结构和“高层”数据结构?
方案1:尽量独立于应用层,采用“中立”的方式表达概念模型
方案2:在应用层中,使用特定数据结构,并在逻辑模型中高效支持这一数据结构
方案*:通用数据结构采用方案1,关键性数据结构采用方案2
格式化模型
层次模型(Hierarchical Model)
网状模型(Network Model)
关系模型(Relational Model)
对象模型
面向对象数据模型(Object Oriented Data Model)
对象关系数据模型(Object Relational Data Model)
关系模型
关系必须是规范化的,满足一定的规范条件
最基本的规范条件:关系的每一个分量必须是一个不可分的数据项, 不允许表中还有表
NoSQL介绍:
基于key-value存储模型、基于文档模型、列族模型、基于图模型
chap06 数据库系统的结构
从数据库应用开发人员角度看
数据库系统通常采用三级模式结构,是数据库系统内部的系统结构
从数据库最终用户角度看,数据库系统的结构分为:
单用户结构
主从式结构
分布式结构
客户-服务器
浏览器-应用服务器/数据库服务器多层结构等
模式和实例
模式(Schema)
- 数据库逻辑结构和特征的描述
- 是型的描述,不涉及具体值
- 反映的是数据的结构及其联系
模式是相对稳定的
实例(Instance)
- 反映数据库某一时刻的状态
- 模式的一个具体值
- 同一个模式可以有很多实例
- 实例随数据库中的数据的更新而变动
各种模式:
外模式:也称子模式或用户模式
数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述
数据库用户的数据视图,是与某一应用有关的数据的逻辑表示
外模式(子模式,用户模式),对应于用户级,对应于用户所看到的数据库的数据视图,是与和具体的应用或者项目有关的逻辑表示。用户可以通过外模式描述语言来描述、定于对应于用户的数据记录,也可以用数据库操纵语言DML来对这些数据进行操作。外模式反映了数据库系统的用户观。
内模式(也称存储模式)
是数据物理结构和存储方式的描述
是数据在数据库内部的表示方式
一个数据库只有一个内模式
模式映像:
内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系。该映象定义通常包含在模式描述中,保证数据的物理独立性
chap07 数据库系统的组成
从软件和硬件的角度
从人员的角度:
DBA(数据库管理员)的职责:包括确定存储结构、设定安全性和完整性、监控运行和使用情况、定期备份、恢复系统和介质故障、审计、性能优化以及根据需求更新和重组数据库以提升性能。
chap08关系、关系模式和关系数据库
域(Domain)
域是一组具有相同数据类型的值的集合。例:整数、实数、介于某个取值范围的整数、指定长度的字符串集合、{‘男’,‘女’}
笛卡尔积(Cartesian Product)
给定一组域D1,D2,…,Dn ,允许其中某些域是相同的。
元组(Tuple)
笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组
分量(Component)
笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量
基数(Cardinal number)
若Di(i=1,2,…,n)为有限集,其基数为mi (i = 1,2,… ,n),则D1×D2×…×Dn的基数M为:M=∏_i=1^n m_i
关系(Relation):
D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为R(D1,D2,…,Dn)
关系的表示
关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域
码(key)的类别
候选码(Candidate key)
- 若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码
- 简单的情况:候选码只包含一个属性
- 最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)
主码
若一个关系有多个候选码,则选定其中一个为主码(Primary key)
主属性
候选码的诸属性称为主属性(Prime attribute)
不包含在任何侯选码中的属性称为非主属性(Non-Prime attribute)或非码属性(Non-key attribute)
视图表
由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
chap09 关系的完整性
实体完整性规则(Entity Integrity)
若属性A是基本关系R的主属性,则属性A不能取空值
在关系模型中实体及实体间的联系都是用关系来描述的,自然存在着关系与关系间的引用
设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是R的外码(Foreign Key)
关系R和S不一定是不同的关系
目标关系S的主码Ks和参照关系的外码F必须定义在同一个(或一组)域上
chap10关系操作和关系代数
常用的关系操作
查询操作:选择、投影、连接、除、并、差、交、笛卡尔积
选择、投影、并、差、笛卡尔积是5种基本操作
特点:操作的对象和结果都是集合,一次一集合的方式
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询
运 算 符 | 含 义 | |
集合运算符 | ∪ | 并 |
– | 差 | |
∩ | 交 | |
× | 笛卡尔积 | |
专门的关系运算符 | σ | 选择 |
π | 投影 | |
连接 | ||
÷ | 除 |
使用的记号
并
差
交
笛卡尔积
选择
投影
连接
等值连接
自然连接
除运算
chap11 SQL概述
SQL(Structured Query Language)结构化查询语言,是关系数据库的标准语言
SQL是一个通用的、功能极强的关系数据库语言
综合统一
高度非过程化
面向集合的操作方式
以同一种语法结构提供两种使用方法
综合统一
集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。
可以独立完成数据库生命周期中的全部活动:
- 定义和修改、删除关系模式,定义和删除视图,插入数据,建立数据库;
- 对数据库中的数据进行查询和更新;
- 数据库重构和维护
- 数据库安全性、完整性控制,以及事务控制
- 嵌入式SQL和动态SQL定义
高度非过程化
SQL只要提出“做什么”,无须了解存取路径。存取路径的选择以及SQL的操作过程由系统自动完成。
面向集合的操作方式
SQL采用集合操作方式
操作对象、查找结果可以是元组的集合
一次插入、删除、更新操作的对象可以是元组的集合
以同一种语法结构提供多种使用方式
SQL是独立的语言,能够独立地用于联机交互的使用方式
SQL又是嵌入式语言,能够嵌入到高级语言(例如C,C++,Java)程序中,供程序员设计程序时使用
SQL功能极强,完成核心功能只用了9个动词:
数据定义:CREATE,DROP,ALTER
数据查询:SELECT
数据操作:INSERT,UPDATE,DELETE
数据控制:GRANT,REVOKE
chap12 SQL数据定义
一个关系数据库管理系统的实例(Instance)中可以建立多个数据库,一个数据库中可以建立多个模式
一个模式下通常包括多个表、视图和索引等数据库对象
定义模式
实际上定义了一个命名空间。
在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。
删除模式
定义基本表
在SQL中域的概念使用数据类型来实现,定义表的属性时需要指明其数据类型及长度
数据类型 | 含义 |
CHAR(n),CHARACTER(n) | 长度为n的定长字符串 |
VARCHAR(n), CHARACTERVARYING(n) | 最大长度为n的变长字符串 |
CLOB | 字符串大对象 |
BLOB | 二进制大对象 |
INT,INTEGER | 长整数(4字节) |
SMALLINT | 短整数(2字节) |
BIGINT | 大整数(8字节) |
NUMERIC(p,d) | 定点数,由p位数字(不包括符号、小数点)组成,小数后面有d位数字 |
DECIMAL(p, d), DEC(p, d) | 同NUMERIC |
REAL | 取决于机器精度的单精度浮点数 |
DOUBLE PRECISION | 取决于机器精度的双精度浮点数 |
FLOAT(n) | 可选精度的浮点数,精度至少为n位数字 |
BOOLEAN | 逻辑布尔量 |
DATE | 日期,包含年、月、日,格式为YYYY-MM-DD |
TIME | 时间,包含一日的时、分、秒,格式为HH:MM:SS |
TIMESTAMP | 时间戳类型 |
INTERVAL | 时间间隔类型 |
修改基本表
删除基本表
索引
建立索引的目的:加快查询速度
关系数据库管理系统中常见索引:
- 顺序文件上的索引
- B+树索引
- 散列(hash)索引
- 位图索引
建立索引
ch13 SQL数据查询(单表)
Sname | 2014-Sage |
李勇 | 1994 |
刘晨 | 1995 |
王敏 | 1996 |
张立 | 1995 |
指定DISTINCT关键词,去掉表中重复的行
确定范围:
确定集合:
字符匹配:
chap14 SQL数据查询(连接)
自然连接
自身连接
课程号Cno | 课程名Cname | 先行课Cpno | 学分Ccredit |
1 | 数据库 | 5 | 4 |
2 | 数学 | 2 | |
3 | 信息系统 | 1 | 4 |
4 | 操作系统 | 6 | 3 |
5 | 数据结构 | 7 | 4 |
6 | 数据处理 | 2 | |
7 | PASCAL语言 | 6 | 4 |
Cno | Pcno |
1 | 7 |
3 | 5 |
5 | 6 |
chap15 SQL数据查询(嵌套)
一个SELECT-FROM-WHERE语句称为一个查询块,然后我们可以在WHERE中嵌套
将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询
SELECT Sname /外层查询/父查询/
FROM Student
WHERE Sno IN
( SELECT Sno /内层查询/子查询/
FROM SC
WHERE Cno= ‘ 2 ‘);
子查询的限制
不能使用ORDER BY子句
有些嵌套查询可以用连接运算替代
谨慎使用嵌套查询
Sno | Sname | Sdept |
201215121 | 李勇 | CS |
201215122 | 刘晨 | CS |
SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname= ‘ 刘晨 ‘);
此查询为不相关子查询。
用自身连接完成[例 3.55]查询要求
SELECT S1.Sno, S1.Sname,S1.Sdept
FROM Student S1,Student S2
WHERE S1.Sdept = S2.Sdept AND
S2.Sname = ‘刘晨’;
在[例 3.55]中,由于一个学生只可能在一个系学习,则可以用 = 代替IN :
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept =
(SELECT Sdept
FROM Student
WHERE Sname= ‘刘晨’);
使用ANY或ALL谓词时必须同时使用比较运算
[例 3.58] 查询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄
SELECT Sname,Sage
FROM Student
WHERE Sage < ANY (SELECT Sage FROM Student WHERE Sdept= ‘ CS ‘) AND Sdept <> ‘CS ‘ ;
/*父查询块中的条件 */
一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查询等价替换
所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换
Part5 关系模式与范式(chap32-36)
关系模式由五部分组成,是一个五元组:
R(U, D, DOM, F)
◼ 关系名R是符号化的元组语义
◼ U为一组属性
◼ D为属性组U中的属性所来自的域
◼ DOM为属性到域的映射
◼ F为属性组U上的一组数据依赖
部分函数依赖:
第一范式:1NF
第一范式列不能再分。
一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(normalization)。
函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。这是一种基于语义范畴的概念,比如说“姓名->年龄”这一点就是基于“不允许同名人”的条件下成立的函数依赖
第二范式:2NF
若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
真棒棒!