Course Outline
-
ER Model
-
Relational Model and Algebra
-
SQL
-
Functional Dependencies and Relational Database Design
-
Storage and File Systems
-
Tree and Hash Indexes
-
Query Processing and Implementation of Relational Operators
-
Query Optimization
-
Transactions
-
Concurrency Control Protocols
-
Database Recovery
数据库在线
schema 模式
instance 实例
DBMS:数据库管理系统
文件系统(File System)的主要弊端:
-
数据冗余和不一致(data redundancy and inconsistency)
-
数据访问困难(difficulty in accessing data)、数据孤立(data isolation)
-
完整性问题(integrity problem)
-
原子性问题(atomicity problem)
-
并发访问异常(concurrent-access anomaly)
-
安全性问题(security problem)
Data Models 数据模型:
-
Object-based logical models 基于对象的逻辑模型:
-
Entity-Relationship Model (ER Model) 实体-联系模型
提供一种方便的图形化方式来观察数据、联系和约束。
-
-
Record-based Logical Models 基于记录的逻辑模型:
Relational Model 关系模型
-
Other:
Network Model 网络模型
Hierarchical Model 层次模型
object-oriented model, objected-relational model …...
数据抽象的三个层次:
-
物理层(physical level)
-
概念层(逻辑层,logical level)
-
视图层(view level)
数据库语言
-
数据库定义语言(DDL)
-
数据操纵语言(DML)
DML中涉及信息检索的部分称作查询语言(query language)
使用数据库的人员
-
数据库管理员(DataBase Administrator,DBA):对系统进行集中控制的人
-
数据库用户:四种类型,系统为不同类型用户设计不同类型的用户界面
-
无经验的用户(naïve user):通过激活事先写好的应用程序同系统交互,典型用户界面是表格界面。
-
应用程序员(application programmer):开发用户界面
-
老练的用户(sophisticated user):不通过编写程序同系统交互,而是用数据库查询语言或数据分析软件等工具表达要求。
-
专门的用户(specialized user):编写专门的、不适合于传统数据处理框架的数据库应用的富有经验的用户。
-
DBMS的结构
E-R图(实体-联系图,ER Diagram)
实体-联系模型(Entity-Relationship (ER) model)
实体(entity)
-
-
-
-
实体
-
实体集(entity set):相同类型(具有相同性质/属性)的一个实体集合。
-
弱实体集(weak entity set):不具有足够的属性构成主码的实体集。
-
有主码的实体集则称作强实体集(strong entity set)。
-
-
属性(attribute)
-
E-R模型中属性的分类:
-
简单(simple)属性/复合(composite)属性:
简单属性不能划分为更小的部分;
复合属性可以划分为更小的部分(其他属性)。 复合属性可以有层次,子属性可进一步划分。
-
单值(single-valued)属性/多值(muti-valued)属性:
单值属性对一个特定的实体都只有单独的一个值;
多值属性对一个特定的实体有对应的一组值。用花括号表示属性是多值的。
-
派生(derived)属性:可从别的相关属性或实体派生出来。
-
-
码(key):足以区分每个实体的属性集
-
复合码(Composite Key)
-
候选码(candidate key)—> 主码(primary key)
-
-
-
-
-
联系(relationship)
-
联系
-
Recursive Relationship
-
-
-
映射类型:
-
一对一(one-to-one)
-
一对多(one-to-many)
-
多对一(many-to-one)
-
多对多(many-to-many)
-
-
参与约束
-
如果实体集E中的每个实体都参与到联系集R的至少一个联系中,实体集E在联系集R中的参与称为全部的(total)
-
如果实体集E中只有部分实体参与到联系集R的联系中,实体集E到联系集R的参与称为部分的(partial)。
-
-
-
联系集
-
二元(binary)联系集:涉及两个实体集的联系集。dbms中的大部分联系集都是二元的。
-
非二元联系集
-
eg.三个实体集instructor、student和project通过联系集proj_guide相关联。
3. Class Hierarchy
关系模式Relational Model
基本术语
E-R图转换为关系模式
步骤:
Step 1 (Strong Entity Set)
Step 2 (Weak Entity Set)
Step 3 (1-to-1 Relationship)
Step 4 (1-to-many Relationship)
Step 5 (Many-to-many Relationship)
Step 6 (Non-binary Relationship)
关系代数 Relational Algebra
-
基本运算
-
选择(select)运算:选出满足给定谓词的元组。
用小写sigma(σ)表示,下标为谓词,括号中为参数关系。
-
投影(project)运算:返回作为参数的关系,但把某些属性排除在外,所有重复行均被去除。
用大写pi(Π)表示,下标为在结果中出现的属性,括号中为参数关系。
-
并(union)运算
-
集合差(set-difference)运算
-
笛卡尔积(Cartesian-product)运算:将任意两个关系的信息组合在一起,结果中包含所有可能的元组对。
-
更名(rename)运算:给关系代数表达式的结果赋上名字以供引用。
用小写rho(ρ)表示。
-
-
附加运算
-
集合交(intersection)运算 (∩)
-
连接(join)运算 (⋈)
-
除法(division)运算(/)
-
SQL
SQL:结构化查询语言
-
数据定义语言(Data-Definition Language, DDL):
SQL DDL提供定义定义关系模式、删除关系以及修改关系模式的命令。
SQL数据定义
-
固有类型
·char(n):固定长度(用户指定n)的字符串,等价全称character。• 存入字符串长度不够时会追加空格使其达到固定长度; 比较长度不同的char类型值时会自动在短值后追加空格使长度一致。 ·varchar(n):可变长度(用户指定最大长度n)的字符串,等价全称character varying。 Varchar类型不会增加空格。 ·int:整数类型,等价全称integer。 ·smallint:小整数类型。 ·numeric(p, d):精度由用户指定(加上一个符号位有p位数字,其中d位数字在小数点右边)的定点数。 ·real, double precision:浮点数与双精度浮点数。 ·float(n):精度至少为n位的浮点数。 SQL也提供nvarchar类型存放使用Unicode表示的多语言数据。
每种类型都可能包含空值,表示一个缺失的值,应尽量避免加入空值。
-
基本模式定义
-
drop table:删除关于被去掉关系的所有信息
drop table r; --删除r的所有元组以及r的模式,除非用create table重建r否则没有元组可以插入r中
-
alter table:为已有关系增加属性(关系中在所有元组在新属性上的取值将被设为null)
alter table r add A D; --为关系r添加域为D的属性A alter table r drop A; --为关系r中去掉属性A,很多数据库系统并不支持
完整性约束(ICs):破坏完整性约束的任何数据库更新将会被标记错误并禁止。
-
-
数据库的修改
-
delete 删除
-
delete from r where P; /*P代表一个谓词,r代表一个关系。Delete语句首先从r中找出所有时P(t)为真的元组t,然后把它们从r中删除。*/
-
-
update 更新:不改变整个元组的情况下改变其部分属性的值。
-
不是逻辑模型的一部分,但作为虚关系对用户可见的关系。
定义视图:
create view v as <query expression>; --v表示视图名,<query expression>可以是任何合法的查询表达式。
-
-
create assertion <assertion-name> check <predicate>;
2. 数据操纵语言(Data-Manipulation Language, DML):
SQL DML包括查询语言,以及在数据库中插入元组、删除元组和修改元组的命令。
-
-
SQL查询的基本结构(Basic SQL Query)
SQL查询可包含三种类型的子句:
·select子句:用于列出查询结果中所需要的属性
·from子句:一个查询求值中需要访问的关系列表(输入)。
·where子句:一个作用在from子句汇总关系的属性上的谓词。
典型SQL查询形式(各子句必须以select、from、where次序写出):
select A1, A2, …, An from r1, r2, …, rn where P; --Ai代表一个属性,ri代表一个关系,P为一个谓词,如果省略where子句P为true。
一个SQL查询的含义可以理解为:
1)为from子句列出的关系产生笛卡尔积。
2)在步骤1结果上应用where子句中指定的谓词。
3)对步骤2结果中的每个元组,输出select子句汇总指定的属性(或表达式的结果)。
-
-
-
算术运算(Arithmetic Operation)
-
更名运算(Rename Operation)
as子句
old-name as new-name
既可出现在select子句,也可出现在from子句中。
selectT.name, S.course_id frominstructor asT, teaches asS --重命名关系 whereT.ID= S.ID;
重命名关系适用于需要比较同一关系中元组的情况
-
字符串运算(String Operation)
like
操作符模式匹配:(大小写敏感)%
匹配任意子串_
匹配任意一个字符
-
-
-
排列元组显示次序(Ordering the Display of Tuples)
order by子句
让查询结果中元组按特定属性排序(默认升序)升序:
asc
降序:
desc
//按salary降序列出整个instructor关系,如果有几位教师的工资相同,就按姓名升序排列 select* frominstructor orderbysalary desc, name asc;
-
空值(NULL value)
-
序列(Sequence)
-
-
-
分组(Group By)
group by子句
用于构造分组。指定所有属性上取值相同的元组将被分在一个组中。
-
除法运算(Division)
-
集合运算(Set Operation)
-
union 并
-
intersect 交
-
except 差
-
-
聚集运算(Aggregate Operator)
以值的一个集合(集或多重集)为输入,返回单个值
-