数据库原理
一、数据库系统基础
-
数据模型的类型
概念数据模型:
- 概念数据模型也称概念模型或信息模型,是对现实世界中问题域内事务(特性)的描述,是以用户观点实现世界的模型(图形表示)。主要用于描述事物的概念化结构,使数据库的设计人员在设计初期,避开计算机系统及DBMS具体技术问题,以图形化方式表事物(实体)数据特征(属性)及其之间的联系等,常用的是实体-联系模型(E-R图)。
逻辑数据模型:
- 是数据存放的逻辑结构,是以计算机系统的观点对数据建模。是具体的DBMS所支持的数据模型,如网状模型、层次模型、关系模型(现在学的SQL server是关系模型)。逻辑模型面向用户和系统,是对概念模型的进一步分次模型和细化,描述系统功能和执行顺序,用于DBMS实现。
- 逻辑数据模型通常由数据结构、数据操作、完整性约束三个基本部分组成,这三个基本部分称为数据模型的三个要素。
物理数据模型:
- 物理数据模型是对数据库对象的描述主要包括表、视图、字段、数据类型、长度、主键、外键、索引、默认值。概念模型中的对象转换成物理模型的对象,如存储位置、结构、方式、方法或索引等,逻辑模型的实现都对应物理模型。
-
数据库系统的组成
数据库、数据库管理系统、应用系统、数据库管理员和用户四部分
- DBA数据库管理员,具有全部权限
二、关系数据库基础
-
关系及关系模型的基本概念
-
关系、记录和属性。关系(Relation)以一个二维表(也称数据表或表)形式表示数据的逻辑结构,将现实世界中实体(事物)及其之间的联系归结(转化)为简单的二维表关系,每个关系对应于一个二维表,其中表中的每一行代表一个记录(或元组(Tuple)),每一列代表一个属性(或称数据项),每个属性对应表中一个字段,属性名即字段名,属性值为各行字段值。关系的一般形式定义:
常用 R(D,D......,D„)表示 DㄨD,ㄨ...ㄨD。的子集域D1,D2,...,Dn。上的关系,其中R表示关系名,n是关系的目或元数(列数)。
-
域。域(Domain)是属性具有相同数据类型值的集合。用域表示属性的取值范围,用DOM(A)表示属性A的域,每个属性都有一个域,不同属性可以具有相同的域。
-
关系模型。关系模型(Relation Model)是以二维表结构表示的实体及其联系关系的逻辑数据模型,可以用键(可唯一标识一个记录的属性或属性组)关联多个关系(二维表),每个关系对应一个二维表,如学生、选课、课程。
-
-
键、主键、外键
键也称码。
- 候选键。关系(表)中可唯一确定(标识、调用)记录的属性(列)或属性组。
- 主键。主键(Primary Key)是在候选键中选定一个键作为记录标识。通常,键均指主键,如果关系中有多个候选键,可取其中一个作为该关系的主键,如学生(学号,姓名,专业,课程编号)的主键可以选"学号",也可以选(学号,姓名)。
- 外键。外键,是指若在关系R中包含另一个关系S的主键所对应的属性或属性组K,则称K为R的外键(码)。如对于学生(学号,姓名,专业,课程编号),其中的"课程编号"("课程"关系的主键)就是"学生"关系的外键。
-
关系模型的表示
关系模型是对关系结构特征的描述 。可形式化表示为R(U,D,Dom,F),其中R为关系名,U为组成该关系的属性(列)名集合,D为属性组U中属性值的域,Dom为属性域的映像(对应)集合,F为属性之间数据的依赖关系集合。
通常,关系模式可以简记为R(U)或R(A1,A2,...,An) ,其中R为关系名,A1,A2,...,An为属性名。例如,学生关系的关系模式(二维表)可表示为(另一种表示形式): 学生(学号,姓名,性别,专业,出生日期)
-
E-R图组成的三要素为实体、实体间的联系和属性
实体与二元联系的转换规则:
- 若实体间的联系为一对一,则将两个实体转换成两个关系模式的过程中,任选-个属性或属性组在其中加入另一个关系模式的键和联系的属性。
- 若实体间的联系是一对多,则在多的一端实体的关系模式中,加上一的一端实体类型的键和联系的属性。
- 若实体间的联系是多对多,则将联系也转换为关系模式,其属性为两端实体的键加上联系的属性,而键为两端实体键的组合。
一对一联系的转换方法
一对多联系的转换方法
-
【方法一】 将联系与多的一端实体(事物)所对应的关系模式合并,并加一端实体的主键和联系的属性,组成新的关系(表)的属性(列)。
-
【方法二】将联系转换为一个独立关系模式,其属性包含联系自身的属性以及相连接的两端实体的主键,组成新的关系(表)的属性(列),与多对多转换方法相同。
多对多联系的转换方法
-
对于联系是实体之间多对多的情况,每个实体可以直接转换为关系模式,联系则单独转换为一个关系模式,其属性包括联系自身的属性和相连各实体的主键。
-
关系模型的完整性
完整性通常包括实体完整性、参照完整性、域完整性、用户定义完整性。
-
域完整性:常用CHECK约束、UNIQUE约束、DEFAULT默认值...
域完整性(Domain Integrity),是指列的值域的完整性a回感包括数据类型、格式、值域范围、是否允许空值等,是针对某e口口季00中00年000(一具体数据库的约束条件,保证表中列不能输入无效值。域完整性限制了某些属性中的值,将属性限制在一个有限集合。如要求身份证号是18位。常用CHECK约UNIQUE 约束、DEFAULT 默认值、NOT NULL/NULL保证列值完整性。
-
用户定义完整性:
eg:学生百分制成绩取值范围0~100. 即check(成绩>=0 and 成绩<=100)
-
-
关系运算的种类
- 并运算
- 差运算
- 交运算
- 广义笛卡儿积
-
专门的关系运算
有选择运算(水平过滤)、投影运算(垂直过滤字段)、连接运算和除运算四种。
三、SQL Server 2019基础
-
数据库语句的种类及功能
-
数据定义语言(DDL):
SQL Server的功能非常强大且其性能优异高效,其中的数据定义语言的功能包括对数据库、表(数据表)、视图、索引等操作对象的定义(建立)和删除(撤销)等,见表3-6。具体操作将陆续进行介绍。
-
数据操作语言(DML):
主要功能包括插入数据insert、更新数据update、删除数据delete、数据查询select
-
数据控制语言(DCL):
为了确保数据库的安全,需要对用户使用表中的数据的权限进行管理和控制。数据控制语言主要用于实现对数据库进行安全管理和权限管理等控制,如GRAMT(赋予权限)、DENY(禁止赋予的权限)、REVOKE(收回权限)等
-
事务管理权限(TML)。x
-
-
注释语句
- 多行注释:/** ...* */
- 单行注释: -- (两个减号开头)
四、数据库、表和数据操作
-
数据表的建立
- primary key。主键约束用于唯一地标识表中的各行,主键约束列值不能为NULL,同时也不能与其他行的值有重复,以免造成无法唯一标识行。
- unique约束。设置该列只存放唯一(不重复)的属性值。
- not null 与null 约束。分别确定该列值不为空或为空。
- default约束。默认约束指该列在未定义时的默认取值。
- check约束。检查约束可以通过约束条件表达式设置其列值应当满足的具体条件。
-
数据表的修改
应对数据表(结构)进行修改,可能的操作有增加新的列、删除原有的列、修改某列的数据类型三种。
语法格式:
sqlalter table <基本表名> -- 增加新的列 add <新列名> <列数据类型> [列完整性约束] -- 删除指定的列 drop column <列名> -- 修改原有列 alter column <列名> <列数据类型> -- 删除数据表 drop table <数据表名>
-
数据查询常用操作
语法:
sql选择数据 - 使用SELECT语句来选择数据库中的列。 SELECT 列1, 列2 FROM 表名; 条件查询 - 使用WHERE子句来过滤数据。 SELECT 列1, 列2 FROM 表名 WHERE 条件; 排序数据 - 使用ORDER BY子句来对结果进行排序。 SELECT 列1, 列2 FROM 表名 ORDER BY 列1 ASC, 列2 DESC; 聚合数据 - 使用聚合函数如COUNT(), SUM(), AVG(), MIN(), MAX()等来对数据进行聚合。 SELECT COUNT(列名), AVG(列名) FROM 表名 WHERE 条件; 分组数据 - 使用GROUP BY子句来对数据进行分组。 SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名; 连接表 - 使用JOIN语句来连接两个或多个表。 SELECT 列1, 列2 FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名; 子查询 - 在查询中嵌套另一个查询。 SELECT * FROM 表名 WHERE 列名 IN (SELECT 列名 FROM 另一表 WHERE 条件); 创建表 - 使用CREATE TABLE语句来创建新表。 CREATE TABLE 表名 ( 列1 数据类型, 列2 数据类型, ... );
- ALL: 显示满足查询条件的全部记录,distinct选项使查询的结果只含不同记录,取消后面其他相同的记录。
- SELECT:首先指定要检索的列。
- FROM:然后指定数据来源,即要从哪个表或视图中检索数据。
- WHERE:接着添加过滤条件,以限制结果集。
- GROUP BY:如果需要对结果进行分组,指定分组的列。
- HAVING:在分组后,添加条件以过滤分组的结果。
- ORDER BY:最后,指定如何对结果集进行升序或降序排列。ASC(默认选项可不写)选项为升序,DESC为降序(必写)。
- LIMIT(可选):在某些数据库系统中,用于限制返回的记录数量。
-
常用的聚合函数
聚合函数 功能 COUNT(*) 计算记录的个数 COUNT(列名) 对一列中的值计算个数 SUM(列名) 对某一列值的总和(此列必须是数值型) AVG(列名) 对某一列值的平均值(此列必须是数值型) MAX(列名) 对某一列值的最大值 MIN(列名) 对某一列值的最小值 -
模糊查询方法
- % 。用于表示任意长度的字符串
- _ 。 表示任意一个单字符。
sql-- 使用百分号(%)通配符进行模糊查询 SELECT * FROM 表名 WHERE 列名 LIKE '模%式'; -- 使用下划线(_)通配符进行模糊查询 SELECT * FROM 表名 WHERE 列名 LIKE '模_式'; -- 组合使用通配符进行模糊查询 SELECT * FROM 表名 WHERE 列名 LIKE '模_%式'; -- 转义通配符进行模糊查询 SELECT * FROM 表名 WHERE 列名 LIKE '模\%式' ESCAPE '\'; -- 假设数据库默认不区分大小写,进行模糊查询 SELECT * FROM 表名 WHERE 列名 LIKE '模%式'; -- 使用正则表达式进行模糊查询(以MySQL为例) SELECT * FROM 表名 WHERE 列名 REGEXP '模.*式';
-
数据插入的操作
- 插入单个数据
sql插入数据 - 使用INSERT INTO语句来向表中添加新数据。 INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);
-
数据修改的方法
语法:
sql更新数据 - 使用UPDATE语句来更新表中的数据。 UPDATE 表名 SET 列1 = 值1, 列2 = 值2 WHERE 条件; 修改表结构 - 使用ALTER TABLE语句来修改表结构。 ALTER TABLE 表名 ADD 列名 数据类型;
-
数据删除的方法
语法:
sql删除数据 - 使用DELETE语句来从表中删除数据。 DELETE FROM 表名 WHERE 条件;
五、索引及视图
索引类似于图书目录,提供了指向包含特定值的数据的指针。利用该指针,可以直接定位到所要查找的相应记录,从而提高数据库数据查询的速度,提升数据库系统性能。索引技术是数据库系统实现的重要部分。
-
索引的特点
- 极大地提高数据查询的速度,这也是其最主要优点。
- 通过创建唯一性索引,可以保证数据库中各行数据的唯一性。
- 建立在外码上的索引可以加速多表之间的连接,有益于实现数据的参照完整性。
- 查询涉及分组和排序时,也可显著减少分组和排序的时间。
- 通过使用索引可以在查询过程中使用优化隐藏器,提高系统的性能。
-
索引的类型
根据其索引记录的结构和存放位置可分为 聚簇索引(聚集索引)、非聚簇索引(非聚集索引)和其他索引。
聚簇索引也称为主索引 ,非聚簇索引也称为辅助索引。
索引类型 简单说明 聚簇索引 非聚簇索引 唯一索引 -
视图的概念(虚表)
视图(View)是由其他表或视图上的查询所定义的一种特殊表。视图时数据库基本表(实表)中的部分行和部分列数据的组合。它与基本表不同的是:表中的数据是物理存储的,而数据库中并不存储视图所包含的数据,这些数据仍然存在原来的基本表中。因此,视图就像一个窗口,提供用户以多角度观察数据库中的数据的一种机制。
-
定义视图
语法:
sqlcreate view 视图名 [(<列名>[,<列名>]...)] as <子查询> [where check option]
六、存储过程和触发器
-
存储过程的基本概念
存储过程是一组为了完成特定功能、可以接收和返回用户参数的T-SQL语句预编译集合,经过编译后存储在数据库中,以某个名称存储并作为一个单元处理。
-
存储过程的特点(优点)
- 存储过程允许标准组件式编程
- 存储过程在服务端运行,执行速度快
- 存储过程能够减少网络流量
- 存储过程可被作为一种安全机制充分利用
-
创建存储过程
语法:
sqlCREATE PROCEDURE 存储过程名 (参数列表) AS BEGIN -- 存储过程体,可以包含一系列的SQL语句 SQL语句1; SQL语句2; ... END; CREATE PROCEDURE 插入新记录 @姓名 NVARCHAR(50), @年龄 INT, @邮箱 NVARCHAR(100) AS BEGIN INSERT INTO 人员信息表 (姓名, 年龄, 邮箱) VALUES (@姓名, @年龄, @邮箱); END;
-
CREATE PROCEDURE
:这是创建存储过程的关键字。 -
存储过程名
:你创建的存储过程的名称,需要根据实际情况来命名。 -
(参数列表)
:存储过程可以接收参数,参数列表中定义了参数的名称和数据类型。如果没有参数,则可以省略这部分。 -
AS
:关键字,用于标识存储过程的开始。 -
SQL语句1; SQL语句2; ...
:存储过程体,这里是实际执行的SQL语句序列,每条语句以分号结束。 -
END;
:标识存储过程的结束
-
-
触发器概述
触发器(Trigger)是一种特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一个表进行操作(INSERT、DELETE、UPDATE)时就会激活触发器的执行。
-
触发器的优势
- 预编译、已优化、效率较高,避免了SQL语句在网络传输后再解释的低效率。
- 可以重复使用,减少开发人员的工作量。若用SQL语句,使用一次就得编写一次。
- 业务逻辑封装性好,数据库中很多问题都可在程序代码中实现,但是将其分离出来在数据库中处理,使逻辑上更清晰,对于后期维护和二次开发的作用比较明显。
- 更加安全。不会有SQL语句注入问题。
七、T-SQL应用编程
-
批处理的结束与退出
-
执行批处理语句
用EXECUTE语句可执行标量值得用户自定义函数、系统过程、用户自定义存储过程等,同时还支持T-SQL批处理内字符串得执行。
-
批处理结束语句
sqlGO [count]
-
批处理退出语句
sqlRETURN [整型表达式]
-
-
顺序结构
- begin ... end 语句
- set语句
- select语句
- print语句
-
选择结构
- if ...else语句
- case语句
-
循环结构
- where语句
八、数据库系统安全
-
数据备份
备份方法:
- 完整备份:指转存数据库全部数据,通过单个完整备份,将数据库恢复到某个时间点的状态。
- 完整差异备份
- 部分备份
- 部分差异备份
- 文件和文件组备份
- 文件差异备份
- 事务日志备份
-
事务及其基本特性
事务(Transaction)是数据库系统的一个操作或处理的基本单位(最小单位),是用户定义的一组操作序列,通常是一行 SQL Server 语句,或是一个独立完整增、删、改等功能的操作。并发控制以事务为单位,一个事务可以是一组(或条)SQL语句或一个模块程序。事务的开始或结束都可以由用户显式控制,若用户无显式地定义事务,则由数据库系统按默认规定自动划分事务。对事务的操作实行"要么都做,要么都不做"的原则,将事务作为一个不可分割的基本工作单位。
事务的基本特性:
- 原子性
- 一致性
- 隔离性
- 持久性:一旦十五完成,其结果不变,包括系统关闭,都需要保证事务结果。即使系统崩溃,一个提交的事务仍然存在。在事务完成后,数据库日志便记录所有对数据的更新或查询等。
-
并发控制的概念
数据库的并发控制是对多用户程序同时并行存取或处理的控制机制,目的是避免数据的丢失修改、无效数据的读取与不可重复读数据现象的发生,从而保持数据的一致性。
事务是数据并发控制的基本单位,是用户定义的一组操作序列。
-
并发控制需要处理的问题
- 更新丢失
- 读脏数据
- 不可重复读
- 幻读
-
常用的技术封锁
采取并发控制的目的是以有效的方式控制调度并发操作,使每个用户事务的执行不受其他事务干扰,从而避免造成数据的不一致性。封锁是并发控制最常用的技术,其基本单位是事务。
九、关系数据库的规范化
-
关系模式的范式
-
第一范式(1NF)
若关系模式R的每个关系r的属性值都是不可分的原子值,则称R是第一范式1NF的模式。
-
第二范式(2NF)
若A是关系模式R中候选键属性,则称A是R的主属性;否则称A是R的非主属性。
-
第三范式(3NF)
若关系模式R是1NF,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式(3NF)的模式。若数据库模式中每个关系模式都是3NF,则称其为3NF的数据库模式。
-
十、数据库系统设计
-
概念结构设计的任务
概念结构设计的任务是将需求分析中业务(实体)数据处理等实际需求,抽象为信息结构(概念模型E-R图),是现实世界(事务)到机器世界(数据及处理)转换(业务处理转化为数据处理)的一个重要阶段,也是整个数据库系统设计的关键。
概念概念结构设计通常将现实世界中的客观事物(实体),先抽象为不依赖 DBMS支持的数据模型(E-R图),概念模型是各种数据模型的共同基础,便于进行具体描述和直观表示。
-
概念结构设计的四个特点
- 直观易于理解,利用概念模型E-R图便于研发人员和需求用户直接交换意见用户的积极参与是数据库系统设计成功的关键。
- 能够真实且充分地描述现实世界的具体事物(特征),包括事物及其之间的联系可以满足用户对数据的处理要求,是对现实世界(业务应用)的一个真实直观模型。
- 易于扩充修改完善,当应用环境和业务需求改变时,方便对概念模型扩充修改完善。
- 便于向关系、网状、层次等各种具体数据模型转换。
-
全局E-R图模型设计
E-R图合并中的冲突有属性冲突 、命名冲突 、结构冲突三种。
- 属性冲突:属性值的类型、取值范围/单位或值域不同等不一致。
- 命名冲突:在实体名、属性名或联系名之间出现命名不一致,通常属性的命名冲突最常见,主要是同名异义(含义)或异名同义,解决方法常用协商调整等方式。
- 结构冲突:主要共分三种:一是同一对象在不同应用中抽象不同,常将属性变换为实体或将实体变换为属性;二是同一实体在不同局部E-R图中所包含属性不全相同,或属性排列次序不全相同。可将该实体的属性取各局部E-R图中属性的并集,再适当设计属性的次序;三是实体之间的联系在不同局部E-R图中分类不同,应当根据应用语义对实体联系的类型综合或调整。
-
逻辑结构设计
概念结构设计面向用户得到的E-R模型,独立于具体DBMS。采用计算机处理E-R模型中的数据(事物特征),还必须将其转化为具体DBMS能处理的数据模型,即逻辑绪构设计。
逻辑结构设计的任务:
- 逻辑结构设计的任务是将概念结构设计得到的概念数据库模式转换成逻辑数据库模式,即将E-R图转换成与选定的DBMS所支持的数据模型相符合的逻辑结构。
逻辑结构设计的任务步骤:
- 将概念结构(E-R图)转化为关系模型(或其他模型)。
- 将关系模型转换为特定DBMS支持下的数据模型(数据表)。
- 对数据模型按照规范化要求进行具体优化和完善。
-
评价物理结构
在物理结构设计完成后,需要进行评审,重点是时空效率。主要权衡系统的时空效率、维护问题和用户需求,对多种设计方案进行其体评审和考量,可以得到多种方案,对这些方案经过认真评审选出较优方案。对数据库物理结构的评审主要借助所选用的DBMS.具体考核指标包括如下。
- 查询和响应时间。高质量应用程序设计较少占用CPU时间和I/O时间
- 更新事务的消耗包括修改索引、重写物理块或文件、写校验等消耗。
- 生成报告的损耗,主要包括索引、重组、排序、结果显示的损耗。
- 主在储空间的损耗。包括程序和数据占用空间。可对缓冲区个数及大小做适当控制以减小损耗。
- 辅助存储空间的损耗。如数据块和索引块占用空间可对索引块大小及充满度做适当控制减小。
-
概念结构设计
概念结构设计是整个数据库系统设计的关键,通过对需求进行综合、归纳与抽象分析,形成独立于具体DBMS的概念模型。
概念结构(E-R图)转化为关系模型(或其他模型)。
- 将关系模型转换为特定DBMS支持下的数据模型(数据表)。
- 对数据模型按照规范化要求进行具体优化和完善。
-
评价物理结构
在物理结构设计完成后,需要进行评审,重点是时空效率。主要权衡系统的时空效率、维护问题和用户需求,对多种设计方案进行其体评审和考量,可以得到多种方案,对这些方案经过认真评审选出较优方案。对数据库物理结构的评审主要借助所选用的DBMS.具体考核指标包括如下。
- 查询和响应时间。高质量应用程序设计较少占用CPU时间和I/O时间
- 更新事务的消耗包括修改索引、重写物理块或文件、写校验等消耗。
- 生成报告的损耗,主要包括索引、重组、排序、结果显示的损耗。
- 主在储空间的损耗。包括程序和数据占用空间。可对缓冲区个数及大小做适当控制以减小损耗。
- 辅助存储空间的损耗。如数据块和索引块占用空间可对索引块大小及充满度做适当控制减小。
-
概念结构设计
概念结构设计是整个数据库系统设计的关键,通过对需求进行综合、归纳与抽象分析,形成独立于具体DBMS的概念模型。