数据库系统概念笔记

2019-07-29  本文已影响0人  person_L

数据库系统概念

第一部分 关系数据库

第1章 引言

数据库管理系统(DataBase-Management System DBMS)是有互相关联的数据集合和一组用以访问这些数据的程序组成。这个数据集合通常称作数据库。
很早以前是用文件的形式记录数据,带来了很多问题

  1. 数据冗余不一致
  2. 数据访问难
  3. 数据孤立
  4. 完整性问题
  5. 原子性问题
  6. 并发问题
  7. 安全问题

1.1 数据库的三个层次

物理层(数据的存储)、逻辑层(数据的关系)、视图层(描述数据库的某个部分)

1.3.3 数据模型

数据模型是一个描述数据、数据联系、数据语义和一致性约束的概念工具的集合。

1.4.1 数据操纵语言

数据操纵语言(Data-Manipulation Language,DML)访问和操纵适当模型组织起来的数据,有以下操作

1.4.2 数据定义语言

数据定义语言(Data-Definition Language,DDL)

1.6.2 数据库设计

设计阶段中的需求描述是制定数据库的概念结构的基础

1.6.3 实体联系模型

数据库的总体逻辑结构可以用实体-联系图(entity-relationship diagram E-R 图),有几种方法画这样的图,最常用的是UML

1.6.4 规范化

设计关系数据库所用到的另外一种方法被称为规范化过程,他的目标是生成一个关系模式集合,是我们存储信息没有不必要的冗余,同时又能很轻松的检索数据,最常用的方法是使用函数依赖。

1.7 数据存储和查询

数据库系统的功能部件大致分为存储管理器和查询处理部件

1.7.1 存储管理器
1.7.2 查询处理器

1.8 事务管理

第2章 关系模型介绍

2.1 关系数据结构

关系数据结构是由表集合成的。它其实是数学中的一种概念,叫做元祖,表示一组值的序列。

我们要求关系r而言,所有的属性都是原子的,就是域中的元素是不可再分的,是否再分是由我们的定义来的区分的;比如phone_number,如果只看做是一个号码而言,它是原子的,如果是一组电话或者是定义区号等,他是非原子的。

空值是特殊的值,代表未知或者不存在,尽量避免空值的引入。

2.7 总结

第3章 SQL

3.1 SQL查询语言概览

最早的版本是由IBM开发的,最初被叫做Sequel。

1986年美国国家标准化组织(ANSI)和国际标准化组织(ISO)发布了SQL标准,SQL-86,SQL-92,SQL:2003,SQL:2006,SQL:2008

SQL语言有以下几个部分:

3.2.1 基本类型

char类型存放固定长度的字符串,例如属性A的类型是char(10),我们存入的时候如果存入“avi”;那么它会在改字符后面追加7个空格达到10个字符的长度,如果是属性B的类型是varchar(10),它是不会加空格;这样就可能出现比较的时候不相同。所以说我们建议始终使用varchar类型而不是char类型。

3.5 集合运算

union、intersect和except对应数据集合论中的并运算、交运算、差运算

3.6 空值

3.7 聚集函数

avg 平均数:在算平均数的时候切记不能去除重复元素

distinct:删除重复元祖

group by:在group by子句中的所有属性上取值相同的元祖将被分在一个组中,一个很重要的事情是需要保证出现在select语句中但没有被聚集的属性只能是出现在group by 子句中的属性。也就是说任何没有出现在group by子句中的属性如果出现在select子句中的话,它只能出现在聚集函数内部,否则这样的查询就是错误的。

having:having在形成分组后才起作用

select avg(salary) from instructor 
group by dept_name
having avg(salary) > 42000;

任何出现在having子句中,但没有被聚集的属性必须出现在group by中,否则查询就被当成是错误的

sum:SQL会忽略输入的null值

3.8 嵌套子查询

子查询是嵌套在另一个查询中的select-form-where表达式中。

子查询嵌套在where子句中,通常用于对集合的成员资格、集合的比较和集合的基数进行检查。

3.8.1 集合成员资格

使用连接词in或者not in

3.8.2 集合的比较

如连接词some和any同义(某一个)、all(所有)
找出满足下面条件的所有教师的姓名,他们的工资至少比Biology系某一个教师的工资要高

select name from instructor
where salary > some (select salary
from instructor
where dept_name = 'Biology')
3.8.3 空关系测试

exists结构在作为参数的子查询非空时返回true值
找出2009年秋季学期和2010年春季学期同事开课的所有课程

select course_id from section as S
where semeter = 'FALL' AND year = 2009 
AND 
exist (SELECT * FROM section as T WHERE semester = 'Spring' AND year = 2010 AND S.course_id = T.course_id)

上面的查询还说明了SQL的一个特性,来自外层查询的一个相关名称(S)可以用在where子句的子查询中。使用了这种关联的查询称为相关子查询

第4章 中级SQL

4.2 视图

安全考虑、创建一个比逻辑模型更符合特定用户直接的个人化关系集合。

4.2.1 视图定义
4.2.3 物化视图

特定数据库系统允许存储视图关系,但是他们保证:如果用于定义视图的实际关系改变,视图也跟着修改。

4.2.4 视图更新

除了一些有限的情况之外,一般不允许对视图关系进行修改。

4.3 事务

事务由查询和更新语句的序列组成。SQL标准规定当一条SQL语句被执行,就隐式地开始了一个事务。下列SQL语句之一会结束一个事务

4.4 完整性约束

完整性约束保证授权用户对数据库所做的修改不会破坏数据的一致性。因此,完整性约束防止的是对数据的意外破坏。

4.4.1 单个关系上的约束
4.4.5 参照完整性

例如外键的级联删除

4.4.6 事务中对完整性约束的违反

事务中有可能出现,例如两条语句,第一条插入的时候违反了约束,第二条符合了约束。这样的情况,有的数据库提供了延迟检查,在事务提交的时候进行检查,initially deferred

4.5 SQL的数据类型与模式

4.5.1 日期和时间类型
  1. 获取日期时间的函数

    current_date/current_time/current_timestamp

4.5.4 大对象类型
4.5.5 用户定义的类型

4.6 授权

对数据库的授权包括增、删、改、查
select、delete、update、insert、all privilegers

grant<权限列表>
on<关系名或视图名>
to<用户/角色列表>

grant select on department to Amit,satashi

角色:create role instructor;然后可以grant select on takes to instructor

还有其他的授权略。。。

第5章 高级SQL

5.1 使用程序设计语言访问数据库

5.2 函数和过程

5.3 触发器

要设置触发器,必须要满足两个条件

使用场景:

5.5 开窗和排名

在给定的区间内进行排名或者聚合操作,成为开窗

https://jingyan.baidu.com/article/d8072ac48d2730ec94cefd43.html

5.6 OLAP系统

联机分析处理系统是一个交互式系统,它允许分析人员查看多维数据的不同类的汇总数据。联机一词表示分析人员必须能够提出新的汇总数据请求,几秒钟之内得到响应。

从某一个角度为固定去查看其他的统计维度称为切片

上一篇下一篇

猜你喜欢

热点阅读