Data Base 2 Review
五、规范化设计
函数依赖
数据库的规范化设计理论:数据依赖、范式、模式设计
核心作用:数据依赖
设计标准:范式
泛关系模式存在的问题:
- 数据冗余
- 修改/插入/删除异常
1NF,2NF,3NF,BCNF
无损分解
模式设计方法原则
表达性、分离性、最小冗余性
七、数据库设计
规划
- 输出:可行性分析报告+数据库系统规划纲要
需求分析
- 输入:信息需求+处理需求
- 输出:需求说明书
- 步骤:
- 分析用户活动,产生用户活动图(业务流程)
- 确定系统范围,产生系统范围图(人机界面)
- 分析用户活动所涉及的数据,产生数据流图DFD
- 分析系统数据,产生数据字典DD
概念设计
- 输入:DFD
- 输出:分ER图 -> 总ER图
- 步骤:
- 进行数据抽象,设计局部概念模式
- 将局部概念模式综合成全局概念模式
- 评审
逻辑设计
- 输入:
- 独立于DBMS的概念模式
- 处理需求
- 约束条件
- DBMS特性
- 输出:
- DBMS可处理的模式
- 子模式
- 应用程序设计指南
- 物理设计指南
- 步骤:
- 形成初始模式:ER 实体类型/联系类型 -> 记录类型
- 子模式设计:应用程序和数据库系统的接口
- 应用程序设计梗概:设计应用程序草图
- 模式评价:
- 定量分析
- 性能测量
- 修正模式:使模式适应信息的不同表示
- ER->关系模型转换规则
- 1:1
- 可以在任意一关系模式属性中加入另一方的键和联系属性
- 1:N
- N端加入1端的键和联系属性
- M:N
- 联系类型转换成关系
- 属性为两端实体的键
- 弱实体 1:N(弱实体)
- 1端键作为外键加入弱实体
- 弱实体主键由父表主键和自身候选键组成
- 1:1
物理设计
- 输入:基本数据模型
- 输出:物理结构
- 步骤:
- 存储记录结构设计
- 确定数据存放位置
- 存取方法的设计
- 完整性和安全性考虑
- 程序设计
实现
运行和维护
八、数据库的管理
事务ACID
数据库恢复
- 恢复方法: 转储和建立日志
- 故障:
- 事务故障
- 系统故障
- 介质故障
数据库并发(两种锁,活死锁,可串行化)
- 并发操作的三个问题:
- 丢失更新
- 读脏数据
- 不一致分析
数据库完整性(3静态,1动态)
完整性:正确性、有效性、相容性
完整性约束:
域约束
基本表约束
FOREIGN KEY (..) REFERENCES TABLE(..)断言
触发器:
- 元组级触发器:
for each row - 语句级触发器
- 元组级触发器:
1 | |
数据库安全
1 | |
九、分布式数据库系统
物理上分散,逻辑上集中
- 数据独立性:逻辑独立性+物理独立性
- 分类:
- 同构同质型
- 同构异质型:DBMS型号不同
- 异构型
数据分片
- 水平分片
- 垂直分片
- 导出分片(导出水平分片):水平分片的条件不是本关系属性的条件,而是其他关系属性的条件
- 混合分配,三种混合
三条规则:
- 完备性
- 可重构
- 不相交
数据分配
- 集中式
- 分割式:数据一份,分割成的每个逻辑片段被指派到特定场地
- 全复制式:数据在每个场地重复存储
- 混合式:介于分割式和全复制式。每个子集安置在一个或多个场地
全局关系、逻辑片段、场地(物理映像)
十、对象数据库系统
对象联系图
- 平面关系模型:基本数据类型
- 嵌套关系模型:基本数据类型、关系类型(集合)
- 复合对象模型:基本数据类型、关系类型、结构类型(元组类型)
- 面向对象:基本类型、复合类型、引用类型
用ORDB的定义语言,定义这个数据库:
1
2
3
4
5
6
7
8
9
10
11
12
13CREATE TYPE MyString char varying;
CREATE TABLE department(university MyString,
dname MyString,
staff setof(ref(faculty)),
dire ref(director));
CREATE TABLE faculty(fno integer,fname MyString,
languages setof(MyString),
countries setof(MyString),
works_for ref(department));
CREATE TABLE director(dno integer) Under faculty;检索精通俄语(Russian)的教师工号和姓名。
1
2
3SELECT fno, fname
FROM faculty
WHERE ‘Russian’ in languages;检索上海地区各大学超过50岁的教师人数
1
2
3
4
5SELECT A.uname,count(SELECT *
FROM A.staff as B
WHERE B.age>50)
FROM university as A
WHERE A.city = ˊshanghaiˊ;
tips
- 关系模式n个属性,可能的函数依赖4n个,平凡的函数依赖3n个,正确的调度n!个
- B的函数依赖要写B-> Φ, B->B
- 候选码为全码的关系模式一定是满足BCNF
Data Base 2 Review
http://example.com/2024/05/27/Data-Base-2-Review/