db_6 数据库设计
db_6 数据库设计
数据库规范设计法
数据库设计
定义
是指对于一个给定的应用环境,设计优化的数据库逻辑结构和物理结构,建立数据库,使之能够有效地存储数据,为开发满足用户需求的应用系统奠定基础
特点
要把数据设计和处理设计密切结合起来
- 结构/数据设计与行为/处理设计结合
与硬件、软件和管理紧密相关
- “三分技术、七分管理、十二分数据收集”
手工试凑法方法
根据应用的数据要求与处理要求,直接设计数据库的结构
缺点:
- 数据间关系复杂,使用要求各式各样,很难仅凭经验进行设计
- 把数据的逻辑结构,物理结构、处理要求等一起考虑,很难对模式进行评价和优化。用户需求一旦发生变化,数据结构很难随之发生变化
- 数据库设计与具体的DBMS紧密结合,移植困难
- 缺乏文档资料,难于与用户交流,对设计难于评审
- 难以由多个人合作进行设计
规范设计方法
定义:
运用软件工程的思想和方法,把整个设计过程划分为若干阶段,把复杂的大问题分为若干相对简单的小问题,每个阶段只解决整个设计中的部分问题
迭代和逐步求精的过程
六个阶段与基本任务(*)
- 需求分析
- 对应用环境进行详细调查,收集支持系统目标的基础数据及其处理
- 概念结构设计
- 通过对用户需求进行综合、归纳与抽象,形成独立于数据库逻辑结构与具体DBMS的概念模型
- 可以用E-R图等表示
- 逻辑结构设计
- 将概念结构转换为某个DBMS所支持的数据模型,并进行优化
- 将得到的逻辑结构转换成特定的DBMS能处理的模式、子模式;
- 物理结构设计
- 设计数据库在物理设备上的存储结构和存取方法
- 一是确定数据库的内模式
- 二是对物理结构进行时间与空间效率的评价;
- 数据库实施
- 是建立数据库的过程。用DBMS的DDL描述三级模式,并调试产生目标模式。开发应用程序,组织数据入库并试运行;
- 数据库运行和维护
- 在数据库正式运行后,由DBA执行对数据库经常性的维护工作,包括数据库转储与恢复、数据库控制、数据库性能监控、数据库的重组与重构
需求分析、概念结构设计可以独立于DBMS
逻辑结构设计、物理结构设计密切关联DBMS
需求分析
目标
对应用环境进行详细调查,收集支持系统目标的基础数据及其处理
调查的重点是“数据”和“处理”
获得用户对数据库的如下要求
- 处理要求:指用户要完成什么处理功能,对处理的响应时间和 处理方式的要求
- 信息要求:指系统中所涉及的数据及数据之间的联系。具体收 集数据的名称、类型、长度等,确定数据之间联系的类型
- 安全性与完整性的要求
方法
两个阶段
- 调查用户实际要求,与用户达成共识
- 分析、表达用户的需求
- 用数据流图表达数据和处理之间的关系
- 用数据字典描述系统中各类数据
数据流图(DFD)
以图形方式来表达系统的功能、数据在系统内部的逻辑流向和逻辑变换过程
采用结构化分析方法SA 从最上层的系统组织机构入手
自顶向下逐步分解处理功能以及它们所用的数据
形成若干层次的数据流图
数据字典
是对数据的集中的系列说明。包含每一个数据元素的名字、含义等各方面的描述
从数据流图中提取出所有原子数据项
把有联系的数据项组合起来形成数据组
以数据组为单位,写出数据项的如下定义
- 语义定义:名字,实际含义等
- 类型定义:数据类型、数据宽度、小数位数等
- 完整性约束定义:值约束、空值约束以及其他比较复杂的完整性约束
根据用户和实际领域的信息模型需要补充其他数据项及其定义
还可以包括数据在系统内的传输路径、数据存储位置和处理过程信息等
- 需求分析阶段的数据字典,可看成是数据元素表
- 数据库实施阶段建立起的数据字典,是数据库系统重要组成部分
概念结构设计
通过对用户需求进行综合、归纳与抽象,形成独立于数据库逻辑结构与具体DBMS的概念模型
ER法
思想是用E-R图描述现实世界的信息,这种信息结构称为概念结构 (概念模型),然后根据具体系统的要求将概念结构转换成特定系统所能接 受的逻辑结构(层次、网状、关系)
两部分组成
- 用E-R图描述现实世界
- 将E-R图转换成相应的数据模型
ER图
- 实体:长方形
- 属性:椭圆形,无向边连接实体与其属性,联系与其属性
- 联系:菱形 无向边连接菱形与有关实体,标上联系的类型
- 自顶向下
- 自底向上
- 逐步扩张
- 混合策略
自底向上的ER图设计法
分为两个阶段
基于E-R法构造局部E-R图
局部E-R图综合形成总E-R图
局部ER图设计
- 选择局部应用
- 以需求分析中得到的数据元素表为基础,建立实体模型
- 确定实体之间的联系类型
- 用E-R图表示这些实体与实体之间的联系,形成分E-R 图
建立实体模型的关键是确定实体及其属性
- 实体模型的建立方法
- 对数据字典进行初步抽象,得到实体和属性,然后再 按原则进行必要调整
- 数据抽象机制
- 分类:定义某一概念作为现实世界中一组对象的类型。这些对象 具有某些共同的特性和行为。如 实体型
- 聚集:定义某一类型的组成成分。 如属性的聚集组成了实体型
- 概括:定义类型之间的一种子集 联系
实体模型的调整原则:
- 属性必须 是不可分的数据项
- 属性不能与其他实体具有联系
- 实体和描述它的属性之间保持1:1或n:1的联系
综合形成总ER图
两种方法
- 多个分E-R图一次集成
- 逐步集成,用累加的方式一次集成两个分E-R图
- 合并: 解决冲突,将各分E-R图合并起来生成初步E-R图
- 冲突包括
- 属性冲突
- 讨论协商解决
- 命名冲突(同名异义,异名同义)
- 建立命名表,统一命名,异名同义的名字可标为别名
- 结构冲突
- 同一对象在不同应用中有不同抽象。如在一应用中为实体, 在另一应用中为属性
- 遵守实体与属性的划分原则,把属性变为实体或实体变为属性, 使同一对象具有相同的抽象
- 同一实体在不同分E-R图中属性个数、次序不同
- 同一实体的属性通常取分E-R图中属性的并,再适当调整次序
- 实体之间的联系在不同分E-R图中呈现不同类型
- 根据语义加以综合或调整
- 同一对象在不同应用中有不同抽象。如在一应用中为实体, 在另一应用中为属性
- 属性冲突
- 冲突包括
- 修改和重构:消除不必要的冗余,生成基本E-R图
- 冗余的数据:可由基本数据导出的数据
- 冗余的联系:可由其它联系导出的联系
- 消除方法
- 分析法
- 规范化方法
逻辑结构设计
任务是将概念结构转换为某个DBMS所支持的数据模型,并进行优化
将得到的逻辑结构转换成特定的DBMS能处理的模式、子模式
- 形成初始关系数据库模式
- 关系模式规范化
- 关系模式优化
- 子模式定义
E-R图向关系模型的转换规则
- 一个实体型转换为一个关系模式
一个联系转换为一个关系模式
- 若联系为1:1,则每个实体的码均是该关系的候选码
- 若联系为1:n,则该关系的码是n端实体的码
- 若联系为n:m,则该关系的码是诸实体码的组合
三个或三个以上实体间的多元联系,转换为一个关系模式
- 与该多元联系相连的各实体的码以及联系的属性转换为关系的属性
- 关系的码为各实体码的组合
- 具有相同码的关系可以合并
- 弱实体类型的转换
- 对于每个弱实体类型,创建一个新的关系,该关系中包含所有 弱实体类型的属性
- 把标识关系(被依赖关系)的主码添加到新关系中,并将其作 为新关系的外码
- 新关系的主码是标识关系的主码和弱实体类型的部分标识(码)的组合
- 超类/子类联系的转换
- 为超类和每个子类创建单独的关系
- 在超类所创建的关系中,包含所有子类成员都共有的属性, 包括主码
- 在超类中包含一个(或多个)属性作为子类判定符 EmployeeType
- 在为每个子类所创建的关系中,包含超类的主码以及子类特有的属性
关系模型的规范化
按照数据依赖的理论,逐一分析转换所得关系模式
判断是否存在部分函数依赖、传递函数依赖、多值依赖等,确定它们的范式等级;
关系模型的优化
按应用系统的处理要求,确定是否进行模式合并或分解
为了提高存取效率和存储空间的利用率,可以对关系模式进行必要的分解
- 水平分解
- 是把关系的元组分为若干子集合,定义每 个子集合为一个子关系,以提高系统效率
- 80/20原则
- 经常使用数据分解出来作为 一个关系
- 数据分片
- 如果关系R上具有n个事务,而且多数事务存取的数据不相交,则R可以分解为少于或等于n个子关系
- 垂直分解
- 是把关系模式R的属性分解为若干子集合,形成若干子关系模式
- 原则:经常在一起使用的属性从R中分解出来形成一个子关系模式
- 必须确保无损连接性和保持函数依赖
设计用户子模式
根据局部应用的需求,结合具体DBMS的特点,设计用户外模式(视图)
使用更符合用户习惯的别名
可以对不同级别的用户定义不同的视图,以保证系统的安全性
通过定义视图降低复杂查询的难度,简化用户对系统的使用
物理结构设计
数据在物理设备上的存储结构与存取方法
存储结构
- 确定存放位置
- 经常存取部分与和存取频率较低部分分开存放
- 数据和日志备份放于不同的磁盘上
- 确定系统配置、
- 确定系统配置变量、存储分配参数,进行物理优化
存取方法
索引方法(加速查询)
- 索引记录/索引项,是索引文件的记录,包括两个域
- 索引域:存储数据文件中一个或一组域的一个值(K)
- 指针:指向索引域值为K的记录所在磁盘块的地址
- B+树索引
- 树中所有关键字都按递增次序从左到右安排在叶节点上, 并且链接起来
- B+树能同时进行随机查找和顺序查找
- 选择索引域原则
- 经常在查询条件中出现的属性
- 经常作为最大值和最小值库函数的参数
- 经常作为连接属性
- 索引并非越多越好
- 索引记录/索引项,是索引文件的记录,包括两个域
聚集方法(加速查询)
- 把关系中某个属性/组(聚集键)值相同的记录集中存放在连续的物理块
- 一个关系只能参加一个聚集
- 原则
- 经常进行连接操作的关系可建立聚集
- 单个关系的某组属性经常进行相等比较
- 关系的某个属性组值重复率高
- 问题
- 建立与维护聚集系统开销很大
- 对于更新操作远远多于连接操作的关系不应使用聚集方法
HASH方法(快速存取)
通过HASH函数将记录关键字转换成地址
如果关系的属性主要出现在等连接条件中, 或出现在相等比较条件中,而且满足下列 条件之一,可以选择该方法
- 关系的大小可预知,而且不变
- 如果关系大小动态改变,则须DBMS提供动态 HASH存取方法