数据库期末笔记

2024-05-23

一、绪论

1.1 数据库系统概述

1.1.1 数据库的4个基本概念

  1. 数据:数据库存储的基本对象

  2. 数据库(DB):长期存储在计算机内、有组织的、可共享的大量数据的集合

  3. 数据库管理系统:位于用户和操作系统之间的一层数据管理软件。

    主要功能:

  4. 数据库系统:在计算机系统中引入数据库后的系统,由数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统。

1.1.2 数据管理技术的产生和发展(三个阶段)

1.1.3 数据库系统的特点

1.2.1 两类数据类型

1.2.2 概念模型

1.2.7 关系模型

二、关系数据库

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

2.1.1 关系

  1. 域:一组具有相同数据类型的值的集合
  2. 笛卡儿积:域上的一种集合运算
  3. 关系:R(D1,D2,…,Dn)
    1. 候选码:关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则该属性组为候选码
    2. 候选码的属性为主属性
    3. 全码:关系模式的所有属性是这个关系模式的候选码
    4. 关系的三种类型:
      1. 基本关系(基本表或基表):实际存在的表
      2. 查询表:查询结果对应的表
      3. 视图:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
    5. 关系的6个性质:
      1. 列是同质的
      2. 不同列可出自同一个域,称其中的每一列为一个属性,不同属性要给予不同属性名
      3. 列的顺序无所谓
      4. 任意两个元组的候选码不能取相同的值
      5. 行的顺序无所谓
      6. 分量必须取原子值,即每个分量都必须是不可分的数据项
    6. 范式:规范化的关系
      • 规范化:关系必须满足一定的规范条件:
        • 关系的每一个分量必须是一个不可分的数据项

2.1.2 关系模式

2.1.3 关系数据库

2.1.4 关系模型的存储结构

2.2 关系操作

2.2.1 基本的关系操作

2.2.2 关系数据语言的分类

2.3 关系的完整性

2.3.1 实体完整性

2.3.2 参照完整性

2.3.3 用户定义的完整性

2.4 关系代数

2.4.1 传统的集合运算

  1. 笛卡儿积

2.4.2 专门的集合运算

  1. 选择σ
  2. 投影Π
  3. 连接▷◁
    1. 等值连接
    2. 非等值连接
    3. 自然连接:两个关系中进行比较的分量必须是同名的属性组,并且在结果在中把重复的属性列去掉。
      • 悬浮元组:被舍弃的元组
      • 外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。
      • 自动去重
    4. 除运算(÷)

三、关系数据库标准语言SQL

3.1.2 SQL的特点

  1. 综合统一:SQL集数据定义语言,数据操纵语言,数据控制语言的功能于一体。
  2. 高度非过程化
  3. 面向集合的操作方式
  4. 以同一种语言结构提供多种使用方式(既独立又可嵌入)
  5. 功能简洁,易学易用

3.3 数据定义

3.3.1 模式的定义与删除

  1. 定义模式

    create schema <模式名> authorization <用户名>
    

    若没指定模式名,隐含为用户名

    在模式定义后可以紧接表定义

    create schema test authorization cdt
    create table tab1
    (no char(9) primary key,
    name char(20) unique,
    sex char(2),
    age smallint,
    );
    
  2. 删除模式

    drop schema <模式名> <CASCADE | RESTRICT>;
    

    CASCADE为级联,表示在删除时同时把该模式下所有数据对象全部删除

    RESTRICT为限制,表示只有没有任何向下属的对象时才执行删除操作

3.3.2 基本表的定义、删除与修改

  1. 定义

    create table <表名> (<列名><数据类型>[列级完整性约束条件]
                      [,<列名><数据类型>[列级完整性约束条件]]
                      ...
                      [,<表级完整性约束条件>]);
    
  2. 数据类型

    数据类型含义
    char(n),character(n)长度为n的定长字符串
    varchar(n),charactervarying(n)最大长度为n的变长字符串
    clob字符串大对象
    blob二进制大对象
    int,integer长整数(4字节)
    smallint短整数(2字节)
    bigint大整数(8字节)
    numeric(p,d)定点数,由p位数字(不包括符号、小数点)组成,小数点后面有d位数字
    decimal(p,d),dec(p,d)同numeric
    real取决于机器精度的单精度浮点数
    double precision取决于机器精度的双精度浮点数
    float(n)可选精度的浮点数,精度至少为n位数字
    boolean逻辑布尔量
    date日期,包含年、月、日,格式为 YYYY-MM-DD
    time时间,包含一日的时、分、秒,格式为 HH-MM-SS
    timestamp时间戳类型
    interval时间间隔类型
  3. 模式与表

  4. 修改基本表

    ALTER TABLE<表名>
    [ADD [COLUMN]<新列名><数据类型>[完整性约束]]
    [ADD <表级完整性约束>]
    [DROP [COLUMN]<列名>[ CASCADE | RESTRICT ]]
    [DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ]]
    [ALTER COLUMN<列名><数据类型>];
    
  5. 删除基本表

    DROP TABLE<表名>[RESTRICT|CASCADE];
    

3.3.3 索引的建立与删除

  1. 建立索引

    CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
    ON <表名><列名>[<次序>][,<列名>[<次序>]]…);
    

    次序有:ASC(升序),DESC(降序)

    Unique指此索引的每一个索引值只对应唯一的数据记录

    cluster建立的索引是聚簇索引

  2. 修改索引

    ALTER INDEX <旧索引名> RENAMA TO <新索引名>
    
  3. 删除索引

    DROP INDEX <索引名>
    

3.3.4 数据字典

3.4 数据查询

SELECT  [ ALL | DISTINCT ] <目标列表达式>[,<目标列表达式>]…
FROM <表名或视图名> [(<SELECT语句>)[AS]<别名> ]
[WHERE <条件表达式>]
[GROUP BY <列名1>[ HAVING <条件表达式> ] ]
[ORDER BY <列名2>[ ASC|DESC ] ];

3.4.1 单表查询

仅涉及一个表的查询

  1. 选择表中若干列

    1. 查询指定列

      select Sno,Sname
      from Student;
      
    2. 查询全部列

      select *
      from Student;
      
    3. 查询经过计算的值

      select Sname,2014-Sage
      from Student;
      

      指定别名

      select Sname NAME,'Year of Birth:' BIRTH,2014-Sage BIRTHDAY,LOWER(Sdept) 系名
      from Student;
      
  2. 选择表中若干元组

    1. 消除取指重复的行

      select distinct Sno
      from SC;
      
    2. 查询满足条件的元组

      查询条件谓词
      比较=, >, <, >=, <=, !=, <>, !>, !<;NOT+上述比较运算符
      确定范围between and, not between and
      确定集合in, not in
      字符匹配like, not like
      空值is null, is not null
      多重条件(逻辑运算)and, or, not
      1. 比较大小

        select Sname
        from Student
        where Sdept = 'CS';
        
      2. 确定范围

        select Sname,Sdept,Sage
        from Student
        where Sage between 20 and 30;
        
      3. 确定集合

        select Sname,Ssex
        from Student
        where Sdept in ('CS','MA','IS');
        
      4. 字符匹配

        [not] like '<匹配串>' [escqpe '<换码字符>']
        

        查找指定的属性值与匹配串相匹配的元组。

        匹配串可以是一个完整的字符串,也可以含有通配符%和_

        • %代表任意长度(可以为0)的字符串。a%b表示以a开头,以b结尾的任意长度的字符串
        • _代表任意单个字符。a_b表示以a开头,以b结尾的长度为3的任意字符串
        select Sname,Sno,Ssex
        from Student
        where Sname like '刘%';
        
        select Cno,Ccredit
        from Course
        where Cname like 'DB\_Design' ESCAPE'\'; //查询DB_Design课程的课程号和学分
        
      5. 涉及空值的查询

        select Sno,Cno
        from SC
        where Grade is null; 'is'不能用'='代替
        
      6. 多重条件查询

        select Sname
        from Student
        where Sdept = 'CS' and Sage <20;
        
    3. order by 子句

      用户可以用order by子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排序,默认值为升序。

      select Sno,Grade
      from Student
      where Cno = '3'
      order by Drade DESC;
      
    4. 聚集函数

      • count(*) 统计元组个数
      • count([distinct|all]<列名>) 统计一列中值的个数
      • sum([distinct|all]<列名>) 计算一列值的总和(必须是数值型)
      • avg([distinct|all]<列名>) 计算一列值的平均值(必须是数值型)
      • max([distinct|all]<列名>) 求一列值中最大值
      • min([distinct|all]<列名>) 求一列值中最小值
      select sum(Ccredit)
      from SC,Course
      where Sno='201215012' and SC.Cno=Course.Cno;
      

      聚集函数只能用于 select 子句和 group by 子句中的 having 子句

    5. group by 子句

      将查询结果按某一列或多列的值分组,值相等的为一组

      select Sno,avg(Grade)
      from SC
      group by Sno
      having avg(Grade)>=90
      

3.4.2 连接查询

一个查询同时涉及两个以上的表

  1. 等值与非等值查询

    select Student.*,SC.*
    from Student,SC
    where Student.Sno=SC.Sno;
    

    若把目标列中重复的属性列去掉则为自然连接

    select Student,Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
    from Student,SC
    where Student.Sno=SC.Sno;
    

    一条SQL语句可同时完成选择和连接查询,此时where是由连接谓词和选择谓词组成的符合条件

    select Student.Sno,Sname
    from Student,SC
    where Student.Sno=SC.Sno and		/*连接谓词*/
    		SC.Cno='2' and SC.Grade>=90;  /*选择谓词*/
    
  2. 自身连接

    image-20240524175333943

    image-20240524175349316

  3. 外连接

    image-20240524175644570

  4. 多表连接

    select Student.Sno,Sname,Cname,Grade
    from Student,SC,Course
    where Student.Sno=SC.Sno and SC.Sno=Course.Sno;
    

3.4.3 嵌套查询

  1. 带有 in 谓词的子查询

    image-20240524182121452

  2. 带有比较运算符的子查询

    image-20240524182506326

  3. 带有 any(some) 或 all 谓词的子查询

    子查询返回多值时要用any(有的系统用some) 或all谓词修饰符。

    any 或 all 必须同时使用比较运算符

    image-20240524182737343

    image-20240524182836382

    image-20240524183017444

  4. 带有 exists 谓词的子查询

    此查询不返回任何数据,只产生逻辑值 true 或 false

    image-20240524183245641

3.4.4 集合查询

集合查询

3.4.5 基于派生表的查询

3.7 视图

3.7.1 定义视图

  1. 建立视图

    CREATE VIEW<视图名>[(<列名>[,<列名>]…)]
    AS <子查询>
    [WITH CHECK OPTION];
    

    image-20240524193839378

  2. 删除视图

    DROP VIEW<视图名>[CASCADE];

3.7.2查询视图

image-20240524194522706

3.7.3 更新视图

3.7.4 视图的作用

  1. 简化用户操作
  2. 使用户能以多种角度看待同一数据
  3. 对重构数据库提供了一定程度的逻辑独立性
  4. 对机密数据提供安全保护
  5. 可以更清晰地表达查询

六、关系数据理论

七、数据库设计

7.3 概念结构设计

7.3.1 概念模型

特点:

  1. 能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是现实世界的一个真实模型。
  2. 易于理解,可以用它和不熟悉计算机的用户交换意见。
  3. 易于更改,当应用环境和应用要求改变时容易对概念模型修改和补充。
  4. 易于向关系、网状、层次等各种数据模型转换。

7.3.2 E-R模型

  1. 实体之间的联系

    1. 两个实体型之间的联系
      1. 一对一联系(1:1):班级与班长
      2. 一对多联系(1:n):班级与学生
      3. 多对多联系(m:n):课程与学生

    image-20240524230029732

    1. 两个以上的实体型之间的联系
      • 一对一、一对多、多对多

    image-20240524230303603

    1. 单个实体型内的联系

      • 一对一、一对多、多对多

        image-20240524230357112

  2. E-R 图:提供了表示实体型、属性和联系的方法

    1. 实体型用矩形表示,框内写明实体名
    2. 属性用椭圆形表示,并用无向边将其与相应的实体型连接起来
    3. 联系用菱形表示,框内写联系名,用无向边分别与有关实体型连接,边旁标记联系类型

image-20240524231402836

image-20240524231416922

7.3.5 概念结构设计

  1. 实体与属性的划分原则

    属性准则:

    1. 作为属性,不能再具有需要描述的性质,即属性必须是不可分的数据,不能包含其他属性
    2. 属性不能与其他实体 具有联系,即 E-R 图中所表示的联系是实体之间的联系。
  2. E-R 图的集成

    1. 合并。解决各分E-R图之间的冲突,将分E-R图合并起来生成初步E-R图。

      冲突主要有三类:

      1. 属性冲突
        • 属性域冲突
        • 属性取值单位冲突
      2. 命名冲突
        • 同名异义
        • 异名同义
      3. 结构冲突
        • 同一对象在不同应用中具有不同的抽象
        • 同一实体在不同子系统的E-R图中所包含的属性个数和属性排列次序不完全相同
        • 实体间的联系在不同的E-R图中为不同的类型
    2. 修改和重构,消除不必要的冗余,生成基本的E-R图

      1. 主要采用分析方法,即以数据字典和数据流图为依据,根据数据字典中关于数据项之间逻辑关系的说明来消除冗余。
      2. 用规范化理论消除冗余

7.4 逻辑结构设计

把概念结构设计阶段设计好的基本E-R图转换为与用户数据库管理系统产品所支持的数据模型相符合的逻辑结构。

7.4.1 E-R 图向关系模型的转换

十、数据库恢复技术

10.1 事务的基本概念

10.2 数据库恢复概述