当前位置: 首页 > news >正文

数据库系统概论笔记


数据库系统概论(王珊 萨师煊 编著)笔记。

第一章 绪论

1.数据库系统概述

1.1数据库的4个基本概念

  • 数据:描述事物的符号记录称为数据。数据的含义称为数据的语义,数据与其语义是不可分的。
  • 数据库:长期存储在计算机内、有组织的、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
  • 数据库管理系统(DBMS):科学组织和存储数据,高效获取和维护数据。主要有以下功能:
    • 数据定义功能
    • 数据组织、存储和管理
    • 数据操纵功能
    • 数据库的事务管理和运行管理
    • 数据库的建立和维护功能
    • 其他功能
  • 数据库系统(DBS):由数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统。

1.2数据管理技术的产生和发展

  • 人工管理阶段->文件系统阶段->数据库系统阶段。
  • 从文件系统到数据库系统标志着数据管理技术的飞跃。

1.3数据库系统的特点

  • 数据结构化:数据库系统实现整体数据的结构化。数据库中的数据不仅针对一个应用,而是面向整个组织或企业。
  • 数据的共享性高,冗余性低且易扩充。
  • 数据独立性高:数据独立性包括物理独立性和逻辑独立性。
    • 物理独立性是指用户的应用程序与数据库中的物理存储是相互独立的。
    • 逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的。
  • 数据由数据库管理系统统一管理和控制:数据库的共享是并发的,为了保证数据一致性,数据库管理系统还必须提供以下几方面的数据控制功能:
    • 数据的安全性保护:防止不合法使用造成的数据泄密和破坏。
    • 数据的完整性检查:控制数据的正确性,有效性和相容性。
    • 并发控制
    • 数据库恢复

2.数据模型

数据模型是数据库系统的核心和基础。包含两类,第一类是概念模型,第二类是逻辑模型和物理模型。

2.1概念模型

  • 概念模型:对信息建模。概念模型是认识抽象到数据库管理系统支持的数据模型的一个中间层次。以下是概念模型中的一些术语:
    • 实体:客观存在并可相互区别的实物称为实体。
    • 属性:实体所具有的某一特性。
    • 码(key):唯一标识实体的属性集称为码。
    • 实体型:用实体名和属性名集合来抽象和刻画同类实体。例如:学生(学号,姓名,性别,院系)。
    • 实体集:同一类型实体的集合称为实体集。
    • 联系:实体之间的联系通常是指不同实体集之间的联系。有一对一,一对多和多对多等多种类型。
  • 概念模型的一种表示方法:实体-联系方法(E-R方法),见第7章。

2.2数据模型的组成要素

  • 数据结构:描述数据库的组成对象以及对象之间的联系。
  • 数据操作:对数据库中各种对象的实例允许执行的操作的合集,包括操作及有关的操作规则。
  • 完整性约束:一组完整性规则。

2.3常用的数据模型

层次模型

  • 数据库中满足下面两个条件的基本层次联系的集合为层次模型:
    • 有且只有一个结点没有双亲结点,称为根结点。
    • 根以外的其他结点只有一个双亲结点。
  • 数据操纵主要为查询,插入,删除,更新。操作要满足层次模型的完整性约束条件。
  • 层次模型的优点:
    • 数据结构简单清晰。
    • 查询效率高(因为联系用有向边表示)。
    • 提供了良好的完整性支持。
  • 层次模型的缺点:
    • 现实中很多联系是非层次性的。
    • 一个结点有多个双亲结点,就只能引入冗余数据,应用程序编写复杂。
    • 查询子女结点必须通过双亲结点。
    • 结构严密,层次命令趋于程序化。

网状模型

  • 数据库中满足下面两个条件的基本层次联系的集合为网状模型:
    • 允许一个以上的结点无双亲。
    • 一个结点可以有多于一个的双亲。
  • 具体的网状数据库系统对数据操纵都加了一些限制,提供了一定的完整性约束。
  • 网状模型的优点:
    • 能够更为直接的描述现实世界。
    • 具有良好的性能,存储效率较高。
  • 网状模型的缺点:
    • 结构比较复杂,不利于最终用户掌握。
    • DDL,DML复杂,并且要嵌入一种高级语言中,不容易掌握和使用。
    • 记录之间的联系通过存取路径实现,访问数据时必须选择适当的存取路径,用户必须了解系统结构的细节。

*关系模型

关系模型由一组关系组成,每个关系的数据结构是一张规范化的二维表。

  • 关系模型的术语:
    • 关系:对应一张表
    • 元组:表中的一行
    • 属性:列
    • 码:唯一确定一个元组
    • 域:属性的取值范围
    • 分量:元组中的一个属性值
    • 关系模式:对关系的描述一般为:关系名(属性1,属性2…)
  • 关系模型要求关系必须是规范化的,每一个分量必须是一个不可分的数据项。
  • 关系模型的优点:
    • 建立在严格数学概念上。
    • 概念单一,结构简单清晰。
    • 关系模型存取路径透明,有更高的数据独立性,更好的安全保密性。

其他相关内容见第二章。

*3.数据库系统的结构(三级模式结构)

  • 模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。数据库管理系统提供模式数据定义语言(DDL)来严格定义模式。
  • 外模式:数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
  • 内模式:数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。
  • 为了实现以上三个抽象层次的联系和转换,数据库管理系统在三级模式之间提供了两层映像:外模式/模式映像和模式/内模式映像。
    • 外模式/模式映像:定义了外模式与模式之间的对应关系。
    • 模式/内模式映像:定义了数据全局逻辑结构和存储结构之间的关系。
  • 数据库模式即全局逻辑结构是数据库的中心与关键,独立于数据库的其他层次。
  • 当模式改变时,修改映像使外模式不变,这保证了数据与程序的逻辑独立性。当存储结构(内模式)改变时,修改映像使模式保持不变,这保证了数据与程序的物理独立性

第二章 关系数据库

1.关系数据结构及形式化定义

1.1关系

以下是集合论角度下关系数据结构的形式化定义。

  • 域:一组具有相同数据类型的值的集合。
  • 笛卡尔积:域上的一种集合运算。
    • 笛卡尔积中的每一个元素叫做一个n元组,元组中每个值叫做一个分量。
    • 一个域允许的不同取值个数称为这个域的基数。
  • 域D1,D2,D3…的子集叫做在域D1,D2…上的关系,表示为R(D1,D2,…,D3),R表示关系的名字,n是关系的目或度。n=1时为单元关系,n=2时为二元关系。
  • 若关系中的某一属性组的值能唯一标识一个元组,而其子集不能,则该属性组为候选码。
  • 若一个关系有多个候选码,则选定其中一个为主码。
  • 候选码的诸属性称为主属性。其他属性为非主属性。
  • 最极端的情况下,所有属性为关系模式的候选码,称为全码。
  • 关系可以有三种类型:基本关系,查询表和视图表。
  • 基本关系具有以下六条性质:
    • 列是同质的。
    • 不同的列可出自同一个域。
    • 列可交换。
    • 元组候选码不能取相同值。
    • 行可交换。
    • 分量必须是原子的,每一个分量必须是不可分的数据项。

1.2关系模式

关系的描述称为关系模式。可以形式化表示为R(U,D,DOM,F)。通常简记为R(U)。

  • R:关系名
  • U:属性名集合
  • DOM:属性来自的域
  • F:属性间数据的依赖关系集合

2.关系操作

2.1基本的关系操作

五种基本的关系操作:选择、投影、并、差、笛卡尔积。其他操作如连接,除,交可用基本操作定义和导出。

2.2关系数据语言分类

  • 关系代数语言(ISBL)
  • 关系演算语言
    • 元组关系演算语言(ALPHA)
    • 域关系演算语言(QBE)
  • 具有关系代数和关系演算双重特点的语言(SQL)

3.关系的完整性

  • 实体完整性:主属性不能取空值
  • 参照完整性:F是基本关系的一个或一组属性,但不是R的码,Ks是基本关系S的主码,如果F与Ks对应,F是R的外码,并称R为参照关系,S为被参照关系。R和S不一定不同。
    • 一个关系的属性为另一个关系的主码,则这个属性是这个关系的外码,这个关系为参照关系。
    • 参照完整性规则:外码的取值或者为空,或者为被参照关系的某个元组的主码值。
  • 用户定义的完整性

4.关系代数

第三章 关系数据库标准语言SQL

1.数据定义

操作对象创建删除修改
模式CREATE SCHEMADROP SCHEMA
CREATE TABLEDROP TABLEALTER TABLE
视图CREATE VIEWDROP VIEW
索引CREATE INDEXDROP INDEXALTER INDEX

1.1模式定义和删除

模式定义语句如下:

CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>]

删除模式语句如下:

DROP SCHEMA <模式名><CASCADE|RESTRICT>

1.2基本表的定义和修改

表的定义

定义基本表:

CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件])

例:

/*建立一个学生表*/
CREATE TABLE Student(
	Sno CHAR(9)PRIMARY KEY,
    Sname CHAR(20)UNIQUE,
    Ssex CHAR(2),
    Sage SMALLINT,
    Sdept CHAR(20)
);
/*建立一个课程表*/
CREATE TABLE Course(
	Cno CHAR(4) PRIMARY KEY,
    Cname CHAR(40) NOT NULL,
    Cpno CHAR(4),
    Ccredit SMALLINT,
    /*表级完整性约束条件*/
    FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);
/*建立学生选课表SC*/
CREATE TABLE SC(
	Sno CHAR(9),
    Cno CHAR(4),
    Grade SMALLINT,
    PRIMARY KEY(Sno,Cno),
    FOREIGN KEY(Sno) REFERENCES Student(Sno),
    FOREIGN KEY(Cno) REFERENCES Cource(Cno)
)

表中的每一个属性都来自一个域,域的概念用数据类型实现,以下是常用的几种数据类型:

数据类型含义
CHAR(N),CHARACTER(N)定长字符串
VARCHAR(N),CHARACTERVARING(N)最大长度为n的字符串
CLOB字符串大对象
BLOB二进制大对象
INT,INTEGER长整数
SMALLINT短整数
BIGINT大整数
NUMERIC(P,D)定点数,p位数,小数点后有d位
DECIMAL(P,D),DEC(P,D)同上
REAL单精度浮点
DOUBLE PRECISION双精度浮点
FLOAT(N)可选精度浮点
BOOLEAN逻辑布尔量
DATE日期,YYYY-MM-DD
TIME时间,HH:MM:SS
TIMESTAMP时间戳类型
INTERVAL时间间隔类型

每一个表都属于一种模式,使用以下方法可以定义基本表所属的模式:

CREATE TABLE TEST.Student(...);

表的修改

修改基本表的格式为:

ALTER TABLE<表名>
[ADD[COLUMN]<新列名><数据类型>[完整性约束]]
[ADD<表级完整性约束>]
[DROP [COLUMN]<列名>[CASCADE|RESTRICT]]
[DROP CONSTRAINT<完整性约束名>[RESTRICT|CASCADE]]
[ALTER COLUMN<列名><数据类型>];

例:

ALTER TABLE Student ADD S_entrance DATE;
ALTER TABLE Student ALTER COLUMN Sage INT;
ALTER TABLE Course ADD UNIQUE(Cname);

1.3建立索引

建立索引是加快查询速度的有效手段。建立索引的一般格式为:

CREATE [UNIQUE][CLUSTER] INDEX<索引名>
ON <表名>(<列名>[<次序>][,<列名>[次序]]...)
  • UNIQUE表示索引的每一个索引值只对应唯一的数据记录。
  • CLUSTER表示聚簇索引。
  • 次序可选为ASC升序或DESC降序,默认为升序ASC
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Cousno ON Cource(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

2.数据查询

基本查询格式如下:

SELECT
FROM
WHERE
GROUP BY
ORDER BY

2.1 单表查询

#基本列查询
SELECT 
FROM
#去除重复元素
SELECT DISTINCT 
FROM
#查询满足条件的元组
WHERE ... BETWEEN ... AND ...;
WHERE ... IN ();
WHERE ... LIKE '_*_A%' ESCAPE '*';			#_表示单字符,%表示任意长度字符,ESCAPE表示换码字符
WHERE ... IS NULL;
#ORDER BY子句
ORDER BY ... DESC/ASC
#限制条数
LIMIT 0,2

#聚集函数
SELECT COUNT(*)
FROM STUDENT;
SELECT COUNT(DISTINCT SNO)
FROM SC;
SELECT AVG(GRADE)
FROM SC
WHERE CNO='1';
SELECT MAX(GRADE)
FROM SC
WHERE CNO='1';
/*
	聚集函数遇到空值时除COUNT(*)外,都直接跳过空值。
	WHERE语句不可以用聚集函数作为条件表达式,聚集函数只能用于SELECT和GROUP BY中的HAVING子句
*/

#GROUP BY子句
SELECT CNO,COUNT(SNO)
FROM SC
GROUP BY CNO;
SELECT SNO
FROM SC
GROUP BY SNO
HAVING COUNT(*)>3;
SELECT SNO,AVG(GRADE)
FROM SC
GROUP BY SNO
HAVING AVG(GRADE>=90);

2.2 连接查询

# 连接
SELECT student.sno,sname
FROM student,sc
WHERE student.sno=sc.sno AND
	sc.cno='2' AND sc.grade>90;
# 自然连接(把目标列中重复的属性去掉),方式同上
# 自身连接,需要为表起别名
SELECT first.cno,seconde.cpno
FROM course first,course second
WHERE first.cpno=second.cno;
# 外连接,把表中的悬浮元组保存在结果关系中
SELECT student.sno,sname,ssex,sage,sdept,cno,grade
FROM student LEFT OUTER JOIN sc ON (student.sno=sc.sno)
# 多表连接和以上类似

2.3 嵌套查询

# 不相关子查询
SELECT name
FROM student
WHERE dept IN
	(
        SELECT dept 
        FROM student
        WHERE name='刘晨'
    );
# 相关子查询
SELECT sno,cno
FROM SC x
WHERE Grade >= (
    			SELECT AVG(Grade)
               	FROM SC y
    			WHERE y.sno=x.sno
               );
# ANY(SOME)/ALL
SELECT name,age
FROM student
WHERE age<ALL
	(
        SELECT age
        FROM student
        WHERE dept='CS'
    )
    AND dept!='CS';
# EXIST
SELECT name 
FROM student
WHERE EXISTS
	(
    	SELECT *
        FROM SC
        WHERE sno=student.sno AND cno='1'
    );

2.4 集合查询

# UNION
SELECT * 
FROM student
WHERE dept='CS'
UNION (UNION ALL)
SELECT *
FROM student
WHERE age<=19;
# INTERSECT
SELECT * 
FROM student
WHERE dept='CS'
INTERSECT
SELECT *
FROM student
WHERE age<=19;
# EXCEPT
SELECT * 
FROM student
WHERE dept='CS'
EXCEPT
SELECT *
FROM student
WHERE age<=19;

3.数据更新

3.1 插入

# 插入元组
INSERT
INTO student(sno,sname,ssex,sdept,sage)				#可以不指出属性名,但VALUE要保持顺序
VALUES('201215128','陈东','男','IS',18);			  #未给出的列将自动赋空值
# 插入子查询结果
CREAT TABLE DEPT_AGE
	(SDEPT CHAR(15)
     AVG_AGE SMALLINT);
INSERT DEPT_AGE(SDEPT,AVG_AGE)
SELECT SDEPT,AVG(SAGE)
FROM STUDENT
GROUP BY SDEPT;

3.2 修改数据

# 修改一个元组的值
UPDATE student
SET sage=22
WHERE sno='201215121';
# 修改多个元组的值
UPDATE student
SET sage=sage+1;
# 带子查询的修改语句
UPDATE SC
SET grade=0
WHERE sno IN
	(SELECT sno
     FROM student
     WHERE sdept='CS');

3.3 删除数据

使用DELETE语句进行删除,方式与修改数据的方式相同。

4.空值的处理

空值是‘不知道’,‘不确定’,‘不存在’的值。在插入元组时,未指定的属性将为空。空值通过IS NULL和IS NOT NULL来判断。属性定义中有NOT NULL约束条件的不能取空值,加了UNIQUE限制的属性不能取控制,码属性不能取空值。空值与另一个值的算数运算结果为空值,与另一个值的比较运算结果为UNKNOWN。在查询语句中,只有使WHERE和HAVING子句中的选择条件为TRUE的元组才被选出作为结果。

5.视图

5.1 定义与删除视图

CREAT VIEW命令用于建立视图。该语句将视图的定义存入数据字典,并不执行其中的SELECT语句,只在对视图查询时,才按属兔的定义从基本表中将数据查出。

# 建立视图,省略属性列名
CREATE VIEW IS_Student
AS
SELECT sno,sname,sage
FROM student
WHERE sdept='IS';
# 建立视图,并要求进行修改和插入操作时仍保证该视图满足SELECT的条件
CREATE VIEW IS_Student
AS
SELECT sno,sname,sage
FROM student
WHERE sdept='IS'
WITH CHECK OPTION

若视图从单个基本表导出,只去掉了某些行列,保留了主码,则称这类视图为行列子集视图

视图不仅可以建立在一个或多个表上,也可以建立在一个或多个定义好的视图上。还可以用带有聚集函数和GROUP BY的子句查询来定义视图,这种视图称为分组视图。

删除视图使用DROP VIEW语句。删除后视图的定义将从数据字典中删除。如果基本表删除了,视图将无法使用,但定义还在数据字典中,需要使用DROP VIEW删除。

5.2 查询视图

视图定义后就可以像基本表一样查询了。如果查询的视图存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,再执行修正的查询,这一转换过程称为视图消解。

5.3 更新视图

视图的更新与查询类似,最终要转换为对基本表的更新,也需要进行视图消解。需要注意的是,有些事图是不可更新的,还有一些视图则是不允许更新的。

第四章 数据库安全性

1.概述

不安全因素:

  • 非授权用户对数据库的恶意存取和破坏
  • 重要或敏感的数据被泄露
  • 安全环境的脆弱性

安全标准:

  • TCSEC
  • CC

2.数据库安全性控制

2.1 用户身份鉴别

常用的用户身份鉴别方法:

  • 静态口令鉴别
  • 动态口令鉴别
  • 生物特征鉴别
  • 智能卡鉴别

2.2 存取控制

存取控制机制主要包括定义用户权限合法权限检查两部分。两类根据数据库安全等级所支持的存取控制为:

  • 自主存取控制DAC
  • 强制存取控制MAC

2.3 自主存取控制方法

自主存取控制主要通过GRANT语句和REVOKE语句实现。

# GRANT
GRANT SELECT
ON TABLE STUDENT
TO U1
WITH GRANT OPTION;	# 该用户可以以同样方式授权其他用户
# REVOKE
REVOKE SELECT
ON TABLE STUDENT
FROM U1;

对数据库模式的授权在创建用户时实现,数据库用户有三种权限:CONNECT,RESOURCE,DB。

数据库还支持对一组与数据库操作相关的权限命名,称为角色。使用CREATE ROLE语句创建,授权和收回权限的方式与对用户的操作相同。

2.4 强制存取控制方法

强制存取控制方法中,数据库管理系统所管理的全部实体被分为主体和客体。主体包括用户及用户进程,客体包括文件,基本表等。数据库系统为每个主体或客体的实例创建一个敏感度标记。敏感度标记被分为若干级别,如绝密,机密,秘密,公开。主体对客体的存取必须遵循以下规则:

  • 主体许可证级别大于或等于客体密级时,才能读取客体
  • 主题许可证级别小于或等于客体密级时,才能写客体

3.视图机制

视图机制可以限制数据对象,把保密数据对无权存取的用户隐藏起来,提供一定程度的安全保护。

4.审计机制

审计功能把用户对数据库的所有操作记录下来放入审计日志,审计员可以通过审计日志监控数据库行为,找到非法存取数据的人,时间和内容等。审计机制提供了一种事后安全检查的机制。

AUDIT ALTER,UPDATE
ON SC;
NOAUDIT ALTER,UPDATE
ON SC;

5.数据加密

数据加密能有效防止数据库数据在存储和传输中失密。数据加密主要包括存储加密和传输加密。

6.其他安全性保护

其他安全性保护包括推理控制,数据库应用中的隐蔽信道和数据隐私保护等技术。

相关文章:

  • 读书笔记:《量化投资实务》
  • Dart external关键字
  • 低碳生活进行时!国产“芯”RK3568创造智慧出行新体验
  • 雷达与imu初始化:鲁棒且实时的雷达惯性初始化方法
  • 算法与诗数据结构 --- 查找 --- 线性表的查找
  • UML(用例图进阶)
  • Intel汇编-LOOP循环
  • 基于JAVA社交物联网的服务搜索系统计算机毕业设计源码+数据库+lw文档+系统+部署
  • 【程序员面试金典】17.04. 消失的数字
  • 深刻理解Java的volatile和synchronized
  • Web大学生网页作业成品 bootstrap响应式网站开发 基于HTML+CSS+JS+Bootstrap制作火锅美食网站(4页)
  • 相对路径覆盖漏洞攻击RPO详解
  • Linux环境下安装mongoDB注意事项
  • 百亿级数据 分库分表 后面怎么分页查询?
  • proc: 虚拟文件系统初始化
  • @angular/forms 源码解析之双向绑定
  • angular2开源库收集
  • Centos6.8 使用rpm安装mysql5.7
  • CentOS7 安装JDK
  • django开发-定时任务的使用
  • github从入门到放弃(1)
  • Js基础知识(四) - js运行原理与机制
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SQLServer之创建显式事务
  • use Google search engine
  • 初识 webpack
  • 基于 Babel 的 npm 包最小化设置
  • 基于axios的vue插件,让http请求更简单
  • 思否第一天
  • 算法-图和图算法
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 微服务核心架构梳理
  • 微信小程序实战练习(仿五洲到家微信版)
  • 线性表及其算法(java实现)
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 鱼骨图 - 如何绘制?
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • %@ page import=%的用法
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三)模仿学习-Action数据的模仿
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • *2 echo、printf、mkdir命令的应用
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET6实现破解Modbus poll点表配置文件
  • /usr/bin/env: node: No such file or directory
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
  • [DEBUG] spring boot-如何处理链接中的空格等特殊字符
  • [Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例