第一章(填空)
数据与数据处理
- 信息=数据+语义(数据处理)
- 数据管理三个阶段:
- 人工管理
- 文件系统
- 数据库系统
- 数据库系统的组成:
- 数据库
- 数据库用户
- 计算机硬件系统
- 计算机软件系统
- 数据库是储存在计算机内的、有组织的、可共享的相关数据的集合
- 数据库中存储的是数据以及数据之间的联系
- 数据不一致核心原因:数据冗余
- 数据库两个特点:集成性、共享性
- 数据库用户(3个):
- 最终用户
- 应用程序员
- 数据库管理员
- 软件系统主要包括4个部分
- 操作系统(OS)
- 数据库管理系统(DBMS,核心)
- 应用开发工具
- 应用系统。
- 数据模型
-
数据模型是数据库的框架,是数据库系统的核心和基础。
-
是现实世界两级抽象的结果
-
数据模型3个要素
- 数据结构
- 数据操作
- 数据完整性约束
-
数据结构:实体和实体间联系的表达和实现
-
数据操作:允许对数据库中数据执行的操作的集合,同时包含相应的操作规则
-
数据完整性约束:给出数据及其联系应具有的制约和依赖规则
-
数据模型按应用层次分3个部分:
- 概念模型(信息世界)
- 逻辑模型(计算机世界,DBMS支持的模型)
- 物理模型
-
相关术语
- 实体、属性、实体型、实体集、码、域、联系
- 码由一个或多个属性组成,其值可以唯一标识关系中的一个元组
-
实体型之间的联系
- 一对一
- 一对多
- 多对多
-
概念模型的表示方法:实体-联系(ER)方法——ER图
-
ER图
- 矩形——实体
- 椭圆——属性
- 菱形——联系
-
对应关系
现实世界 信息世界 计算机世界 事物总体 实体集 文件 事物个体 实体 记录 特征 属性 字段 事物的联系 实体模型 数据模型 -
常见的逻辑模型
- 层次模型:自上向下的层次关系(树)
- 网状模型
- 关系模型(二维表)
- 面对对象模型
-
数据库系统的内部体系结构从逻辑上分成:三级架构
- 外模式(多个,用户级)
- 模式(唯一,概念级)
- 内模式(唯一,物理级)
-
二级映像
- 外模式/模式映像(保证数据与程序间的逻辑独立性)
- 模式/内模式映像(唯一,保证数据之间的物理独立性)
-
数据库的独立性
- 逻辑独立性
- 物理独立性
-
三级架构、二级映像的优点:
独立、共享、简化接口、安全保密
-
关系数据库基础(填空)
关系模型
-
关系模型只包含单一的数据结构:关系
-
关系就是由行列组成的二维表
-
相关概念
- 属性(列,属性名就是字段名,属性值就是字段值)
- 域(属性的取值范围)
- 元组(一行,记录)
- 分量(一个元组中的每一个属性值称为分量,元组是多个分量的集合)
- 关系模式(二维表的结构称为关系模式。关系名为R,其属性名分别为A1,A2,…,An,那么关系模式可以表示为R(A1,A2,…,An))
- 关系数据库(在关系数据库中,关系模式是型,关系是它的值)
-
关系中的每一个分量必须是不可再分的数据项。
所有属性都是一个单独的值而不是值的集合
关系模型的完整性约束
-
关系模型的组成:
- 关系数据结构
- 关系操作
- 关系完整性约束
-
关系模型的3种完整性约束
-
实体完整性(对主键的约束,每个关系必须有主码,且主码对于的所有属性值不为空)
- 参照完整性(对外部关系键的约束,不允许引用不存在的实体)
- 用户定义完整性
-
候选码的特点:
- 唯一性、最小性
-
传统的集合运算:交并差、笛卡尔积
-
专门的代数运算
- 选择
- 投影
- 连接
- 自然连接是去除重复列的等值连接
- 自然连接只能用于两个关系中有共同属性
- 自然连接先向关系的垂直方向运算,再向关系的水平方向运算
- 除法
-
当且仅当R和S没有公共属性: R ⋈ S = R × S R \Join S = R \times S R⋈S=R×S,当且仅当R和S没有公共属性
-
除了笛卡尔积之外,其他集合运算都要求关系符合相容关系
相容关系:两个关系具有相同的列数,且两个关系格子的第i个属性来自同个域
-
关系代数运算是以集合为基础的运算,即操作的对象和结果都是集合
-
在一个关系中,列必须是同质的,即每一列的分量都是同类型的数据。
SQL基础
-
SQL是结构化查询语言的简称
-
SQLServer2016的数据库文件由数据文件和日志文件组成
-
修改数据库时,为了防止文件信息被破坏,文件的大小和增长容量只能增加
-
修改数据库
alter database <名>
-
数据库表基本操作
- 6中完整性约束(
CONSTRAINT <约束名>
)NULL/NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
(用于设置字段的取值范围,相关资料: https://www.w3school.com.cn/sql/sql_check.asp)DEFAULT
- 6中完整性约束(
数据操纵与查询
数据操纵
- 查询时,
DISTINCT
关键字表示去掉重复值 NULL
值不同于0、空字符串或空格,它不占用任何空间
聚合函数
-
AVG、SUM、MAX、MIN
-
COUNT
统计列值个数 -
COUNT(*)
统计元组个数。使用时无法使用DISTINCT去重
COUNT对比
count(*)
包括了所有的列,相当于行数;不忽略NULL
count(1)
忽略所有列;用1代表代码行,不忽略NULL
count(列名)
只包括列名那一列;会忽略列值为空的计数,即某个字段值为NULL
时,不统计
分组查询:
HAVING
和WHERE
对比where
子句作用域基本表和视图,从中选择满足条件的元组。where
子句不能用库函数Having
子句作用于元组,从中选择满足条件的组。使用Having
应该先进行group by
连接
ON
先执行,WHERE
后执行ON
是生成临时表时使用的条件,WHERE是临时表生成后筛选临时表的条件ON
>WHERE
>HAVING
子查询
- 顺序:先子查询,获得结果用于构造父查询的查询条件
EXISTS
和NOT EXISTS
不返回任何实际数据,只有逻辑值“真”“假”
视图与索引
视图
- 视图优点:
- 只提取用户需要的数据,便于管理维护
- 安全保护机制
- 具有一定的逻辑独立性
- encryption 视图加密,schemabinding 视图与引用表绑定
- 由于视图是一张虚表,所以对视图的更新,最终转换成对基本表的更新
- 视图删除后,只会删除该视图在数据字典中的定义,而与该视图有关的基本表中的数据不会受任何影响
- 视图是虚表,其数据不进行存储,其记录来自基本表,只在数据库中存储其定义
索引
-
索引是一个单独的、储存在磁盘上的数据结果,它包含所有记录用那的引用指针,可以把它看作一本字典。
-
优点:
- 提升查询速度
- 保证各行数据的唯一性
- 减少分组和排序查询的耗时
- 建立在外码上的索引可以加速表之间的连接,利于实现数据参照完整性(不允许引用不存在的实体。)
-
缺点
- 占用额外物理空间
- 维护需要花费时间。更新数据后,索引也需要动态维护
-
系统会自动对主键创建聚集索引
-
非聚集索引的索引排序和物理排序相互独立(物理存储顺序和索引键的顺序不一致),而聚集索引则相关联
-
一个数据表可以有多个非聚集索引,只能有一个聚集索引
-
唯一索引保证索引中没有重复值
-
唯一索引UNIQUE、聚集索引
CLUSTERED
(clustered,集群)、NONCLUSTERED
非聚集索引
CREATE UNIQUE INDEX
关系数据库设计理论
-
自反律
- 如果 Y ⊆ X ⊆ U Y \subseteq X \subseteq U Y⊆X⊆U,则 X → Y X→Y X→Y在 R R R上成立。
- S N → ( S N o , S N ) SN \rightarrow (SNo, SN) SN→(SNo,SN),则 ( S N o , S N ) ⊆ S N (SNo, SN) \subseteq SN (SNo,SN)⊆SN
-
增广律
- 若 X → Y X→Y X→Y在 R R R上成立,且 Z ⊆ U Z \subseteq U Z⊆U ,则 X Z → Y Z XZ→YZ XZ→YZ在 R R R上也成立
- ( S N o , S N ) → ( S e x , S N ) (SNo, SN) \rightarrow (Sex, SN) (SNo,SN)→(Sex,SN)
-
传递率
- 若 X → Y X→Y X→Y和 Y → Z Y→Z Y→Z在 R R R上成立,则 X → Z X→Z X→Z在 R R R上也成立
-
合并律
- 若 X → Y X→Y X→Y和 X → Z X→Z X→Z在 R R R上成立,则 X → Y Z X→YZ X→YZ在 R R R上也成立
- S N o → S N SNo \rightarrow SN SNo→SN 且 S N o → A g e SNo \rightarrow Age SNo→Age , 则 S N o → ( S N , A g e ) SNo \rightarrow (SN, Age) SNo→(SN,Age)
-
伪传递律
- 若 X → Y X→Y X→Y和 Y W → Z YW→Z YW→Z在 R R R上成立,则 X W → Z XW→Z XW→Z在 R R R上也成立
-
分解律
- 若 X → Y X→Y X→Y和 Z Y ZY ZY在 R R R上成立,则 X → Z X→Z X→Z在 R R R上也成立
- S N o → ( S N , A g e ) SNo \rightarrow (SN, Age) SNo→(SN,Age) 与 S N o → S N , S N o → A g e SNo \rightarrow SN, SNo \rightarrow Age SNo→SN,SNo→Age 互逆
-
复合律
- 若 X → Y X→Y X→Y和 W → Z W→Z W→Z在 R R R上成立,则 X W → Y Z XW→YZ XW→YZ在 R R R上也成立
-
闭包算法
数据库安全保护
-
数据库的安全性:保护数据库以防止非法使用所造成的数据泄露、更改或破坏。
-
安全性控制:要尽可能地杜绝所有可能的数据库非法访问。
-
常用的安全性措施:
- 用户标识和鉴定(最外层)
- 用户存储权限控制(系统权限和对象权限(后者可由数据对象的创建者授予))
- 定义视图
- 数据加密
- 审计
-
在数据库系统中,定义用户存取权限称为授权
-
这些授权定义经过编译后以一张授权表的形式存放在数据字典中
-
授权粒度越细,授权子系统就越灵活,能够提供的安全性就越完善
-
SQL Server 2008的安全模型分为三层结构:
- 服务器安全管理
- 数据库安全管理
- 数据库对象的访问权限管理
-
角色指令
角色名称 权限 public 最基本的数据库角色 db_accessadmin 可以添加或删除用户标识 db_backupoperator 可以发出DBCC、CHECKPOINT和BACKUP语句 db_datareader 可以选择(取)数据库内任何用户表中的所有数据 db_datawriter 可以更改数据库内任何用户表中的所有数据 db_ddladmin 可以发出所有DDL语句,但不能发出GRANT(授权)、REVOKE或DENY语句 db_denydatareader 不能选择(取)数据库内任何用户表中的任何数据 db_denydatawriter 不能更改数据库内任何用户表中的任何数据 db_owner 在数据库中有全部权限 db_securityadmin 可以管理全部权限、对象所有权、角色和角色成员资格 -
完整性规则的组成:
- 触发条件
- 约束条件
- 违约响应
-
数据库的完整性:
- 保护数据库中数据的正确性、有效性和相容性
- 防止错误的数据进入数据库造成无效操作。(正确性)
-
数据库的安全性防范非法用户和非法操作;
数据库的完整性防止合法用户使用数据库时向数据库中加入不符合语义的数据。 -
完整性措施的防范对象是不合语义的数据
-
完整性约束条件是完整性控制机制的核心。
-
完整性约束的分类
- 值的约束(对数据类型、数据格式、取值范围和空值等进行规定)
和结构的约束(数据之间联系的约束) - 静态约束(年龄必须大于0)和动态约束(年龄只增不减)
- 值的约束(对数据类型、数据格式、取值范围和空值等进行规定)
-
实施完整性约束的5种方法
约束、规则、默认、存储过程、触发器 -
事务的特征ACID准则
-
原子性(Atomicity)
一个事务是一个不可分割的工作单位。事务在执行时,要么全做,要么全不做。不允许只完成事务的一部分。
-
一致性(Consistency)
数据库应该从一个一致状态转变到另一个一致状态。所谓数据库的一直状态是指数据库中的数据满足完整性约束
-
隔离性(Isolation)
如果多个事务并发执行,那么各个事务应该像独立执行一样,一个事务的执行不能被其他事务干扰。
-
持久性(Durability)
持久性指的是一个事务一旦提交,它对数据库中数据的改变就应该是持久的。即使数据库因故障而受到破坏,DBMS也应该能够恢复。
-
-
事物不一致性
- 丢失更新:同时操作,覆盖修改
- 污读:读取了后来回滚的数据
- 不可重读:读取后数据被修改,再次读取发现数据不一致
-
封锁
- 排它型封锁(Exclusive Lock),写封锁,X封锁,它采用的原理是禁止并发操作。
- 共享封锁(Share Lock),读封锁,S锁,它采用的原理是允许其他用户对同一数据对象进行查询,但不能对该数据对象进行修改。
-
封锁协议
- 一级封锁:
- 防丢失更新
- 事务T在修改数据对象之前必须对其加X锁,直到事务结束
- 二级封锁:
- 防脏读
- 在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后释放S锁。(也就是说,事务T在可以读取数据R的时候,已经获得S锁,此时其他事务已经提交且结束,R不会再回滚而改变)
- 三级封锁:
- 防不可重读
- 在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后并不释放S锁,而直到事务T结束才释放。
- 一级封锁:
-
存储过程的优点
- 模块化的程序设计
- 高效率的执行
- 减少网络流量
- 可以作为安全机制使用
- 三种触发器:DML、DDL、LOGIN