数据库系统概论

数据库系统概论

  • 数据库系统概论期中复习——基础篇
    • 1 绪论
      • 1.1 数据库系统概述
      • 1.2 数据模型
      • 1.3 数据库系统的结构
      • 1.4 数据库系统的组成
    • 2 关系数据库
      • 2.1 关系数据结构及形式化定义
      • 2.2 关系操作
      • 2.3 关系的完整性
      • 2.4 关系代数
    • 3 关系数据库标准语言SQL
      • 3.1 概念性的东西
      • 3.2 数据定义
      • 3.3 数据查询
      • 3.4 数据更新
      • 3.5 空值的处理
      • 3.6 视图
    • 4 数据库安全性
    • 5 数据库完整性
      • 5.1 实体完整性——主码
      • 5.2 参照完整性——外码
      • 5.3 用户定义的完整性
      • 5.4 完整性约束命名子句 CONSTRAINT
      • 5.5 断言
      • 5.6 触发器
  • 设计与应用开发
    • 6 关系数据理论
      • 6.1 思路概述
      • 问题的提出——相关概念
      • 数据依赖的公理系统——Armstrong公理系统
        • 公理系统
    • 数据库设计
      • 数据库设计概述

数据库系统概论期中复习——基础篇

1 绪论


1.1 数据库系统概述

  • 数据库的四个基本概念:
    • 数据:描述事物的符号记录称为数据
    • 数据库:长期储存在计算机内、有组织的可共享的大量数据的集合
      • 数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性
      • 特点:永久存储、有组织、可共享
    • 数据库管理系统:计算机的基础软件(位于用户与操作系统之间)
      • 数据的定义(DDL)、组织、存储、管理、操纵(DML)功能
      • 数据库的事务管理和运行管理、数据库的建立和维护功能、其他功能
    • 数据库系统:由数据库、数据库管理系统(及其开发工具)、应用程序和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统
  • 数据管理技术经历了人工管理、文件系统、数据库系统三个阶段:
    • 人工管理:数据不保存、应用程序管理数据、数据不共享、数据不具有独立性
    • 文件系统:数据可长期保存、由文件系统管理数据、数据共享性差、冗余度大、数据独立性差
    • 数据库系统
      • 数据结构化:不仅数据内部是结构化的,而且整体式结构化的,数据之间是具有联系的,这个联系由数据库管理系统维护。不仅存储结构化,存取的方式也很灵活,可以细化到一条记录,而文件系统存取单位是记录。
      • 数据的共享性高、冗余度低且易扩展:数据共享减少数据冗余,还能避免数据之间的不相容性和不一致性。面向整个系统使得数据库系统弹性大,易于扩充。
      • 数据独立性高:物理独立性(物理存储)与逻辑独立性(逻辑结构)保证数据和程序的独立性。数据独立性是由数据库管理系统提供的二级映像功能保证的。
      • 数据由数据库管理系统统一管理和控制:包括:数据的安全性保护(防止不合法使用造成的数据泄密和破坏)、数据的完整性检查(数据的正确性、有效性、相容性)、并发控制、数据库恢复

1.2 数据模型

  • 数据模型是对现实世界数据特征的抽象,用来描述数据、组织数据和对数据进行操作。三要素数据结构(描述数据库的组成对象及对象之间的联系,根据数据结构的类型来命名数据模型——对系统静态特征的描述)、对数据的操作(对数据库中的各种对象的实例允许执行的操作的集合,查询+更新(插入、删除、修改)——对系统动态特征的描述)和对数据的完整性约束(实体完整性+参照完整性)
  • 分类:
    • 概念模型:用于数据库设计
    • 逻辑模型:包括层次模型、网状模型、关系模型、面向对象模型、对象关系数据模型、半结构化数据模型。主要用于数据库管理系统的实现
    • 物理模型:描述数据在系统内部、磁盘或磁带上的表示方式和存取方式,是面向计算机系统的
  • 概念模型
    • 几个概念:实体、属性、码、实体型、实体集、联系
    • 概念模型的表示方法:E-R图(实体-联系法Entity-Relationship approach)
  • 逻辑模型
    • 层次模型——树:一个根节点,其他节点有且只有一个父节点。插入时,如果没有相应的父节点就没办法插入;删除时,删除父节点则删除一整枝。
    • 网状模型——网:允许一个以上的结点无双亲,一个节点可以有多于一个的双亲。
    • 关系模型:
      • 每个关系数据的结构是一张规范化的二维表
      • 基本概念:关系(一张表)、元组(表里的一行)、属性、码、域、分量(元组的属性值,每个分量不可分)、关系模式R(U,F)

1.3 数据库系统的结构

  • 从数据库应用开发人员角度看,数据库系统通常采用三级模式结构,这是数据库系统内部的系统结构
  • 从数据库最终用户角度看,数据库系统的结构分为单用户结构、主从式结构、分布式结构、客户-服务器、浏览器-应用服务器 / 数据库服务器多层结构等,这是系统外部的体系结构
  • 模式:数据库中全体数据的逻辑结构和特征的额描述,仅涉及型的描述,不涉及具体的值,同一个模式可以有很多实例,相对稳定
  • 数据库系统的三级结构模式
    • 模式——数据库中全体数据的逻辑结构和特征的额描述,所有用户的公共数据视图,一个数据库只有一个模式,用DDL定义模式
    • 外模式:数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用给有关的数据的罗吉表示,通常是模式的子集,应用程序根据外模式编写
    • 内模式:存储模式,一个数据库只有一个内模式,是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式(比如:升序降序、聚簇存储、B+树索引、hash索引,是否压缩是否加密)
  • 数据库的二级映像功能与数据独立性:
    • 外模式 / 模式映像:保证了数据与程序的逻辑独立性
    • 模式 / 内模式映像:保证了数据与程序的物理独立性

1.4 数据库系统的组成

  • 硬件平台及数据库、软件、人员

2 关系数据库

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

  • 关系
    • 候选码:某一属性组的值能唯一地标识一个元组,其子集不能(全码是针对候选码说的)
    • 主码:若一个关系中有多个候选码,选修顶一个作为主码
    • 主属性:包含在任何一个候选码中的属性
    • 规范化的关系称为范式
  • 关系模式:关系是关系模式在某一时刻的状态或内容,关系模式是静态的、稳定的,关系是动态的、随时间不断变化的。

2.2 关系操作

  • 关系模型中常用的关系操作包括查询操作(分为:选择、投影、连接、除、并、交、差、笛卡尔积)和插入、删除、修改操作两大部分,操作的对象都是集合
  • 关系操作的表示方法:关系代数、关系演算,介于关系代数和关系演算之间的SQL结构化查询语言

2.3 关系的完整性

  • 实体完整性:主属性不为空
  • 参照完整性:关系A中的属性a(不是码)是参照关系B中的属性b的(b必须是B中的主码),则a是A的外码,则a的取值或者为空,或者为B中b的取值
  • 用户定义的完整性

2.4 关系代数

  • 传统的集合运算:并、交、差、笛卡尔积
  • 专门的关系运算:选择、投影、连接、除

3 关系数据库标准语言SQL

3.1 概念性的东西

  • 分类:
    • 数据定义语言DDL
    • 数据操纵语言DML

3.2 数据定义

  • 概述:
    • 操作对象:模式SCHEMA、表TABLE、视图VIEW、索引INDEX
    • 操作方式:创建CREATE、删除DELETE、修改ALTER
    • **注意:**模式和视图不可以修改
  • 创建模式,用户就要有数据库管理员权限或者是获得了管理员授予的权限
  • 模式操作
#定义模式
CREATE SCHEMA<模式名>AUTHORIZATION<用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]
#删除模式
DROP SCHEMA<模式名><CASCADE|RESTRICT>
  • 基本表操作
    • 基本表属于模式,所以创建的时候 CREATE TABLE "S-T".Student(...);
    • 也可以设置搜索路径 SET search_path TO "S-T",PUBLIC;
#定义基本表
CREATE TABLE<>(<列名><数据类型>[列级完整性约束条件]
	[,<列名><数据类型>[列级完整性约束条件]]
	...
	[,<表级完整性约束条件>]);
#修改基本表
ALTER TABLE<表名>
	[ADD[COLUMN]<新列名><数据类型>[完整性约束]]
	[ADD<表级完整性约束>]
	[DROP[COLUMN]<列名>[CASCADE|RESTRICT]]
	[DROP CONSTRAINT<完整性约束名>[RESTRICT|CASCADE]]
	[ALTER COLUMN<列名><数据类型>]
#删除基本表
DROP TABLE<表名>[RESTRICT|CASCADE];
  • 索引操作:索引记录在数据字典中
#建立索引
CREATE[UNIQUE][CLUSTER] INDEX<索引名>
	ON<表名>(<列名>[<次序>][,<列名>[<次序>]]...);
	#其中,<次序>可选ASC——升序、DESC——降序
#修改索引
ALTER INDEX<旧索引名>RENAME TO<新索引名>;
#删除索引
DROP INDEX<索引名>;

3.3 数据查询

  • 一般格式
    • DISTINCT与ALL:DISTINCT去重
    • WHERE子句常用的查询条件
      • =,>,<,>=,<=,!=即<>,!>,!<;NOT+以上
      • BETWEEN AND, NOT BETWEEN AND
      • IN, NOT IN
      • LIKE, NOT LIKE
      • IS NULL, IS NOT NULL
      • AND, OR, NOT
    • 字符匹配 [NOT]LIKE'<匹配串>'[ESCAPE'<换码字符>']
      • 通配符:’_‘代表单个字符,’%'代表任意字符
      • ESCAPE’‘表示’'为换码字符
SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]...
FROM<表名或视图名>[,<表名或视图名>...]|(<SELECT语句>)[AS]<别名>
[WHERE<条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC|DESC]];
  • 一些高级的功能
    • ORDER BY子句
    • 聚集函数
    • GROUP BY子句
  • 连接查询
  • 嵌套查询
  • 集合查询
  • 基于派生表的查询

3.4 数据更新

3.5 空值的处理

3.6 视图

4 数据库安全性

数据库管理系统提供统一的数据保护功能,主要包括数据的安全性(第四章)和完整性(第五章)。数据库的安全性是指保护数据库防止不合法使用所造成的数据泄露、更改或破坏

  • 数据库的不安全因素
    • 非授权用户对数据库的恶意存取和破坏:盗用身份(安全措施:用户身份鉴别、存取控制、视图)
    • 数据库中重要或敏感的数据被泄露:重要数据(安全措施:强制存取控制、数据加密存储、加密传输、审计功能)
    • 安全环境的脆弱性:计算机硬件、操作系统、网络系统等的安全性(安全措施:可信计算机系统的概念和标准)
  • 安全标准:TCSEC\TDI(由低到高)
    • D:最低标准,如DOS
    • C1:实现了用户和数据的分离,提供非常初级的自主安全保护,进行DAC(自主存取控制)
    • C2:将C1的DAC进一步细化,以个人身份注册负责,并实施审计和资源隔离
    • B1:对标记的主体和客体实施**强制存取控制(MAC)**以及审计等安全机制
    • B2:结构化保护,对系统内的所有主体和课题实施DAC和MAC
    • B3:安全域,该级的TCB必须满足访问监控器的要求,审计跟踪能 力更强,并提供系统恢复过程
    • A1:验证设计,即提供B3级保护的同时给出系统的形式化 设计说明和验证以确信各安全保护真正实现。
  • 数据库安全性控制
    • 用户身份鉴别:口令、生物特征、智能卡
    • 多层存取控制:
      • 自主存取控制DAC
        • C2级
        • 用户对不同的数据对象有不同的存取权限
        • 不同的用户对同一对象也有不同的权限
        • 用户还可将其拥有的存取权限转授给其他用户(不允许循环授权)
        • 通过GRANTREVOKE语句实现
        • REVOKE语句要分[CASCADE|RESTRICT]前者代表级联操作,授权给别人的权限一并收回
        • 用户权限由“数据对象”和“操作类型”组成
      • 强制存取控制MAC
        • B1级
        • 主体:系统中活动的实体,用户或者代表用户的各进程
        • 客体:文件、基本表、索引、视图
        • 敏感度标记:绝密(TS) ≥ \ge 机密(S) ≥ \ge 可信(C) ≥ \ge 公开(P)
        • 主体许可证级别 ≥ \ge 客体密级,主体才能读取相应客体、
        • 主体许可证级别 ≤ \le 客体密级,主体才能相应客体(用户可以为写入的数据对象赋予高于自己许可证级别的密级)
      • 系统首先进行DAC,通过对DAC的允许存取的数据库对象再由系统自动进行MAC,通过MAC的才可以存取
      • 下面是SQL语句代码
GRANT <权限>[,<权限>]...
ON <对象类型><对象名>[,<对象类型><对象名>]...
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
# WITH GRANT OPTION则获得权限的人还可以接着
# 往下转授,没有的话就只能使用,不能转授
REVOKE <权限>[,<权限>]...
ON <对象类型><对象名>[,<对象类型><对象名>]...
TO <用户>[,<用户>]...
[CASCADE|RESTRICT];
# CASCADE表示级联操作,授权给别的用户的权限一并收回

# 创建数据库模式的权限
CREATE USER <username>[WITH][DBA|RESOURCE|CONNECT];
# DBA啥都可以操作
# RESOURCE 不能CREATE USER/SCHEMA 
# 		   可以CREATE TABLE,可以登录数据库查询、操纵数据
# CONNECT  只能在被授权的情况下登录数据库、查询操纵数据

# 数据库角色相关
# 角色创建
CREATE ROLE <角色名>
# 给角色授权
GRANT <权限>[,<权限>]...
ON <对象类型>对象名
TO <角色>[,<角色>]...;
# 授予角色
GRANT <角色1>[,<角色2>]...
TO <角色3>[,<用户1>]...;
[WITH ADMIN OPTION]
# 收回角色
REVOKE <权限>[,<权限>]...
ON <对象类型>对象名
FROM <角色>[,<角色>]...;
  • 视图:视图机制间接实现支持存取谓词的用户权限定义
CREATE VIEW CS_Student
AS 
SELECT *
FROM Student
WHERE Sdept = 'CS'

GRANT SELECT
ON CS_Student
TO wang;

GRANT ALL PRIVILEGES
ON CS_Student
To zhang;
  • 审计
    • 审计日记(Audit Log)将用户对数据库的所有操作记录在上面
    • C2以上
AUDIT/NOAUDIT ALTER,UPDATE
ON SC;
  • 数据加密
    • 存储加密
    • 传输加密
  • 其他安全性保护:推理控制、隐蔽信道、数据隐私

5 数据库完整性

数据库的完整性是指数据的正确性(符合现实世界语义)和相容性(符合逻辑),数据库管理系统需要做:定义完整性约束条件、提供完整性检查、违约处理

5.1 实体完整性——主码

  • 定义
    • 列级定义主码:定义完属性直接在后面加PRIMARY KEY
    • 表级定义主码:在定义的最后加PRIMARY KEY(列名)
  • 完整性检查和违规处理
    • 检查发生:插入记录、对主码列进行更新操作
    • 违规处理:拒绝操作

5.2 参照完整性——外码

  • 定义
    • 只能在表级定义约束条件FOREIGN KEY (Sno) REFERENCES STUDENT(Sno);
    • 加括号!
  • 完整性检查和违约处理
被参照表 参照表 违约处理
可能破坏参照完整性 插入元组 拒绝
可能破坏参照完整性 修改外码值 拒绝
删除元祖 可能破坏参照完整性 拒绝/级联删除/设置为空置
修改主码值 可能破坏参照完整性 拒绝/级联删除/设置为空置
  • 拒绝NO ACTION——默认
  • 级联CASCADE
  • 设置为空值——将参照表中不一致的设置为空值
  • 设置的时候ON DELETE NO ACTIONON UPDATE CASCADE等直接加在FOREIGN KEY...REFERENCES...语句后面

5.3 用户定义的完整性

  • 属性上的约束条件——列级完整性约束
    • 定义
      • 定义的时候直接加条件NOT NULL或者UNIQUE
      • 在定义列的时候加CHECK(Ssex IN ('男','女'));
    • 检查和违约处理:插入或修改时检查,不满足则拒绝
  • 元组上的约束条件
    • 定义:在表级约束条件里写CHECK(Ssex = '女' OR Sname NOT LIKE 'Ms.%');
    • 检查和违约处理:插入或修改时检查,不满足则拒绝

5.4 完整性约束命名子句 CONSTRAINT

  • 给约束条件取名字的东西CONSTRAINT <完整性约束条件名><完整性约束条件>
  • 可以修改DROP CONSTRAINT C1或者ADD CONSTRAINT C3 CHECH(Sage<40)

5.5 断言

断言是更一般性的约束,可以定义设计多个表或聚集操作的比较复杂的完整性约束。断言创建以后,任何对断言中所涉及的关系操作都会出发关系数据库管理系统对断言的检查,不符合的就拒绝执行。

  • 创建CREATE ASSERTION <断言名>
  • 删除DROP ASSERTION <断言名>

5.6 触发器

触发器是会被事件(任何用户对表的增删改操作)触发的特殊过程,更加厉害的数据控制能力

  • 定义触发器
CREATE TRIGGER <触发器名>
{BEFORE|AFTER} <触发事件> ON <表名>
REFERENCING NEW|OLD ROW AS <变量>	#引用的是行
FOR EACH {ROW|STATEMENT}			#ROW是行级触发器
[WHEN <触发条件>] <触发动作体>		#用BEGIN...END定义
  • 详细说明
    • 只有创建表的用户才有创建触发器的权限
    • 触发器个数通常有限,且不可重名
    • 触发器只能定义在基本表上,不能定义在视图上
    • 如果省略触发条件,则触发动作体在触发器激活后立即执行
  • 激活触发器
    • 同一个表上多个触发器激活时,先执行BEFORE触发器,然后是SQL语句,然后是AFTER触发器
    • 同一表的BEFORE触发器按照创建顺序执行,也可能按照触发器名的字母顺序
  • 删除触发器DROP TRIGGER <触发器名> ON <表名>

设计与应用开发


6 关系数据理论

6.1 思路概述

  • 为什么要有关系理论?
    • 在数据库的逻辑设计阶段,如何评价关系模式设计的好坏
  • 关系理论考虑到哪些方面?
    • 定性:数据冗余与数据异常(插入、更新、删除)——需要会判断可能存在的异常——本质原因是数据依赖
      • ——目的要消除不合适的数据依赖
      • ——定义出不合适的数据依赖
        • 函数依赖:部分函数依赖和传递函数依赖
        • 多值依赖:
    • 定量:关系范式——定量评价关系模式的好坏——必考
      • 1NF:满足关系最基本的要求:列中没有列
      • 2NF:消除了非主属性对码的部分函数依赖
      • 3NF:消除了非主属性对码的传递函数依赖
      • BCNF:消除主属性对码的传递和部分函数依赖
      • 4NF:消除多值依赖
  • 基于关系理论要怎么做?
    • 如何求码和函数依赖?
      • 求码?码:函数确定一个元组的决定值的每个属性都是码
        • Armstrong公理系统:重点在于属性集X关于函数依赖F的闭包——能从X由F推出多少东西

问题的提出——相关概念

关系数据理论是在数据库的逻辑设计阶段评价一个数据库设计的好坏的东西,企图定性甚至定量评价一个关系模式设计的好坏,其次要考虑如何改进现有的关系模式。
定性评价:从数据冗余度和数据异常(插入、更新、删除)的角度考虑。(本质上的问题来源是数据依赖
定量评价:规范化

  • 数据依赖:
    • 主要分类:
      • 函数依赖:消除不合适的:传递函数依赖和部分函数依赖(消除非主属性对码的函数依赖和部分函数依赖)
      • 多值依赖:不好,也要消除
    • 平凡、非平凡
    • 完全函数依赖、传递函数依赖
  • 如何求一个关系模式的候选码
    • 简单情况下可以试凑(枚举),注意在关系中没有出现过的属性是主属性,不要落下了
    • 还有一个专门的算法后面会讲
  • 规范化范式
    • 1NF
    • 2NF
    • 3NF
    • BCNF
    • 4NF
  • 多值依赖
    • 【例】学校中一门课由多个教室讲授、使用一套参考书、一个老师可以讲授多门课程——{课程C教员T参考书B}是个全码
    • 多值依赖具有对称性
    • 多值依赖具有传递性

数据依赖的公理系统——Armstrong公理系统

公理系统

定义:对于满足一组函数依赖 F F F的关系模式 R < U , F > R<U, F> R<U,F>

函数依赖是基于语义的,

数据库设计

数据库设计概述

你可能感兴趣的:(复习)