Garland +

写一个数据库

1,2

6

3,4

7,8

5

定义

DBMS 是一个由互相关联的数据集合和一组用以访问这些数据的程序组成。这个数据几个通常称作数据库。

数据库系统的目标,解决了使用文件处理系统会出现的

数据抽象的层次:物理层、逻辑层、视图层,物理层详细描述复杂的底层数据结构,逻辑层描述数据库中存储什么数据以及数据间存在的关系, 视图层只描述数据库的整个部分

特定时刻存储在数据库中的信息的集合称作数据库的一个实例(instance),数据库的总体设计称作数据库模式。

数据模型是一个描述数据、数据联系、数据语义以及一致性约束的概念工具的几何。有四类:

存储管理器是数据库系统中负责在数据库中存储的底层数据与应用程序以及向系统提交的查询之间提供接口的部件,负责与文件管理器进行交互。 原始数据通过操作系统提供的文件系统存储在磁盘上。存储管理器将各种DML语句翻译为底层文件系统命令。存储管理器负责数据库中数据的存储、检索和更新。

存储管理部件:

存储管理器实现了几种数据结构,作为系统物理实现的一部分:

查询处理器组件:

事务管理:

要么完成要么不发生的要求称为原子性(atomicity)。正确性的要求称作一致性(consistency)。保持的要求称作持久性(durability)。

事务是数据库应用中完成单一逻辑功能的操作集合,每一个事务是一个既具有原子性又具有一致性的单元。事务的定义应使之能保持数据库的一致性。

为了保证原子性,失败的事务必须对数据库状态不产生任何影响,即必须恢复到该失败事务开始执行以前的状态。

并发控制管理器(concurrency-control manager) 控制并发事务间的相互影响,保证数据库的一致性,事务管理器包括并罚控制管理器和恢复管理器

形式化查询语言

关系代数是一种过程化查询语言,包括一个运算的集合,这些运算以一个或两个关系为输入,产生一个新的关系作为结果。

关系代数的基本运算:选择、投影、并、集合差、笛卡尔乘积、更名、集合交、自然连接和赋值

选择、投影、更名为一元运算

选择运算

选择运算选出满足给定谓词的元组,用小写希腊字母 sigma 表示选择,谓词写作 sigma 的下标。参数关系在 sigma 后的括号中。 通常允许在选择谓词中进行比较,使用的是 = != < <= > >= ,可以用 and or nor 将多个谓词合并为一个较大的谓词

示例

选择谓词中可以包括两个属性的比较。这里的 select 对应 SQL 中使用的 where

select

Choose a subset of the tuples from a relation that satisfies a selection predicate

投影运算 projection

Generate a relation with tuples that contains only the specified attributes

投影返回作为参数的关系,但把某些属性排除在外

并运算

必须保证做并运算的关系是相容的。要使 r 并 s 有意义,要满足以下两个条件

差运算

r - s 结果即一个包含所有在 r 中而不在 s 中的元组的关系, r 和 s 也得是同元的

笛卡尔积运算

更名运算

对给定关系代数表达式 , 表达式

返回表达式 的结果,并把名字 赋给了它。

集合交运算

用一对集合差运算实现

自然连接运算

可以将某些选择和笛卡尔积运算合并为一个运算

赋值运算

外连接运算

左外连接、右外连接、全外连接

扩展的关系代数运算

广义投影,通过允许在投影列表中使用算数运算和字符串函数等来对投影进行扩展。

聚集

聚集函数输入值的一个汇集,将单一值作为结果返回 sum avg min max

元组关系演算

“它是所有满足如下条件的元组 t 的集合:在关系 instructor 中存在元组 s 使 t 和 s 在属性 ID 伤的值相等,且 s 在属性 salary 上的值大于 80000 美元”

表达式的安全性

P的域(用 dome(P)表示)是P所引用的所有值的集合。它们既包括P自身用到的值,又包括P中涉及的关系的元组中出现的所有值。因此P的域是P中显示出现的值 及名称出现在P中那些关系的所有值的集合。

域关系演算

SQL 数据定义

SQL 的 DLL 不仅能够定义一组关系,还能够定义每个关系的信息,包括:

基本类型

char 和 char 及 varchar 比较的区别

基本模式定义

create table r
    (A1 D1,
     A2 D2,
     ...
     An Dn,
     < 完整性约束1 >,
     ...,
     < 完整性约束n >);

其中 r 是关系名,每个 A_i 是关系 r 模式中的一个属性名, D_i 是属性 A_i 的域,既 D_i 制定了 属性 A_i 的类型以及可选的约束, 用于限制所允许的 A_i 取值的集合

约束有 primary key、foreign key、not null 约束

SQL 禁止破坏完整性约束的任何数据库更新

drop 和 delete 比较,delete 保留关系,删除所有元组,前者不仅删除 r 的所有元组, 还删除 r 的模式

alter table 为已有关系增加属性

SQL 查询的基本结构

单关系查询

SQL 允许在 where 字句中使用逻辑连词 and 、or 和 not,逻辑连词的运算对象可以是包含比较运算符 <、<=、>、>=、= 和 <> 的表达式, SQL 允许我们使用比较运算符来比较字符串、算术表达式以及特殊类型,如日期类型

多关系查询

典型的 SQL 查询形式:

select A1, A2, ..., Am
from r1, r2, ..., rm
where P;

每个 Ai 代表一个属性,每个 ri 代表一个关系。P 是一个谓词, 省略 where 子句则 P 为 True

查询运算顺序: 首先是 from,然后是 where,最后是 select

from 子句定义了一个在该子句中所列出关系上的笛卡尔乘积。迭代过程如下:

for each 元组t1 in 关系 r1
    for each 元组t2 in 关系 r2
        ...
        for each 元组tm in 关系 rm:
        把 t1, t2, ..., tm 连接成单个元组 t
        把 t 加入结果关系中

此结果关系具有来自 from 子句中所有关系的所有属性。由于在关系 ri 和 rj 中可能出现相同的属性名,需要在属性名前 加上关系名作为前缀,表示该属性来自哪个关系

SQL 查询的含义:

  1. 为 from 字句中列出的关系产生笛卡尔积
  2. 在步骤1的结果上应用 where 子句中指定的谓词
  3. 对于步骤2结果中的每个元组,输出 select 子句中指定的属性

自然连接

自然连接运算作用于两个关系,并产生一个关系作为结果,自然连接至只考虑 在两个关系模式中都出现的属性上取值相同的元组对

join … using 运算中需要给定一个属性名列表,其两个输入中都必须指定名称的属性。

更名运算

old_name as new_name

字符串运算

模式是大小写敏感的

order_by 子句默认使用升序

集合运算

聚集函数

分组聚集

在 group by 子句中的所有属性上取值相同的元组将被分在一个组中 需要保证出现在 select 语句中但没有被聚集的属性只能是出现在 group by 子句中的那些属性

包含聚集、group_by 或 having 子句的查询的含义可通过下述操作序列本来定义:

  1. 与不带聚集的查询情况类似,最先根据 from 子句来计算出一个关系
  2. 如果出现了 where 子句,where 子句中的谓词将应用到 from 子句的结果关系上
  3. 如果出现了 group_by 子句,满足 where 谓词的元组通过 group_by 子句形成分组
  4. 如果出现了 having 子句,它将应用到每个分组上;不满足 having 子句谓词的分组将被抛弃
  5. select 子句利用剩下的分组产生出查询结果中的元组,即在每个分组上应用聚集函数来得到单个结果元组

聚集函数根据以下原则处理空值: 除了 count(*) 以外所有的聚集函数都忽略输入集合中的空值.

嵌套子查询

连接词 in 测试元组是否是集合中的成员

短语 “至少比某一个要大” 在 SQL 中用 >some 表示

exists 结构在作为参数的子查询非空时返回 true 值

来自外层查询的一个相关名称可以用在 where 子句的子查询中,叫相关子查询

视图

事务

事务由查询或更新语句的序列组成。

一个事物或者在完成所有步骤后提交其行为,或者在不能完成其所有动作的情况下回滚其所有动作,通过这种方式数据库提供了对事务具有原子性 的抽象,要么事务的所有影响被反映到数据库中,要么任何影响都没有。

默认每个 SQL 语句自成一个事务,且一执行完就提交。

完整性约束

完整性约束保证授权用户对数据库所做的修改不会破坏数据的一致性。

not null 约束:not null 声明禁止在该属性上插入空值。 unique 约束:即在关系中没有两个元组能在所有列出的属性上取值相同 check 子句:check(P) 子句制定一个谓词 P,关系中的每个元组都必须满足谓词P

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

复杂 check 条件与断言

SQL 数据类型与模式

cast e as t 可以将一个字符串(或字符串表达式)e转成类型t, 其中 t 是 date, time, timestamp 中的一种

可以用 extract(field from d) 从 date 或 time 值 d 中提取出单独的域, 域可以是 year, month, day, hour, minute 或者 second 中的一种

current_data,current_time, localtime, current_timestamp

创建索引

在关系的属性上所创建的索引是一种数据结构,它允许数据库系统高效地找到关系中哪些在索引属性上取给定值的元组,而不用 扫描关系中的所有元组。

创建一个与现有表模式相同的表: create table p like m

授权

grant 语句用来授予权限

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

权限的传递

权限的收回

数据库设计和 E-R 模型(学不来学不来)

Entity-Relationship

实体:是现实世界中可区别于所有其他对象的一个事物或者对象。实体集势相同类型的一个实体集合

联系是多个实体间的相互关联,联系集是相通类型联系的集合

关系数据库设计

一个域是原子的,如果该域的元素被认为是不可分的单元,我们称一个关系模式 R 属于第一范式,如果 R 的所有属性的域都是原子的

函数依赖理论

闭包,正则覆盖,无损分解,保持依赖,六种范式

存储和文件结构

物理存储介质概述:

Blog

Thoughts

Project