理论知识
数据库系统管理的数据特征:
- 高价值、大体量、多并发
数据库系统要解决的问题:
- 数据冗余与不一致(Data redundancy and inconsistency)
- 数据以不同的格式存在不同的文件中
- 存取数据困难(Difficulty in accessing data)
- 不同的任务都需要不同的程序去完成
- 数据孤立(Data isolation)
- 多种格式,多个文件
- 完整性问题(Integrity problems)
- 程序无法显式声明完整性约束, 无法有效地对数据添加约束
- 原子性问题(Atomicity of updates)
- 程序可能从非法状态退出
- 并发访问异常(Concurrent access by multiple users)
- 同时对一个数据进行操作,导致复合数据不一致.
- 安全性问题(Security problems)
- 认证(Authentication)、权限(Privilege)、审计(Audit)
抽象层次(Levels of Abstraction)
物理层:
- 描述记录如何被存储
逻辑层:
- 描述数据如何在数据库中存储,以及数据之间地关系
视图层:
- 应用程序隐藏数据类型的细节,以及出于安全性的考虑隐藏部分信息。
数据模型
- 一系列用于描述数据,数据关系,数据语义和一致性约束地概念工具.
关系模型
模式和实例(Schema and Instances)
- 模式:数据库总体设计; 类比于程序语言中的类型和变量
- 实例:变量中实际的值
物理数据独立性(Physical Data Independence): 允许数据库系统对物理数据进行修改,而不影响应用程序。
数据库语言(Database Languages)
数据定义语言(Data Definition Language(DDL))
- 包括:元数据(metadata)
- 数据库模式(Database schema)
- 完整性约束(Integrity constraints)
- 主键(Primary key)
- 授权(Authorization)
例子:
create table instructor(
ID CHAR(5) PRIMARY KEY,
name VARCHAR(20),
dept_name VARCHAR(20),
salary DECIMAL(8,2)
)
数据操作语言(Data Maipulation Language(DML))
过程式(Procedural DML)
- 需要用户指定需要获取的数据,以及如何获取数据
陈述式(Declarative DML)
- 需要用户指定需要的数据,但不需要指定如何去获取数据
数据库设计(Database Design)
数据库引擎(Database Engine)
存储管理(The storage manager)
- 和操作系统的文件管理器交互
- 高效存储、取回和更新数据
包括以下组件: - Authorization and integrity manager - 负责权限和完整性检查 - Transaction manager - 负责事务的提交和回滚 - File manager - 负责文件管理 - Buffer manager - 负责缓冲管理
查询处理(The query processor component)
- DDL解释器(DDL interpreter)
- 负责解释DDL声明语句和记录在数据字典中的定义
- DML编译器(DML compiler)
- 负责翻译DML声明语句成执行器能够理解的形式
- 查询执行引擎(Query evaluation engine)
- 执行底层操作语句
事务处理(The transaction management component)
- 负责保证数据库是一致的,即使运行时发生错误
关系模型(Relation Schema)
- \(A_1, A_2, ..., A_n\) 是属性
- \(R=(A_1,A_2,...,A_n)\)是关系模型
- 属性通常为不可再分的(原子的)
- 关系没有顺序
键(key)
超键(superkey)
- 定义:足够去确定唯一元组的值
- 例子: {ID}和{ID,name}都是超键
候选键(candidate key)
- 定义:超键且至少一个属性
- 例子:{ID}是候选键
主键(Primary Key)
- 定义:被选中的候选键
外键(Foreign Key)
一种约束:确保一个关系中的某个属性的值必须来自另一个关系中的某个属性的值
关系代数(Relational Algebra)
关系代数运算符
- Notation: \(\sigma\)
- Example: \(\sigma_{dept_name=^"Physics^"}(instructor)\)
- Notation: \(\Pi\)
- Example: \(\Pi_{ID,name,salary}(instructor)\)
- Notation: \(\cup\)
- Notation: \(-\)
- Notation: \(\times\)
- Notation: \(\rho\)
- Example: \(\rho_{name}(instructor\Expression)\)
- Notation: \(\leftarrow\)
- 例子:\(r \leftarrow \sigma_{a=b}(r)\)
复合关系运算
-
例子:\(\Pi_{name}(\sigma_{dept_name=^"Physics^"}(instructor))\)
-
Join运算(复合运算)
- Notation: \(\bowtie\)
- 例子: \(r\bowtie_{\theta} s = \sigma_{\theta}(r \times s)\)
- natral: 自动匹配具有相同名称的列
- on:条件查询
- using(column):可以指定要合并的列名