一、数据库系统概论
(一)数据库的基本概念
1、数据(Data)
定义:数据库中存储的基本对象。是描述事物的符号记录
数据的种类:数字、文字、图形、图像、音频、视频、学生的档案记录、订单情况等等。
数据的含义即数据的语义,数据与其语义是不可分的,比如93可能是某人的成绩、某人的体重、某人的年纪等等。
数据是有结构的:记录是计算机存储数据的一种格式或一种方法
2、数据库(Database,DB)
(1)定义:长期存储在计算机内、有组织的、可共享的大量数据的集合,即”数据“的”仓库“,数据库系统安装完毕后即可创建数据库。数据库由表、关系以及操作对象组成,安装在操作系统之上,作用是存储数据,管理数据。
(2)数据库基本特征:
- 数据按一定的数据模型组织、描述和储存
- 可为各种用户共享、冗余度较小、易扩展
- 数据独立性较高
(3)数据库分类
关系型数据库:
- MySQL, Oracle, Sql Server, DB2, SQLlite
- 通过表和表之间,行和列之间的关系存储数据,比如考勤表,工资表
非关系型数据库:(NoSQL) Not Only
- Redis,MongDB
- 非关系型数据库,对象存储,通过对象的自身的属性来决定
3、数据库管理系统(DataBase manage System,DBMS)
(1)定义:数据库的管理软件,科学有效的管理我们的数据。维护和获取数据;
(2)主要功能
数据定义功能
- 提供数据定义语言
- 定义数据库中的数据对象
数据组织、存储和管理
- 分类组织、存储和管理各种数据
- 确定数据在存储级别上的结构和存取方式
- 实现数据之间的联系
- 提供多种存取方法提高存取效率
数据操纵功能
- 提供数据操纵语言(DML)
- 实现对数据库的基本操作(查询、插入、删除和修改)
数据库的事务管理和运行管理
- 数据的安全性、完整性、多用户对数据的并发使用
- 发生故障后的系统恢复数据库
- 由数据库管理系统统一管理和控制,保证事务正确运行
数据库的建立和维护功能
- 提供实用程序/工具,完成数据库数据批量装载,数据库转储,介质故障恢复,数据库的重组织和性能监视等
其他功能
- 数据库管理系统与网络中其它软件系统的通信
- 数据库管理系统之间的数据转换
- 异构数据库之间的互访和互操作
4、数据库系统(DataBase System,DBS)
(1)定义:指在计算机系统中引入数据库后的系统构成。
(2)数据库系统的构成
- 数据库
- 数据库管理系统(及其应用开发工具)
- 应用程序
- 数据库管理员(DataBase Administrator,DBA)
(3)数据库系统的特性
- 数据结构化
- 数据的共享性高,冗余度低且易扩充
- 数据独立性高
- 数据由数据库管理系统统一管理和控制
- 数据库管理系统提供的数据控制功能:保护数据以防止不合法的使用造成数据的泄密和破坏
- 数据的安全性(Security)保护:保证数据的正确性、有效性和相容性
- 数据的完整性(Integrity)检查:对多用户的并发操作加以控制和协调,防止相互干扰而得到错误的结果
- 并发控制(Concurrency Control):将数据库从错误状态恢复到某一已知的正确状态
(二)数据管理
1、定义:对数据进行分类、组织、编码、存储、检索和维护
2、发展阶段:人工管理 阶段、文件系统阶段、数据库系统阶段
人工管理阶段 | 文件系统阶段 | 数据库系统阶段 | ||
背景 | 应用背景 | 科学计算 | 科学计算、管理 | 大规模数据管理 |
硬件背景 | 无直接存取存储设备 | 磁盘、磁鼓 | 大容量磁盘、磁盘阵列 | |
软件背景 | 无操作系统 | 有文件系统 | 有数据库管理系统 | |
处理方式 | 批处理 | 联机实时处理,批处理 | 联机实时处理,分布处理,批处理 | |
特点 | 数据的管理者 | 用户(程序员) | 文件系统 | 数据库管理系统 |
数据面向的对象 | 某一应用程序 | 某一应用 | 现实世界(一个企业、跨国公司) | |
数据的共享程度 | 无共享,冗余度极大 | 共享性差,冗余度大 | 共享性高,冗余度小 | |
数据的独立性 | 不独立,完全依赖于程序 | 独立性差 | 具有高度的物理独立性和一定的逻辑独立性 | |
数据的结构化 | 无结构 | 记录内有结构,整体无结构 | 整体结构化,用数据模型描述 | |
数据控制能力 | 应用程序自己控制 | 应用程序自己控制 | 由DBMS提供数据安全性、完整性、并发控制和恢复能力 |
二、关系模型
(一)关系完整型约束
实体完整性和参照完整性是关系模型必须满足的完整性约束条件称为关系的两个不变性,应该由关系系统自动支持。用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。
1、实体完整性
- 关系的主属性不能取空值
- “空值”就是”不知道“或”不存在“或”无意义“的值
2、参照完整性
若属性(或属性组)F是基本关系R的外码。它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
- 或者取空值(F的每个属性值均为空值)
- 或者等于S中某个元组的主码值
3、用户定义的完整性
针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
(二)关系代数
一种抽象的查询语言,它用对关系的运算来表达查询
1、传统的集合运算
(1)并
- R和S
- 具有相同的目n(即两个关系都有n个属性)
- 相应的属性取自同一个域
- R U S
- 仍为n目关系,由属于R或属于S的元组组成
R U S = {t | t ∈ R ⋁ t ∈S }
(2)差
- R和S
- 具有相同的目n
- 相应的属性取自同一个域
- R - S
- 仍为n目关系,由属于R而不属于S的所有元组组成
R - S = {t | t∈R ∧ t ∉ S}
(3)交
- R和S
- 具有相同的目n
- 相应的属性取自同一个域
- R⋂S
- 仍为n目关系,由既属于R又属于S的元组组成
R⋂S = { t | t ∈ R ∧ t ∈ S}
R⋂S = R - (R-S)
(4)笛卡尔积
- R:n目关系,k1个元组;S:m目关系,k2个元组
- R × S
- 列:(n+m)列元组的集合
- 元组的前n列是关系R的一个元组
- 后m列是关系S的一个元组
- 行:k1 × k2个元组
- 列:(n+m)列元组的集合
2、关系特有操作
(1)选择含义
- 在关系R中选择满足给定条件的诸元组
- F:选择条件,是一个逻辑表达式,取值为“真”或“假”
- 基本形式为:X1 θ Y1
- θ表示比较运算符,它可以是> , ≥ , < , ≤ , =或<>
(2)投影
- 从R中选择出若干属性列组成新的关系
- 投影操作主要是从列的角度进行运算
- 投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)
(3)连接
- 从两个关系的笛卡尔积中选取属性间满足一定条件的元组
- A和B:分别为R和S上度数相等且可比的属性组
- θ:比较运算符
- 连接运算从R和S的广义笛卡尔积R×S中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系θ 的元组
- 两类常用的连接运算
- 等值连接
- θ 为 “=” 的连接运算称为等值连接
- 从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组,即等值连接为:
- 等值连接
-
- 自然连接
- 自然连接是一种特殊的等值连接
- 两个关系中进行比较的分量必须是相同的属性组
- 在结果中把重复的属性列去掉
- 自然连接是一种特殊的等值连接
- 自然连接
- 自然连接的含义
- R和S具有相同的属性组B
(4)除
给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。
- R中的Y与S中的Y出自相同的域集。
- R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:
元组在X上分量值x的象集Yx包含S在Y上投影的集合,记作:
(三)关系演算
关系演算:以数理逻辑中的谓词演算为基础
按为此变元不同进行分类
1、元组关系演算
说明:是以元组变量作为谓词变元的基本对象
元组关系演算语言ALPHA
(1)简单检索
GET 工作空间名 (表达式1)
【例1】:查询所有被选修的课程号码 GET W (SC.Cno)
(2)限定的检索
GET 工作空间名 (表达式1):条件
【例2】查询信息系(IS)中年龄小于20岁的学生的学号和年龄
GET W(Student.Sno, Student.Sage):
Student.Sdept = 'IS' ∧Student.Sage < 20
(3)带排序的检索
GET 工作空间名 (表达式1)[:条件]
DOWN | UP 表达式2
【例3】查询计算机科学系(CS)学生的学号、年龄,结果按年龄降序排序
GET W (Student.Sno, Student.Sage):
Student.Sdept = 'CS' DOWN Student.Sage
(4)带定额的检索
GET 工作空间名 (定额)(表达式1)[:条件] [ DOWN | UP 表达式2]
【例4】取出一个信息系学生的学号
GET W (1)(Student.Sno): Student.Sdept = 'IS'
【例5】查询信息系年龄最大的三个学生的学号及其年龄,结果按年龄降序排序
GET W (3)(Student.Sno, Student.Sage):
Student.Sdept = 'IS' DOWN Student.Sage
(5)元组关系演算:以元组变量作为谓词变元的基本对象
元组变量:表示可以在某一关系范围内变化,也称为范围变量,用于讲话关系名
定义元组变量:
- 格式:RANGE 关系名 变量名
- 一个关系可以设多个元组变量
(6)用存在量词的检索
【例6】查询选修2号课程的学生名字
RANGE SC X
GET W (Student.Sname):
∃X(X.Sno = Student.Sno ∧ X.Cno='2')
【例7】查询选修了这样课程的学生学号,其直接先行课是6号课程
RANGE Course CX
GET W (SC.Sno):
∃CX(CX.Cno=SC.Cno ∧CX.Pcno='6')
(7)带有多个关系的表达式的检索
RANGE SC SCX
GET W (Student.Sname, Course.Cname):
∃SCX(SCX.Grade ≥ 90∧SCX.Sno = Student.Sno∧Course.Cno=SCX.Cno)
(8)用量词的检索
【例8】查询不选1号课程的学生名字
用存在量词表示:
RANGE SC SCX
GET W (Student.Sname): ¬∃SCX(SCX.Sno = Student.Sno ∧ SCX.Cno='1')
RANGE SC SCX
GET W (Student.Sname): ∀SCX (SCX.Sno≠Student.Sno ∨SCX.Cno≠'1')
(9)用两种量词的检索
【例9】查询选修了全部课程的学生姓名
RANGE Course CX
SC SCX
GET W (Student.Sname): ∀CX ∃SCX(SCX.Sno=Student.Sno∧SCX.Cno=CX.Cno)
(10)用蕴涵(Implication)的检索
【例10】查询最少选修了S3学生所选课程的学生学号
RANGE Course CX
SC SCX
SC SCY
GET W (Student.Sno):∀CX(∃SCX(SCX.Sno='S3'∧SCX.Cno=CX.Cno)
(∃SCY(SCY.Sno=Student.Sno∧SCY.Cno=CX.Cno))
说明:
蕴涵:A B AB 后件包含前件,则蕴涵T;后件不包含前件,则蕴涵F
F T T 前提为F
F F T
T T T 前提为T
T F F
(11)聚集函数
函数名 | 功能 |
COUNT | 对元组计数 |
TOTAL | 求总和 |
MAX | 求最大值 |
MIN | 求最小值 |
AVG | 求平均值 |
【例11】查询学生所在系的数目
GET W (COUNT (Student.Sdept)
COUNT函数在计数时会自动排除重复值
【例12】查询信息系学生的平均年龄
GET W (AVG(Student.Sage):Student.Sdept='IS')
2、域关系演算
说明:以域变量作为谓词变元的基本对象
域关系演算语言QBE