数据库系统概论复习


个人复习,有待完善……

第一章 绪论

数据是数据库中存储的基本对象

记录是计算机中表示和存储数据的一种格式或一种方法

数据库是长期存储在计算机内、有组织的、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。

数据库管理系统是位于用户与操作系统之间的一层数据管理软件。

数据库管理系统(DBMS)
——科学地组织和存储数据,高效地获取和维护数据
主要功能:
① 数据定义功能。提供数据定义语言,用户通过它可以方便地对数据库中的数据对象的组成与结构进行定义
② 数据组织、存储和管理。分类组织、存储和管理各种数据,包括数据字典、用户数据、数据的存储路径等。要确定以何种文件和存取方式在存储级上组织这些数据,如何实现数据之间的联系。数据组织和存储的基本目标都是提高存储空间利用率和方便存取,提供多种存取方法来提高存取效率。
③ 数据操纵功能。提供数据操纵语言,用户可以通过使用它操纵数据,实现对数据库的基本操作,如查询、插入、删除和修改等
④ 数据库的事务管理和运行管理。数据库在建立、运用和维护时由数据库管理系统统一管理和控制,以保证事务的正确运行,保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统恢复
⑤ 数据库的建立和维护功能。包括数据库初始数据的输入、转换功能,数据库的转储、回复功能,数据库的重组织功能和性能监视、分析功能等
⑥ 其他功能。包括数据库管理系统与网络中其他软件系统的通信功能,一个数据库管理系统与另一个数据库管理系统或者文件系统的数据转换功能,异构数据库之间的安防和互操作功能等

数据库系统是由数据库、数据库操作系统(及其应用开发工具)、应用程序和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统。

数据管理技术经历了人工管理、文件系统和数据库系统三个阶段(P7)

数据库系统的特点:
① 数据结构化。数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别
② 数据的共享性高,冗余度低且易扩充。数据共享可以大大减少数据冗余,节约存储空间,还能避免数据之间的不相容性与不一致性。
③ 数据独立性高。包括物理独立性和逻辑独立性
物理独立性是指用户的应用程序与数据库中的数据的物理存储是相互独立的
逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的
④ 数据由数据库管理系统统一管理和控制。数据的安全性保护,完整性检查,并发控制,数据库恢复。

数据模型是对现实世界数据特征的抽象。数据模型是数据库系统的核心和基础。

根据模型应用的不同目的,可分为第一类概念模型,第二类逻辑模型和物理模型。

逻辑模型包括层次模型、网状模型、关系模型等,是按计算机系统的观点对数据建模。

数据模型通常由数据结构、数据操作和数据的完整性约束条件三部分组成
层次模型是数据库系统中最早出现的数据模型

开发、管理和使用数据库系统的人员主要包括数据库管理员、系统分析员和数据库设计人员、应用程序员和最终用户

数据库管理员职责:
① 决定数据库中的信息内容和结构
② 决定数据库的存储结构和存取策略
③ 定义数据的安全性要求和完整性约束条件
④ 监控数据库的使用和运行
⑤ 数据库的改进和重组、重构

第二章 关系数据库

在关系模型中,现实世界的实体以及实体之间的各种联系均用单一的结构类型,即关系表示。
若关系中的某一属性组的值能唯一标识一个元组,而其子集不能,则称该属性为候选码。
若一个关系有多个候选码,则选定其中一个为主码。
候选码的诸属性称为主属性,不包含在任何候选码中的属性称为非主属性或非码属性。
关系模式的所有属性是这个关系模式的候选码,称为全码。
关系可以有三种类型,基本关系(基本表或者基表)、查询表和视图表。
基本表是实际存在的表,是实际存储数据的逻辑表示。
查询表是查询结果对应的表。
视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。

关系模型中常用的关系操作有:查询和插入、删除、修改
查询操作又可以分为选择、投影、连接、除、并、差、交、笛卡尔积
关系操作的特点是集合操作方式,即操作对象和结果都是集合。
结构查询语言SQL:是集查询、数据定义语言、数据操作语言和数据控制语言于一体的关系数据语言。是关系数据库的标准语言
关系模型中有三类完整性约束:实体完整性、参照完整性和用户定义的完整性
关系数据库中的每一个元组应该是可区分的,是唯一的。
实体完整性:主码(或者主码中的属性)不能取空值
例如:学生(学号,姓名,性别,专业,年龄)关系中学号为主码,则学号不能取空值
相应地,关系模型中以主码作为唯一性标识
参照完整性

  • 例2.1
    学生(学号,姓名,性别,专业号,年龄)
    专业(专业号,专业名)
    学生关系引用了专业关系的主码,即学生关系中的某个属性必须参照专业关系中的属性取值。专业号属性是学生关系的外码。参照关系为学生关系,被参照关系为专业关系
  • 例2.2
    学生(学号,姓名,性别,专业号,年龄)
    课程(课程号,课程名,学分)
    选修(学号,课程号,成绩)
    选修关系中的某些属性的取值需要参照其他关系的属性取值
  • 例2.3
    学生(学号,姓名,性别,专业号,年龄,班长)
    学号属性是主码,班长属性表示该学生所在班级的班长的学号,引用了本关系中的学号属性。
    外码不一定要与相应的主码同名。
    参照完整性规则:若属性F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须:或者取空值,或者等于S中某个元组的主码值
    对于例2.1中,学生关系中的每个元组的专业号属性只能去下面两类值
    ① 空值,表示尚未给该学生分配专业
    ② 非空值,该值必须为专业关系中某个元组的专业号值,表示该学生不可能分配到一个不存在的专业中。即被参照关系专业中一定存在一个元组,他的主码值等于该参照关系学生中的主码值
    关系代数是一种抽象的查询语言,它用对关系的运算来表达查询
    关系代数的运算对象是关系,运算结果也是关系,运算符分为集合运算符和专门的关系运算符
    定义:域,笛卡尔积,关系,元组,属性
    候选码,主码,外码
    关系模式,关系,关系数据库

第三章 SQL语言

SQL语言的特点:
① 综合统一。SQL语言集数据定义语言、数据操纵语言、数据控制语言的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动
② 高度非过程化。只要提出“做什么”,而无需指明“怎么做”,因此无需了解存取路径。存取路径的选择以及SQL的操作过程有系统自动完成。
③ 面向集合的操作方式。不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新的对象也可以是元组的集合。
④ 以同一种语法结构提供多种使用方法。既是独立的语言,独立地用于连机交互的使用方式,用户在终端键盘上直接键入SQL命令对数据库进行操作,又是嵌入式语言,能够嵌入到高级语言程序中,供程序员设计程序时使用
⑤ 语言简洁,易学易用。功能性极强。

视图是从一个或者几个基本表导出的表。它本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据。

视图是一个虚表。

操作对象操作方式(创建,删除,修改)
模式Create schema,Drop schema
Create table,Drop table,Alter table
视图Create view,Drop view
索引Create index,Drop index,Alter index

定义模式:create schema<模式名>authorization<用户名>
如果没有指定<模式名>,那么<模式名>隐含为<用户名>

  • 例如:为用户WANG定义一个学生-课程模式S-T
    create schema ”S-T” authorization WANG;
    删除模式:drop schema<模式名><cascade|restrict>
    其中cascade和restrict两者必选其一
    cascade(级联),表示在删除模式的同时,把该模式中所有的数据库对象全部删除
    restrict(限制),表示如果该模式中已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。只有当该模式下没有任何下属的对象时才能执行drop schema语句。
    基本表的定义、删除与修改
  • 例3.7 建立学生选课表SC
    Create table SC
    (Sno char(10),
    Cno char(4),
    Grade int,
    Foreign key(Sno,Cno).
    Foreign key (Sno) references Student(Sno),
    Foreign key (Cno) references Course(Cno));

每一个基本表都属于某一个模式,一个模式包含多个基本表。

  • 例:向Student表中增加入学时间,其数据类型为DATE
    Alter table Student
    Add S_entrance DATE

不论基本表中原来是否已有数据,新增加的列一律为空值。

删除基本表:drop table<表名>[cascade|restrict]

建立索引是加快查询速度的有效手段

数据库索引常见的类型有:顺序文件上的索引,B+树索引,散列索引,位图索引

建立索引:create [unique][cluster]index<索引名> on<表名>

每个列名后面还可以用<次序>指定索引值的排列次序,可以选择ASC(升序)或者DESC(降序),默认值为ASC

  • 例3.13 为学生-课程数据库中的Student、Course和SC三个表建索引。其中Student表按照学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。
    Create unique index Stusno on Student(Sno)
    Create unique index Coucno on Course(Cno)
    Create unique index SCno on SC(Sno ASC,Cno DESC)

  • 例3.14 将SC表中的SCno索引名改为SCSno
    Alter index SCno rename to SCSno

  • 例3.15 删除Student表中的Stusname索引
    Drop index Stusname

删除索引时,系统会同时从数据字典中删去有关该索引的描述

数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义,各类用户对数据库的操作权限、统计信息等。

第四章 数据库安全性

数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。

数据库安全性控制技术:用户身份鉴定、多层存取控制、审计、视图和数据加密等安全技术。

用户身份鉴定有:静态口令鉴定,动态口令鉴定,生物特征鉴别,智能卡鉴别

存取控制机制主要包括定义用户权限和合法权限检查两部分

定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统。

自主存取控制——用户对于不同数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且还可将其拥有的权限转授给其他用户。
强制存取控制——每一个数据库对象都被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有许可证的用户才可以存取。

用户权限是由两个要素组成:数据库对象和操作类型
授权:授予与收回
SQL中使用grant和revoke语句向用户授予或收回对数据的操作权限

强制存取控制方法:是指系统为保证更高程度的安全性,按照TDI/TCSEC标准中安全策略的要求所采取的强制存取检查手段。

主体是系统中的活动实体,就包括数据库管理系统所管理的实际用户,也包括代表用户的各进程。客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。

敏感度标记被分为若干等级,例如:绝密TS,机密S,可信C,公开P
密级的次序是TS>=S>=C>=P

强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。
自主存取控制和强制存取控制共同构成数据库管理系统的安全机制。
审计功能把用户对数据库的所有操作自动记录下来,放入审计日志中。审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找到非法存取的人、时间和内容等。还可以通过对审计日志分析,对潜在的威胁提前采取措施加以防范。

第五章 数据库完整性

数据库完整性是指数据的正确性和相容性

为维护数据库的完整性,数据库管理系统必须能够实现如下功能:
① 提供定义完整性约束条件的机制
② 提供完整性检查的方法
③ 进行违约处理

实体完整性:
关系模式的实体完整性在create table中用primary key定义。

  • 例5.1 将Student表中的Sno属性定义为码
    Create table Student
    (Sno char(9) primary key, /在列级定义主码/
    Sname char(20) not null,
    Ssex char(2),
    Sage samllint,
    Sdept char(20)
    );
    或者:
    Create table Student
    (Sno char(9),
    Sname char(20) not null,
    Ssex char(2),
    Sage samllint,
    Sdept char(20),
    Primary key(Sno) /在表级定义主码/
    );

  • 例5.2 将SC表中的Sno、Cno属性组定义为码
    Create table SC
    (Sno char(9)not null,
    Cno char(4)not null,
    Grade smallint,
    Primary key(Sno,Cno) /只能在表级定义主码/
    );

参照完整性:
关系模型的参照完整性在create table中用foreign key短语定义哪些列为外码,用references短语指明这些外码参照哪些表的主码。

  • 例5.3 定义SC中的参照完整性
    Create table SC
    (Sno char(9)not null,
    Cno char(4)not null,
    Grade smallint,
    Primary key(Sno,Cno), /在表级定义实体完整性/
    Foreign key(Sno) references Student(Sno),/在表级定义参照完整性/
    Foreign key(Cno) references Course(Cno) /在表级定义参照完整性/
    );

可能破坏参照完整性的情况及违约处理

被参照表(例如Student)参照表(例如SC)违约处理
可能破坏参照完整性插入元组拒绝
可能破坏参照完整性修改外码值拒绝
删除元组可能破坏参照完整性拒绝/级联删除/设置为空值
修改主码值可能破坏参照完整性拒绝/级联修改/设置为空值

当上述的不一致发生时,系统可以采用以下策略进行处理:
① 拒绝执行。不允许该操作的执行。默认策略
② 级联操作。当删除或修改被参照表的一个元组导致与参照表SC的不一致时,删除或修改参照表中的所有导致不一致的元组。
③ 设置为空值。当删除或修改被参照表的一个元组导致不一致时,则将参照表中的所有照成不一致的元组的对应属性设置为空值。

  • 例5.4 显式说明参照完整性的违约处理实例
    Create table SC
    (Sno char(9),
    Cno char(4),
    Grade smallint,
    Primary key(Sno,Cno), /在表级定义实体完整性,Sno、Cno都不能取空值/
    Foreign key(Sno) references Student(Sno),/在表级定义参照完整性/
    On delete cascade
    /当删除Student表中的元组时,级联删除SC表中相应的元组/
    On update cascade
    /当更新Student表中的元组时,级联更新SC表中相应的元组/
    Foreign key(Cno) references Course(Cno) /在表级定义参照完整性/
    On delete no action
    /当删除Course表中的元组造成与SC表不一致时,拒绝删除/
    On update cascade
    /当更新Course表中的Cno时,级联更新SC表中的相应的元组/
    );

用户定义的完整性:
针对某一具体应用的数据必须满足的语义要求。违约处理:拒绝执行
在create table中定义属性的同时,可以根据应用要求定义属性上的约束条件,即属性值限制,包括:
① 列值非空(not null)

  • 例5.5 在定义SC表时,说明Sno、Cno、grade属性不允许去空值
    Create table SC
    (Sno char(9)not null,
    Cno char(4)not null,
    Grade smallint not null,
    Primary key(Sno,Cno), /在表级定义实体完整性,隐含了Sno、Cno都不允许取空值,在列级不允许取空值的定义可不写/
    ……
    );

② 列值唯一(unique)

  • 例5.6 建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码
    Create table DEPT
    (Deptno numeric(2),
    Dname char(9) unique not null,/要求Dname列值取唯一,且不能取空值/
    Location char(10),
    Primary key(Deptno)
    );

③ 检查列值是否满足一个条件表达式(check短语)

  • 例5.7 Student表的Ssex只允许取“男”或“女”
    Create table Student
    (Sno char(9) primary key, /在列级定义主码/
    Sname char(20) not null, /Sname属性不允许取空值/
    Ssex char(2) check(Ssex in(‘男’,‘女’)),
    /性别属性Ssex只允许取男或女/
    Sage samllint,
    Sdept char(20)
    );
  • 例5.8 SC表的grade值应该在0和100之间
    Create table SC
    (Sno char(9),
    Cno char(4),
    Grade smallint check(grade>=0 and grade<=100),/grade取值范围是0到100/
    Primary key(Sno,Cno),
    Foreign key(Sno) references Student(Sno),
    Foreign key(Cno) references Course(Cno)
    );

元组上的约束条件:

  • 例5.9 当学生性别为男时,其名字不能以Ms.打头
    Create table Student
    (Sno char(9),
    Sname char(20) not null,
    Ssex char(2),
    Sage samllint,
    Sdept char(20),
    Primary key(Sno),
    Check (Ssex=’女’or Sname not like‘Ms.%’)
    ); /定义了元组中Sname和Ssex两个属性值之间的约束条件/

完整性约束命名子句:
Constraint<完整性约束条件名><完整性约束条件>
<完整性约束条件>包括:not null ,unique ,primary key ,foreign key ,check短语

  • 例5.10 建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是男或女
    Create table Student
    (Sno numeric(6)
    Constraint C1 check(Sno between 90000 and 99999),
    Sname char(20)
    Constraint C2 not null,
    Sage samllint
    Constraint C3 check(Sage<30),
    Ssex char(2)
    Constraint C4 check (Ssex in(‘男’,’女’)),
    Constraint StudentKey Primary key(Sno),
    );

修改表中的完整性限制:Alter table

  • 例5.12 去掉例5.10中Student表中对性别的限制。
    Alter table Student
    Drop constraint C4;

SQL支持域的概念,并可以用create domain语句建议一个域以及该域应该满足的完整性约束条件,然后就可以用域来定义属性。
断言:create assertion
触发器是用户定义在关系表上的一类由事件驱动的特殊过程。
SQL使用create trigger命令建立触发器,其一般格式为:
Create trigger<触发器名>/每当触发事件发生时,该触发器被激活/
{before|after}<触发事件>on<表名>/指明触发器激活的时间是在执行触发事件前或后/

第六章 关系数据库理论

定义:函数依赖、部分函数依赖、完全函数依赖、传递依赖、
候选码、主码、外码、全码、
1NF、2NF、3NF、BCNF、多值依赖、4NF

第七章 数据库设计

数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。

数据库设计的基本步骤:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护

进一步分析和表达用户的需求的分析方法:结构化分析SA,自顶向下、逐层分解的方式分析系统

数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程几部分。其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构。数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。

E-R图提供了表示实体型、属性和联系的方法。实体型用矩形表示,属性用椭圆型表示,联系用菱形表示。

E-R图的集成:

  • 合并。解决各分E-R图之间的冲突,将分E-R图合并起来生成初步E-R图
  • 修改和重构。消除不必要的冗余,生成基本E-R图

各子系统的E-R之间的冲突主要由三类:属性冲突、命名冲突和结构冲突。
逻辑结构是独立于任何一种数据模型的信息结构,逻辑结构设计的任务就是把概念结构设计阶段设计好的基本的E-R图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构。

数据库的物理设计通常分为两步:

  • 确定数据库的物理结构,在关系数据库中主要是指存取方法和存储结构。
  • 对物理结构进行评价,评价的重点是时间和空间效率。

如果评价结构满足原设计要求,则可进入到物理实施阶段,否则,就需要重新设计或修改物理结构,有时甚至要返回逻辑设计阶段修改数据模型。
通常关系数据库物理设计的内容主要包括为关系模式选择存取方法,以及设计关系、索引等数据库文件的物理存储结构。

常见的存取方法为索引方法(B+树索引、hash索引)和聚簇方法。

确定数据库的存储结构:确定数据结构的存放位置、确定系统配置
评价物理结构

第八章 数据库编程

嵌入式SQL把SQL语句嵌入到某种高级语言中,SQL语言用来存取数据库中的数据,主语言用来控制程序流程以及对取出的数据做进一步加工处理,利用高级语言的强大计算能力来实现复杂应用的需求。
SQL与主语言具有不同的数据处理方式。SQL是面向集合的,而主语言是面向记录的。所以,嵌入式SQL用游标来协调着这两种不同的处理方式。要掌握游标的概念,学会用游标来编写实际应用的应用程序。

第十章 数据库恢复技术

事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务是恢复和并发控制的基本单位。一个程序中包含多个事务。

事务具有四个特性:原子性、一致性、隔离性、持续性(ACID)

故障的类型:
① 事务内部故障
② 系统故障
③ 介质故障
④ 计算机病毒

恢复的实现技术:
建立冗余数据最常用的技术是数据转储和登记日志文件。
数据转储是数据库恢复中采用的基本技术。所谓转储即数据库管理员定期地将整个数据库复制到磁带、磁盘或其他存储介质上保存起来的过程。这些备用数据称为后备副本。

转储可以分为静态转储和动态转储,还可以分为海量转储方式和增量转储方式。所以数据转储可以分为:动态海量转储、动态增量转储、静态海量转储、静态增量转储

日志文件是用来记录事务对数据库的更新操作的文件。作用是:用来进行事务故障恢复和系统故障恢复,并协助后备副本及进行介质故障恢复。

登记日志文件时必须遵循两条原则:

  • 登记的次序严格按并发事务执行的时间次序
  • 必须先写日志文件,后写数据库

数据库镜像
保证数据一致性是对数据库的最基本的要求。事务是数据库的逻辑工作单位,只要数据库管理系统能够保证系统中一切事务的ACID特性,即事务的原子性、一致性、隔离性和持续性,也就保证了数据库处于一致状态。为了保证事务的原子性、一致性与持续性,数据库管理系统必须对事务故障、系统故障和介质故障进行恢复。数据转储和登记日志文件是恢复中最经常使用的技术。恢复的基本原理就是利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库。

事务不仅是恢复的基本单位,也是并发控制的基本单位。为了保证事务的隔离性和一致性,数据库管理系统需要对并发控制进行控制,第11章将进一步详解并发控制。

第十一章 并发控制

事务是并发控制的基本单位。

并发操作带来的数据不一致性包括丢失修改、不可重复读和读“脏”数据

封锁是实现并发控制的一个非常重要的技术。基本的封锁类型有两种:排他锁(X锁,写锁)和共享锁(S锁,读锁)。

封锁的方法可能会引起活锁和死锁等问题。

避免活锁的简单方法是采用先来先服务的策略。

解决死锁问题:一是采取一定措施来预防死锁的发生,二是允许发生死锁,采用一定的手段定期诊断系统中有无死锁,若有则解除之。

封锁的对象称为封锁粒度。

在多粒度封锁中一个数据对象可能以两种方式封锁:显式封锁和隐式封锁。显式封锁是应事务的要求直接加到数据对象上的锁。隐式封锁是该数据对象没有被独立加锁,是由于其上级节点加锁而使该数据对象加上了锁。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值