第一讲
基本内容
- 为什么要学习数据库系统?
- 什么是数据库?
- 什么是数据库系统?
- 什么是数据库管理系统?
- 本课程学什么以及学到什么程度?
重点难点
- 一组概念的区分:数据库、数据库系统和数据库管理系统
- 熟悉表 的相关要素及术语
- 熟悉数据库系统的构成(工作环境)
- 了解数据库管理系统的功能:从用户角度和从系统角度
为什么要学习数据库系统?
传统社会:业务工作
信息社会:业务工作+计算机
什么是数据库?
数据库是电子化信息的集合。将信息规范化并使之电子化,形成电子信息“库”,以便利用计算机对这些信息进行快速有效的存储、检索、统计与管理
- 数据库:Database
- 数据库管理系统:Database Management System
- 数据库应用:DataBase Application
- 数据库管理员:DataBase Administrator
- 计算机基本系统
什么是数据库管理系统
管理数据库的叫做数据库管理系统。数据库管理系统包含的功能有哪些?
从用户来看:
- 数据库定义:定义数据库中Table的名称,标题(内涵的属性名称及对该属性值的计算)等
- 数据库操纵:向数据库的Table中增加/删除/更新数据对数据进行查询、检索、统计等
- 数据库控制:控制数据库中数据的使用—哪些用户可以使用,哪些不可以使用
- 数据库各种擦组偶的执行
从系统角度来看:
- 语言编译器
- 查询优化与实现程序
- 存储与索引程序
- 事务处理程序
- 各种控制程序
本课程学什么及学到什么程度
-
数据库系统基本概念(2讲4学时):理解后续内容的基础
----基本概念、课程内容及作用、数据库管理系统的标准结构、数据库技术的发展史与发展趋势。 -
关系模型与关系运算(3讲6学时):理解数据库语言的基础、正确实现数据库操作,尤其是检索操作的基础,抽象能力训练、集合思维与逻辑思维能力训练
—关系模型、关系运算:关系代数运算、关系元组演算、关系域演算 -
交互式SQL语言及其应用(含课堂训练,3讲6学时):标准数据库语言的语法及其交互式应用训练
—SQL的各种操作语句:重点是SQL的查询与统计语句,(子模式)视图的应用语句 -
数据库应用程序开发(2讲4学时):嵌入式数据库语言的应用语法及其应用训练;数据库应用程序开发
----嵌入式SQL语句,及其与高级语言语句的结合,变量传递、结果处理、错误陷阱处理等 -
数据建模与数据库设计(含课堂训练,3讲6学时):理解如何对应用系统进行需求分析和抽象,设计出正确的数据库模式
----数据库设计的基本概念;E-R图/IDEF1X图的基本思想及其设计结果的表达方法;数据库设计训练;数据库设计过程 -
数据库设计理论(3讲6学时)::理解数据库设计的基本理论,掌握数据库正确性分析方法
------数据库设计理论:数据依赖、关系范式与模式分解. -
数据库存储与索引技术(2讲4学时):掌握DMBS相关的实现技术I–数据库的基本存储与索引技术
----磁盘空间的管理与分配,数据组织方法、数据索引方法; -
数据库基本操作的实现算法(2讲4学时):掌握DBMS相关的实现技术II—数据库的基本实现算法
—数据库基本操作的实现算法,包括多路归并排序算法、并/交/差/积/选择/投影/连接等的实现算法、一趟算法、二趟算法、基于排序的算法、基于散列的算法等 -
数据库查询优化与查询实现(1讲2学时):掌握DBMS相关的实现技术III–数据库查询实现与查询优化算法
—数据库查询语句处理,数据库查询的语法优化,数据库查询的执行优化等 -
数据库事务处理(2讲2学时):掌握DBMS相关的实现技术IV–事务与并发控制,故障恢复
—数据库事务的概念,可串行性,并发控制;数据库备份、运行工日志与故障恢复 -
课程总结(1讲2学时)
—梳理课程的知识脉络,回顾课程中的重点概念和知识.
数据库抽象与演变
基本内容
- 数据库系统的标准结构?
- 数据模型?
- 数据库系统的演变与发展?
重点与难点
- 一组概念的区分:三级模式两层映像,物理独立性和逻辑独立性
- 一组概念的区分:数据-》模式-》数据模型
- 几种数据模型的差异:网状/层次模型–>关系模型–>OO数据模型
DBMS管理数据的三个层次
- 局部模式:某一用户能够看到与处理的数据,全局数据中的某一部分
- 逻辑概念层次:从全局角度理解/管理的数据含相互关联的数据
- 内部层次:存储在介质上的数据,含存储路径、存储方式、索引方式
三级模式
- 外模式:某一用户能够看到与处理的数据的结构的描述
- 概念模式:从全局角度理解/管理数据的结构描述,含相应的关联约束
- 内模式:存储在介质上的数据的结构描述,含存储路径,存储方式,索引方式等
两层映像
- E-C 外模式映射概念模式,从而支持实现数据概念视图向外部视图的转换,便于用户观察和使用
- C-I Mapping 将概念映射为内模式,从而支持实现数据概念视图向内部视图的转换,便于计算机进行存储和处理。
两个独立性
- 逻辑数据独立性:当概念模式变化时,可以不改变外部模式(只需要改变E-C Mapping),从而无需改变应用程序
- 物理数据独立性:当内部模式变化时,可以不改变概念模式(只需改变C-I Mapping),从而不改变外部模式
什么是数据模型?
数据模型是对模式本身结构的抽象,模式是对数据本身形式的抽象。
比如:
关系模型:所有的模式都可为抽象表(Table)的形式[数据结构],而每一个具体的模式都是拥有不同列名的具体的表。对这种表形式的数据有哪些[操作]和[约束]
三大经典数据模型
- 关系模型:表
- 层次模型:树
- 网状模型:图
简要发展史
- 第一个阶段:数据库技术探索阶段(59-67) Database
- 第二阶段:数据库技术确立阶段(65-75) 商用网状
- 第三阶段:数据库技术成熟阶段(76-80s) 标准化数据库系统结构模型
- 第四阶段:数据库技术深化发展阶段(85年以来)
由文件系统到数据库
优点:用户不必考虑文件存储的物理细节,解脱了对物理设备存取复杂性处理的负担
不足:数据与程序紧密结合,数据的组织及语义紧密依赖于处理该文件的应用程序,数据结构发生改变则更正修改应用程序,文件之间无练习,文件的记录之间无联系,共享性差,冗余度大,不一致高。
层次模型数据库、网状模型数据库到关系数据库
层次模型与网状模型数据库:
- 数据之间的关联关系由复杂的指针系统来维系,结构描述复杂
- 数据检索操作依赖于由指针系统指示的路径
- 逐一记录的操作,不能有效支持记录集合的操作。
由关系数据库到对象关系数据库,面向对象数据库
关系数据库:
- 按行按列形式组织数据:关系的第1范式
- 数据项的不可再分特性
- 关系运算:关系代数、元组演算、域演算—》标准SQL
- 关系数据库设计理论
对象-关系数据库:
- 可有效支持不满足关系第一范式的数据项
- 以对象来封装需分解的数据项
- 行对象与列对象:聚集对象与结构对象
面向对象数据库
- 面向对象技术(O-O)与集合/聚集操作技术(SQL)的结合
- 支持复杂的数据类型,数据封装与抽象数据结构
- 支持面向对象的一些特性:类、继承、封装、多态
XML数据库
- 是数据库的另一种形式,被称为半结构化数据库
- 数据与数据的语义 合并在一起进行存储和处理
- 面向数据交换而提出,在互联网世界得到广泛应用
回顾本讲学习了什么
第三讲 关系模型之基本概念
基本内容
- 关系模型概述?
- 什么是关系?
- 关系模型中的完整性约束
重点与难点
- 一组概念的区分:围绕关系的相关概念,如域,笛卡尔积,关系,关系模式,关键字/键/码,外码/外键,主码/主键,主属性/非主属性
- 三个完整性:实体完整性,参照完整性和用户自定义的完整性
关系模型的三要素
- 基本结构
- 基本操作(并、差、广义积、选择、投影、交、连接、除)
- 完整性约束:实体完整性、参照完整性和用户自定义的完整性
关系模式与关系
- 同一关系模式下,可有很多的关系
- 关系模式是关系的结构,关系是关系模式在某一时刻的数据
- 关系模式是稳定的,而关系是某一时刻的值,是随时间可能变化的
关系的特性
- 列是同质:即每一列中的分量来自同一域,是同一类型的数据
- 不同的列可来自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
外码
- 关系R中的一个属性组,它不是R的候选码,但它与另一个关系S的候选码相对应,则称这个属性组为R的外码或外键
参照完整性
如果关系R1的外码Fk与关系R2的主码Pk相对应,则R1中的每一个元组的Fk值或者等于R2中某个元组的Pk值,或者为空值
DBMS对关系完整性的支持
- 它使用户可以自行定义有关的完整性约束条件
- 当有更新操作发生时,DBMS将自动按照完整性约束条件检验更新操作的正确性,即是否符合永辉自定义的完整性。
本讲回顾
第四讲:关系代数
基本内容
- 关系代数之基本操作
- 关系代数之扩展操作
- 关系代数之组合与应用训练
- 关系代数之复杂扩展操作(选学)
重点与难点
- 关系代数基本操作:并、差、积、选择、投影
- 关系代数扩展操作:交、 θ − \theta- θ−连接、自然连接
- 关系代数复杂扩展操作:除、外连接
- 书写关系代数的基本思维训练:一个集合,施加
一个操作得到一个集合,依次施加关系代数操作,进而得到所需结果“以集合为中心”
.
集合操作
纯关系操作
并
- 定义:假设关系R和关系S是并相容的,则关系R与关系S的并运算结果是一个关系,记作:R ∪ \cup ∪S,它由或者出现在关系R中,或者出现S中的构成。
差
- 定义:假设关系R和关系S是并相容的,则关系R与关系S的差运算结果也是一个关系,记作:R-S,它由出现在关系R中但不出现在关系S中的元组构成。
- 汉语中的“是…但不含…”通常意义是差运算的要求
- 首先要准确理解汉语的查询要求,然后再找到正确的操作
广义笛卡尔积
- 关系R(< a 1 , a 2 , . . . . , a n a_1,a_2,....,a_n a1,a2,....,an>)与关系S(< b 1 , b 2 , . . . , b m b_1,b_2,...,b_m b1,b2,...,bm>)的广义笛卡尔积(简称广义积,或积或笛卡尔积运算结果也是一个关系,记作:R × × ×,它由关系R中的元组与关系S的元组进行所有可能的拼接(或串接)构成…
选择
- 定义:给定一个关系R,同时给定一个选择的条件condition(简记con),选择运算结果也是一个关系,记作 σ c o n ( R ) \sigma_{con}(R) σcon(R),它从关系R中选择出满足给定条件condition的元组构成
投影
- 定义:给定一个关系R,投影运算结果也是一个关系,记作 Π A R \Pi_{A}R ΠAR,它从关系R中选出属性包含在A中的列构成.
- 投影操作从给定关系中选出某些列组成新的关系,而选择的操作是从给定关系中选出某些行组成新的关系
第五讲–关系代数之扩展操作
交
- 假设关系R和关系S是并相容的,则关系R与关系S的交运算结果也是一个关系,记作:R ∩ S \cap{S} ∩S,它由同时出现在关系R和关系S中的元组构成。
θ − 连接 \theta-{连接} θ−连接
- 投影与选择操作只是对单个关系(表)进行操作,而实际应用中往往涉及多个表之间的操作,这既需要 θ − 连接 \theta-{连接} θ−连接
- 定义:给定关系R和关系S,R与S的 θ \theta θ连接运算结果也是一个关系,记作R ⋈ A θ B S \Join_{A\theta{B}}S ⋈AθBS,它由关系R和关系S的笛卡尔积中,选取R中属性A与S中属性B之间满足 θ \theta θ条件的元构成。
自然连接
- 定义:给定关系R和关系S,R与S的自然连接运算结果也是一个关系,记作R ⋈ \Join ⋈,它由关系R和关系S的笛卡尔积中选取相同属性组B上值相等的元组所构成。
小结
关系代数操作之组合与应用训练
例1:查询学习课程号为002的学生学号和成绩
Π S # , S c o r e ( σ C # = " 002 " ( S C ) ) \Pi_{S\#,Score}(\sigma_{C\#="002"(SC)}) ΠS#,Score(σC#="002"(SC))
例2:查询学习课程号为001的学生学号、姓名
Π S # , S n a m e ( σ C # = " 001 " ( S t u d e n t ⋈ S C ) ) \Pi_{S\#,Sname}(\sigma_{C\#="001"(Student\Join{SC})}) ΠS#,Sname(σC#="001"(Student⋈SC))
例3 查询学习课程名称为数据结构的学生学号、姓名和这门课程的成绩.
Π S # , S n a m e ( σ C n a m e = " 数据结构 " ( S t u d e n t ⋈ S C ⋈ C o u r s e ) ) \Pi_{S\#,Sname}(\sigma_{Cname="数据结构"}(Student\Join{SC}\Join{Course})) ΠS#,Sname(σCname="数据结构"(Student⋈SC⋈Course))
外连接
- 两个关系R与S进行连接时,如果关系R(或S)中的元组在S(或R)中找不到相匹配的元组,则为了避免该元组信息丢失,从而将该元组与S(或R)中假定存在的全为空值的元组形成连接,放置在结果关系中,这种连接称之为外连接.
小结
- Select: Π \Pi Π
- From: σ \sigma σ
- Where: × \times ×
第五讲–关系模型之关系演算
基本内容
- 关系演算之关系元组演算
- 关系演算之关系域演算
- 关系演算之安全性
- 关于三种关系运算的一些观点
重点与难点
- 关系元组演算公式的递归定义;关系域演算公式的递归定义
- 关系元组演算公式:与 ∧ \land ∧,或 ∨ \vee ∨, ¬ \neg ¬非,存在量词 ∃ \exists ∃,全称量词 ∀ \forall ∀
- 用关系元组演算公式表达查询的思维训练
- 用QBE语言表达查询的思维训练
- 关系元组演算、域演算和关系代数在表达查询方面的思维差异
关系演算公式之与、或、非运算符
1.检索出年龄小于20岁并且是男同学的所有学生。
{ t ∣ t ∈ S t u d e n t ∧ t [ S a g e ] < 20 ∧ t [ S e x ] = ′ 男 ′ } \{t|t\in{Student}\land{t[Sage]<20}\land{t[Sex]='男'}\} {t∣t∈Student∧t[Sage]<20∧t[Sex]=′男′}
2、检索出年龄小于20岁或者03系的所有男生
{ t ∣ t ∈ S t u d e n t ∧ ( t [ S a g e ] < 20 ∨ t [ D # ] = ′ 0 3 ′ ) ∧ t [ S e x ] = ′ 男 ′ } \{t|t\in{Student}\land({t[Sage]<20}\vee{t[D\#]='03'})\land{t[Sex]='男'}\} {t∣t∈Student∧(t[Sage]<20∨t[D#]=′03′)∧t[Sex]=′男′}
3、检索出不是03系的所有学生
{ t ∣ t ∈ S t u d e n t ∧ ¬ ( t [ S a g e ] < 20 ∧ t [ S e x ] = ′ 男 ′ ) } \{t|t\in{Student}\land{\neg{(t[Sage]<20\land{t[Sex]='男'})}}\} {t∣t∈Student∧¬(t[Sage]<20∧t[Sex]=′男′)}
4.检索计算机系的所有同学
{ t ∣ t ∈ S t u d e n t ∧ ∃ ( u ∈ D e p t ) ( t [ D # ] = u [ D # ] ∧ u [ D n a m e ] = ′ 计算 机 ′ ) } \{t|t\in{Student}\land{\exists(u\in{Dept)(t[D\#]=u[D\#]\land{u[Dname]='计算机'})}}\} {t∣t∈Student∧∃(u∈Dept)(t[D#]=u[D#]∧u[Dname]=′计算机′)}
5. 求没学过李明讲授任一门课程的学生姓名(全没学过)
π S n a m e ( S t u d e n t ) − π S n a m e ( σ T n a m e = ′ 李 明 ′ ( S t u d e n t ⋈ S c ⋈ C o u r s e ) ) \pi_{Sname}(Student)-\pi_{Sname}(\sigma_{Tname='李明'}(Student\Join{Sc}\Join{Course})) πSname(Student)−πSname(σTname=′李明′(Student⋈Sc⋈Course))
6.求至少学过一门李明老师讲授课程的学生姓名(至少学过一门)
π S n a m e ( σ T n a m e = ′ 李 明 ′ ( S t u d e n t ⋈ S c ⋈ C o u r s e ) ) \pi_{Sname}(\sigma_{Tname='李明'}(Student\Join{Sc}\Join{Course})) πSname(σTname=′李明′(Student⋈Sc⋈Course))
关系元组演算之应用训练将关系代数转换为元组演算
关系域演算公式
关系域演算公式的基本形式: { < x 1 , x 2 , . . . . , x n > ∣ P ( x 1 , x 2 , . . . , x n ) } \{<x_1,x_2,....,x_n>|P(x_1,x_2,...,x_n)\} {<x1,x2,....,xn>∣P(x1,x2,...,xn)}。其中, x i x_i xi代表域变量或常量,P为以 x i x_i xi为变量的公式.公式P可以递归地进行构造:
- 如果P是公式,那么 ¬ P \neg{P} ¬P也是公式
- 如果P1,P2是公式,则 P 1 ∧ P 2 , P 1 ∨ P 2 P_1\land{P_2},P_1\vee{P_2} P1∧P2,P1∨P2
- 如果P是公式,x是域变量,则 ∃ ( x ) ( P ( x ) ) \exists{(x)(P(x))} ∃(x)(P(x))和 ∀ ( x ) ( P ( x ) ) \forall{(x)(P(x))} ∀(x)(P(x))也是公式.
- 需要时可加括弧
- 上述运算符的优先次序自高至低为:
关系域演算与关系元组演算的比较
元组演算的基本形式:{t|P(t)}
域演算的基本形式:{ < x 1 , x 2 , . . . , x n > ∣ P ( x 1 , x 2 , . . . , x n ) <x_1,x_2,...,x_n>|P(x_1,x_2,...,x_n) <x1,x2,...,xn>∣P(x1,x2,...,xn)}
- 元组演算是以元组为变量,以元组为基本处理单位,先找到元组,然后找到元组分量,进行谓词判断;域演算是以域变量为基本处理单位,先有域变量,然后再判断由这些域变量组成的元组是否存在或是否满足谓词判断。
- 公式的运算符( ∧ ( 与 ) 、 ∨ ( 或 ) 、 ¬ ( 非 ) 、 ∃ ( 全称量词 ) 和 ∀ ( 存在量词 ) \land(与)、\vee{(或)}、\neg{(非)}、\exists{(全称量词)}和\forall{(存在量词)} ∧(与)、∨(或)、¬(非)、∃(全称量词)和∀(存在量词))是相同的,只是其中的变量不同
- 元组演算和域演算可以等价互换。
基于关系域演算的QBE语言
关系域演算语言QBE
域演算语言QBE
- QBE:Query By Example
- 1975年由M.M.Zloof提出,1978年在IBM370上实现
- 特点:操作独特,基于屏幕表格的查询语言,不用书写复杂的公式,只需将条件填在表格中即可。
- 是一种高度非过程化的查询语言
- 特别适合终端用户的使用
QBE操作框架由四个部分构成
- 关系名区:用于书写欲
第n讲
基本内容
- SQL语言概述?
- SQL语言之DDL-定义数据库
- SQL语言之DML-操纵数据库
重点与难点
- SQL-DDL的基本语句:CREATE DATABASE,CREATE TABLE
- SQL-DML的基本语句:INSERT,DELETE,UPDATE,SELECT
- SQL-SELECT语句的训练:正确表达各种查询需求
SQL语言提出和发展
1974年,有Boycel和Chamber提出
1975-1979年,由IBM的San Jose研究室在System R上首次实现,称为Sequel --》SQL
1986年由ANSI/ISO推出SQL标准:SQL-86
1992年ANSI/ISO推出SQL标准:SQL-89
1992年进一步推出了SQL标准:SQL-92,又称为SQL2
是SQL-89的超集
增加了新特性,如新数据雷兴国,更丰富数据操作,更强完整性支持等
原SQL-89被称为entry-SQL,扩展的被称为Intermediate和Full级
理解查询需求
利用SQL语言建立数据库
学生选课数据库SCT
学生表Student
Create Table Student(S# char(8) not null,Sname char(10),Sex char(2),
Sage integer,D# char(2),Sclass char(6));