数据库系统 cheatsheet
- 统一建模语言 UML(Unified Modeling Language)
+------------+ +----------+ +----------------------+
| | --> | | --> | 1.数据文件 |
| | | | +----------------------+
| | | | +----------------------+
| | | 数据结构 | --> | 2.数据字典 |
| | | | +----------------------+
| | | | +----------------------+
| | | | --> | 3.索引 |
| | +----------+ +----------------------+
| | +----------+ +----------------------+
| 存储管理器 | --> | | --> | 1.权限及完整性管理器 |
| | | | +----------------------+
| | | | +----------------------+
| | | | --> | 2.事务管理器 |
| | | 部件 | +----------------------+
| | | | +----------------------+
| | | | --> | 3.文件管理器 |
| | | | +----------------------+
| | | | +----------------------+
| | | | --> | 4.缓冲区管理器 |
+------------+ +----------+ +----------------------+
+------------+ +------+ +----------------+
| | --> | | --> | 1.DDL解释器 |
| | | | +----------------+
| | | | +----------------+
| 存储管理器 | | 部件 | --> | 2.DML编译器 |
| | | | +----------------+
| | | | +----------------+
| | | | --> | 3.查询执行引擎 |
+------------+ +------+ +----------------+
SQL
查询
- JOIN:join,left join,right join
- AS:别名,可以省略
- 字符串运算:=,||,upper,lower,trim,like(%,_)
- 排序:order by desc/asc
- where 子句谓词:between and,(a1, b1) = (a2, b2)
- 集合运算:union,intersect,except
- 聚集函数:avg,min,max,sum,count;having;rank() over(order by ),avg(xx) over(order by ...)
- 嵌套子查询:in,not in,some,all,exists,unique,lateral(sql 2003),with as
修改
- 删除:delete from r where P
- 新增:insert into r values (...)
- 更新:
- update r set V where P
- update r set v = case when P then else end
视图 view
视图定义
create view v as <query expression>;
查询中使用视图
可以当作普通关系表进行使用
物化视图
特定数据库系统允许存储视图关系,但它们保证:如果用于定义视图的实际关系改变,视图也跟着修改。这样的视图错位物化视图。
保持物化视图一直在最新状态的过程为物化视图维护,通常简称视图维护
完整性约束
- not null
- unique
- check
- foreign key
大对象类型(lob,Large Object)
- clob:字符数据
- blob:二进制数据
自定义类型
create type type_name as numeric(12,2) final;
create table 的扩展
create table new_t_name like t_name
create table new_t_name as (<query expression>) [with data]
数据库设计
设计内容
- 实体
- 实体关系
实体-联系图(E-R 图)
- 分成两部分的矩形代表实体集,包含实体集名字和所有属性
- 菱形代表联系集
- 未分割的矩形代表联系集的属性
- 线段连接实体集和联系集
- 虚线连接联系集和其属性
- 双线表示实体在联系集中的参与度
- 双菱形代表连接到弱实体集的标志性联系集
- 映射基数
- 箭头表示法:单箭头(联系集到实体集)代表一对一,无箭头代表一对多
- l..h 表示法:l最小基数,h最大基数,如
1..1
,0..*
,1..*
- 缩进代表复杂属性
- 花括号({})代表多个属性
- 函数(小括号结尾)代表派生属性
- 矩形和菱形间的线段上标注表示角色
- 弱实体集:没有足够的属性形成主码的实体集,其必须与另一个(强)实体集关联才有意义
E-R图转关系模式
具有简单属性的强实体集的表示
直接由名字和属性转换成单个关系模式M
具有复杂属性的强实体集的表示
- 复合属性直接使用子属性展开,忽略父属性,构建关系模式M
- 多值属性构建单独的关系模式,由M的主码和其值组成关系模式R
弱实体集的表示
弱实体集组合强实体集的主码形成新关系模式,采用联合主码不单独设置主码
联系集的表示
多的一方主码(多对多就是联合主码)作为主码,构建新的关系模式
- 模式冗余:双菱形关联到弱实体集,一般为冗余
- 模式合并:一对一关系可以合并到任意一方
E-R设计问题
用实体集合适用属性
用实体集还是用联系集
一般原则是用联系集表示实体间的行为
二元还是n元联系集
联系属性的布局
扩展的E-R特性
特化
实体集可能包含一些子集,子集中的实体在某些方面却别实体集中的其他实体,例如员工特化出合同工和临时工。
E-R图中,特化用从特化实体指向另一个实体的空心箭头来表示,这种关系称为ISA(is a)。
概化
从初始实体集到一系列不同层次的实体子集的细化代表一个自定向下的过程。设计过程也可以自低向上进行,多个实体集根据共有的特性综合成一个较高层的实体集。
两个实体集包好多个共同的属性,这种共性可以通过概化来表达,概化是高层实体集与一个或多个底层实体集的包含关系。高层与底层实体集也可以分别被称为超类和子类。
概化和特化互为逆过程。
属性继承
高层实体集的属性被底层实体集继承。
- 高层实体集所关联的所有属性和联系使用于它的所有底层实体集
- 低层实体集特有的属性仅使用于特定的低层实体集
概化上的约束
- 条件定义的。高层实体集的属性标识其属于哪一类,只有满足条件才属于某一低层实体集。不相交
- 用户定义的。通过子实体集来标识。重叠
聚集
聚集是一种抽象,通过这种抽象,联系被视为高层实体
转换成关系模式
- 概化
- 高层实体集创建一个模式。每个低层实体集创建一个模式
- 如果概化是不相交且完全的,不需要高层实体集,只需为每一个低层实体集创建模式
- 聚集
- 不需要单独的模式表示聚集
其他
数据约束和关系数据库设计
使用需求:查询、性能
数据流、工作流
关系数据库设计
三范式
第一范式(1NF)
如果关系模式R的所有属性的域都是原子(不可分割)的,其满足第一范式。
第二范式(2NF)
首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
第三范式(3NF)
在1NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)。
第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。
第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。
数据库设计过程
E-R模型和规范化
好的E-R图生成的关系模式应该就不需要太对进一步规范化。
属性和联系的命名
数据库设计的一个期望的特性是唯一角色假设,这意味着每个属性名再数据库中只有唯一含义。现实中很难做到,特别是存在特化子集时。
联系集常常以相关实体集名称的拼接来命名,使用下划线分割,具体情况根据实际情况取舍变化。单数和复数都可以接受(更推荐单数),而且所有实体集要保持一致。
为了新能去规范化
其他设计问题
横表、纵表、分表...