文章目录
数据库原理
第一章 绪论
数据库系统概述
- 数据(Data)是数据库中存储的基本对象
- 数据是有结构的:记录是计算机存储数据的一种格式或一种方法
- 数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据的集合
- 数据库管理系统(DBMS )是位于用户与操作系统之间的一层数据管理软件,是基础软件,是一个大型复杂的软件系统
- 主要功能
- 数据定义功能
- 数据组织、存储和管理
- 数据操纵功能
- 数据库的事务管理和运行管理
- 数据库的建立和维护功能
- 其它功能
- 主要功能
- 数据库系统(DBS):在计算机系统中引入数据库后的系统
- 组成:
- 数据库
- 数据库管理系统(及其应用开发工具)
- 应用程序
- 数据库管理员
- 硬件平台及数据库
- 软件
- 人员
- 特点
- 数据的共享性高,冗余度低,易扩充
- 数据独立性高
- 数据由DBMS统一管理和控制
- 组成:
- 整体数据的结构化是数据库的主要特征之一
- 数据的最小存取单位是数据项
- 数据的结构用数据模型描述,无需程序定义和解释
- 数据独立性:物理独立性,逻辑独立性(物理存储、逻辑结构改变时应用程序不用改变)
- DBS包括DB和DBMS
数据模型
- 数据模型是数据库系统的核心和基础
- 抽象过程:概念模型、逻辑模型、物理模型
- 概念模型
- 实体:客观存在并可相互区别的事物
- 属性:实体所具有的某一特性
- 码:唯一标识实体的属性集
- 实体型: 实体名及其属性名集合
- 实体集:同一类型实体的集合
- 联系:实体(型)内部的联系和实体(型)之间的联系
- 数据模型组成要素:数据结构、数据操作、数据的约束条件
- 根据数据结构类型命名数据模型
- 非关系模型(层次模型,网状模型)
- 关系模型
- 面向对象模型
- 关系数据库系统采用关系模型作为数据的组织方式
- 关系模型
- 逻辑结构:二维表
- 关系:一张表
- 元组:一行为一个元祖
- 属性:一列为一个属性
- 码:唯一确定一个元组的属性或属性组
- 域:属性的取值范围 ,一组具有相同数据类型的值的集合
- 分量:元组中一个属性值
- 关系模式:eg:学生(学号,姓名,年龄,性别,系,年级)
- 数据操作:操作对象和操作结果都是关系,即若干元组的集合
数据库系统结构
- 概念:型、值、模式(型的描述)
- 三级模式结构
- 模式(逻辑模式 )
- 数据库中全体数据的逻辑结构和特征的描述
- 一个数据库只有一个模式
- 地位:是数据库系统模式结构的中间层
- 外模式(子模式或用户模式 )
- 能够看见和使用的局部数据的逻辑结构和特征的描述
- 每个用户只能看见和访问所对应的外模式中的数据
- 地位:介于模式与应用之间
- 一个数据库可以有多个外模式
- 内模式(存储模式 )
- 一个数据库只有一个内模式
- 模式(逻辑模式 )
- 二级映像
- 外模式/模式映像——保证逻辑独立性
- 包含在各自外模式的描述中
- 模式改变,外模式和应用程序不变
- 模式/内模式映像——保证物理独立性
- 唯一
- 包含在模式描述中
- 内模式改变,模式和应用程序不变
- 外模式/模式映像——保证逻辑独立性
第二章 关系数据库
关系数据结构及形式化定义
- 关系
- 域、笛卡尔积、关系
- 主码,候选码,全码
- 主属性,非主属性
- 三种关系:基本关系、查询表、视图表
- 关系模式
- 关系模式是关系数据库的型 ,关系是值
- 关系数据库
关系操作
- 基本操作:选择、投影、并、差、笛卡尔积
关系的完整性
- 实体完整性
- 主属性不为空
- 参照完整性——外码
- 用户定义完整性 ——取值范围内的值
关系代数
- 并:R ∪ S
- 差:R - S
- 交:R ∩ S
- 笛卡尔积:R x S
- 选择:σ
- 投影:π
- 连接:⋈
- 除:÷
第三章 关系数据库标准语言SQL
SQL概述
- 结构化查询语言
- 功能:数据定义、数据查询、数据操纵和数据控制
学生-课程数据库
数据定义
-
模式定义
- 创建/删除数据库:create/drop database student
- 创建模式:create schema 模式名 authorization 用户名
- 删除模式:drop schema 模式名 cascade/restrict
- cascade/restrict 级联/限制删除
-
表定义
-
定义基本表:create table 表名
-
CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, //主码 列级完整性约束条件 Sname VARCHAR(20) UNIQUE, // Sname取唯一值 Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) );
-
表级完整性
-
primary key(Sno,Cno) foreign key(Sno)references Student(Sno) foreign key(Cno)references Course(Cno)
-
常用完整性约束
- 主码约束: PRIMARY KEY
- 唯一性约束:UNIQUE
- 非空值约束:NOT NULL
- 参照完整性约束: FOREIGN KEY
-
-
修改
-
alter table <表名> [ add <新列名> <数据类型> ] [ add <表级完整性约束>] [ drop <列名>[cascade/restrict] ] [ drop constraint<完整性约束名[cascade/restrict] ] [alter column <列名> <数据类型> ];
-
-
删除:**drop table 表名 [cascade/restrict] **
- 先删除参照表,再删除被参照表
-
-
索引定义
-
建立:create unique index 索引名 on SC(Sno ASC,Cno DESC);
-
修改:alter index 旧索引名 rename 新索引名
-
删除:drop index 索引名
删除Student表的Stusname索引 drop index Student.Stusname
-
数据查询
-
查询语句、单表查询
-
SELECT Sno, Grade FROM SC WHERE Cno= ' 3 ' ORDER BY Grade DESC;
-
SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)>=90; WHERE子句中不能用聚集函数作为条件表达式
-
SELECT distinct Sno FROM SC; 去掉表中重复的行
-
between and、not between and
-
in 、not in
-
like、not like
- % (百分号) 代表任意长度(长度可以为0)的字符串
- _ (下横线) 代表任意单个字符
-
is null、is not null
-
and、or、not
-
escape ‘\’ 表示“ \” 为换码字符
-
升序:ASC; 降序:DESC; 缺省值为升序
-
-
连接查询
-
等值与非等值连接查询
-
自身连接
-
别名前缀
-
--查询每一门课的间接先修课(即先修课的先修课) select course1.cno,course2.cpno from course course1,course course2 where course1.cpno = course2.cno;
-
-
外连接
-
外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
-
--查询每个学生及其选修课程的情况包括没有选修课程的学生 -- 用外连接操作(左外连接)**(关键词都是on)** select student.sno,sname,ssex,sage,sdept,cno,grade from student left outer join sc on student.sno=sc.sno;
-
左外连接
- 左外连接符为left outer join on
- 列出左边关系中所有的元组
-
右外连接
- 右外连接符为right outer join on
- 列出右边关系中所有的元组
-
外连接
- 外连接符为full outer join on
- 列出左右两边关系中所有的元组
-
-
多表连接
-
-
嵌套查询
-
将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询
-
子查询不能使用ORDER BY子句
-
带有IN谓词的子查询
-
——查询选修了课程名为“信息系统”的学生学号和姓名 SELECT Sno,Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname= ‘信息系统’));
-
-
带有比较运算符的子查询
-
--查询每个学生超过他选修课程平均成绩的课程号 select sno,cno from sc sc1 where grade>( select avg(grade) from sc sc2 where sc2.sno = sc1.sno);
-
-
带有ANY或ALL谓词的子查询
-
!=(或<>)ANY
-
--查询其他系中比计算机科学系所有学生年龄小的学生姓名和年龄。 select sname,sage from student where sdept <>'IS' and sage <ANY (select sage from student where sdept = 'IS' );
-
-
带有EXISTS谓词的子查询
- 用在 where 后面,满足条件的元组留下,剩下的去掉
- NOT EXISTS谓词
- 内层查询非空,外层WHERE子句返回假值
- 内层查询为空,外层WHERE子句返回真值
-
-
集合查询
- 并操作(UNION)
- 交操作(INTERSECT)
- 差操作(MINUS)
数据更新
-
插入 insert into ……values
-
修改 update 表名 set……
-
某元组的值、多个元组的值 、带子查询的
UPDATE Student SET Sage = 22 WHERE Sno=‘ 202015121 '; UPDATE Student SET Sage= Sage+1; UPDATE SC SET Grade=0 WHERE Sno IN (SELECT Sno FROM Student WHERE Sdept = ‘CS’);
-
删除 **delete from 表名 **
- 某元组的值、多个元组的值 、带子查询的
空值的处理
视图
- 定义和删除
- create view 视图名 as 子查询 【withcheck option】【group by ]
- drop view 视图名 【cascade】
- 查询
- 更新
- 视图作用
- 简化操作
- 多角度看待同一数据
- 提供一些逻辑独立性
- 机密数据安全保护
- 清晰表达查询
第四章 数据库的安全性
数据库安全性控制
-
安全验证
-
身份验证
- Windows
- SQL server
-
权限验证
-
--创建登录 --创建一个sql server验证模式的登录名 --create login p1 --with password='1'; --创建一个windows验证模式的登录名 --create login [LAPTOP-6MK86UM5\Administrator] --from windows; --创建用户 --create user u1 --for login p1; --create login p2 --with password='2'; --create user u2 --for login p2;
-
-
定义存取权限(授权)
- grant 权限 on 表名 to 用户 【with grant option】
- 全部权限 : all privileges
- 全部用户 : public
- revoke 权限 on 表名 from 用户 【cascade|restrict】
- grant 权限 on 表名 to 用户 【with grant option】
-
数据库角色:被命名的一组与数据库操作相关的权限
-
角色是权限的集合
-
角色创建 create role 角色名
-
create role R1; grant select,update,insert on student to R1; grant R1 to u1,u2,u3; revoke R1 from u1; drop role R1;
-
-
实体分为 主体和客体
-
敏感度标记 :**TS>=S>=C>=P **
- 主体的敏感度标记称为许可证级别
- 客体的敏感度标记称为密级
- 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
- 仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
-
自主存取控制检查—>强制存取控制检查—>存取
视图机制
审计
- 审计日志:将用户对数据库的所有操作记录在上面
- C2以上必须有
数据加密
- 加密方法:替换、置换、混合
第五章 数据库完整性
实体完整性
- 检查:插入或更新时自动进行检查
- 唯一 :全表扫描、索引
- 非空
参照完整性
- 定义方式:
- 在CREATE TABLE中用 FOREIGN KEY 短语定义哪些列为外码
- 用 REFERENCES 短语指明这些外码参照哪些表的主码
- 检查时机:
- 对被参照表和参照表进行增删改操作时检查
- 违约处理方式:
- 参照表插入元组时,若破坏参照完整性,拒绝(NO ACTION)执行
- 参照表修改外码值时,若破坏参照完整性,拒绝(NO ACTION)执行
- 被参照表删除元组时,若破坏参照完整性,拒绝(NO ACTION)执行,级联(CASCADE)删除或设置为空值(SET-NULL)
- 被参照表修改主码值时,若破坏参照完整性,拒绝(NO ACTION)执行,级联(CASCADE)修改或设置为空值(SET-NULL)
- on delete set null
- on update set null
用户定义的完整性
- 定义
- 属性上定义
- 列值非空(NOT NULL)
- 列值唯一(UNIQUE)
- check语句
- 元组上定义
- check
- 属性间约束
- 属性上定义
- 检查:插入元组或修改属性的值时
- 违约处理:拒绝执行
完整性约束命名字句
-
定义:constraint <完整性约束条件名>[ PRIMARY KEY短语 | FOREIGN KEY短语 | CHECK短语 ]
-
修改:先删除原来的约束条件,再增加新的约束条件
-
alter table student drop constraint c1; alter table student add constraint c1 check……;
-
第六章 关系数据库理论
问题的提出
- 关系模式
- R<U,F>
- 数据依赖:一个关系内部属性与属性之间的约束关系
- 函数依赖 FD
- 多值依赖 MVD
- 其他
- 问题
- 冗余大
- 增删改异常
规范化
- 函数依赖
- “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。
- X 称为这个函数依赖的决定属性集
- 所有关系均要满足
- 语义范畴概念
- 分类
- 平凡函数依赖与非平凡函数依赖
- 如果X→Y,但Y ⊄ X,则称X→Y是非平凡的函数依赖
- 若X→Y,但Y ⊄ X, 则称X→Y是平凡的函数依赖
- 完全函数依赖与部分函数依赖
- 传递函数依赖
- 平凡函数依赖与非平凡函数依赖
- 范式
- 1NF:所有属性都是不可分的基本数据项
- 2NF:消除部分依赖
- 3NF:消除传递依赖
- BCNF
- 每一个决定因素都包含码
- 所有非主属性都完全函数依赖于每个候选码
数据依赖的公理系统
- Armstrong公理系统(有效、完备)
- 一套推理规则
- 合并规则: 由 X—>Y, X—>Z,有X—>YZ
- 伪传递规则: 由 X—>Y, WY—>Z,有XW—>YZ
- 分解规则: 由 X—>Z, Z ⊆ Y,有X—>Z
- 从一组函数依赖求得蕴含的函数依赖
- 求码
- 一套推理规则
- 闭包
- 在关系模式R<U, F>中为F所逻辑蕴含(或推导)的函数依赖的全体叫做F的闭包,记为F+
第七章 数据库设计
数据库设计概述
- 给定的应用环境 ,构造优化的数据库逻辑模式和物理结构, 建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求
- 目标:提供一个信息基础设施和高效的运行环境
- 特点:三分技术,七分管理,十二分基础数据
- 特点:数据设计和处理设计相结合
- 设计过程:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、运行和维护
- 需求分析和概念设计独立于任何数据库管理系统
需求分析
- 调查用户需求,与用户达成共识,然后分析表达这些需求
概念结构设计——整个数据库设计的关键*
- 用户需求抽象为信息结构(即概念模型)的过程
- 工具:E-R图(E-R模型)
- 实体、属性、码
- 联系
- 一对一:1:1
- 一对多:1:n
- 多对多:m:n
- 准则
- 属性必须是不可分的数据项
- 冲突种类
- 属性冲突
- 命名冲突
- 结构冲突
逻辑结构设计*
- 任务:E-R图转换为与数据模型相符合的逻辑结构
- 转换原则
- 一个实体型转换为一个关系模式
- 实体型间联系的转换
- 一个m:n联系转换为一个关系模式
- 码:各实体码的组合
- 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并
- 独立关系模式
- 关系的属性:与该联系相连的各实体的码以及联系本身的属性
- 关系的码:n端实体的码
- 合并
- 属性:在n端关系中加入1端关系的码和联系本身的属性
- 码:不变
- 独立关系模式
- 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并
- 独立
- 属性:与该联系相连的各实体的码以及联系本身的属性
- 码:每个实体的码均是该关系的候选码 l
- 合并
- 加入另一端关系的码和联系本身的属性
- 码:不变
- 独立
- 一个m:n联系转换为一个关系模式
数据库的物理设计
- 在物理设备上的存储结构与存取方法
- 多条存取路径
- 存取方法:索引、聚簇、hash
- 确定存储结构
- 数据存放位置和存储结构
- 确定系统配置
第八章 数据库编程
-
基础
-
标识符:
- s字母或_、@、**#**开头的字母数字或_、@、$序列
- 不与保留字相同
- 长度小于128
- 不符合规则的标识符必须加以界定(双引号””或方括号[])
-
局部变量**:@开头**
-
创建一个@myvar 变量,然后将一个字符串值放在变量中,最后输出 @myvar 变量的值 declare @myvar char(20) select @myvar = 'This is a test' select @myvar
-
-
全局变量:@@开头
- 服务器定义
-
-
流程控制语句
- 选择结构
- 循环结构
- **等待语句 ** waitfor
- 返回语句
-
游标:多条数据记录的结果集中每次提取一条
-
--游标运用 --根据学生成绩计算统计各个等级的人数 --定义局部变量 declare @mygrade int declare @A int,@B int,@C int,@D int,@E int select @A=0,@B=0,@C=0,@D=0,@E=0 --1、定义游标 declare level_cursor cursor for select grade from sc --2、打开游标 open level_cursor --从游标中提取数据 fetch next from level_cursor into @mygrade while @@FETCH_STATUS=0 --检测状态,提取到了数据 begin if @mygrade is null set @E=@E+1 else if @mygrade<60 set @E=@E+1 else if @mygrade<70 set @D=@D+1 else if @mygrade<80 set @C=@C+1 else if @mygrade<90 set @B=@B+1 else set @A=@A+1 fetch next from level_cursor into @mygrade --游标下移,避免死循环 end select @A,@B,@C,@D,@E --关闭游标 close level_cursor --释放资源 deallocate level_cursor
-
-
存储过程:完成特定功能的SQL语句集
-
--存储过程 创建存储过程 create proc myproc as select * from course --执行存储(创建执行后才能执行) exec myproc --修改存储过程myproc的功能为查找年龄小于某岁的学生信息 --修改存储过程 alter proc myproc @age int as select * from student where sage<@age; --执行存储过程 exec myproc 20; --删除 drop proc myproc
-
-
自定义函数
- 标量函数
- 内嵌表值函数
- 多语句表值函数
-
触发器
- 由事件驱动的特殊 ,自动执行
- DML触发器
- DDL触发器
第九章 数据库恢复技术
- 事务定义
- 一个数据库操作序列(多个操作、有序)
- 一个不可分割的工作单位(不能只完成一部分,要么全完成,要么都不完成)
- 恢复和并发控制的基本单位
- 特征
- 原子性
- 不可分割的工作单位(不能只完成一部分,要么全完成,要么都不完成)
- 一致性
- 执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态
- 隔离性
- 对并发执行而言一个事务的执行不能被其他事务干扰
- 持续性(永久性)
- 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的;接下来的其他操作或故障不应该对其执行结果有任何影响
- 原子性
- 数据库恢复技术是衡量系统优劣的重要指标
- 冗余数据:数据转储,登录日志文件
- 后备副本加上日志文件才能把数据库恢复到某一时刻的正确状态
- 恢复策略:事务故障,系统故障,介质故障恢复