7.1 数据库设计概述:

  • 数据库设计一般定义:数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求
    • 定的应用环境:一个数据库不可能什么数据都接收,如在学校或工厂,就要建立相当于的数据库,学校工厂就是环境 
    • 逻辑模式:如设计的一张表,表的属性设计,每个表中应该放什么数据,是第几范式,这就是在逻辑模式设计的
    • 物理结构:就是数据存储在什么地方,怎么存放
  • 信息管理要求:在数据库中应该存储和管理哪些数据对象
  • 数据操作要求:对数据对象需要进行哪些操作,如查询、增、删、 改、统计等操作
  • 数据库设计的目标:为用户和各种应用系统提供一个信息基础设施和高效的运行环境
  • 高效的运行环境:(数据库是应用程序理最底层的交互平台,所以要保证高效的操作,要求如下)
    • 数据库数据的存取效率高
    • 据库存储空间的利用率高
    • 数据库系统运行管理的效率高

7.1.1 数据库设计的特点:

  • 三分技术,七分管理,十二分基础数据
    • 管理:数据库建设项目管理、企业(即应用部门)的业务管理
    • 基础数据:数据的收集、整理、组织和不断更新是数据库建设中的重要环节
  • 结构(数据)设计和行为(处理)设计相结合
    • 整个设计过程中把数据库结构设计和对数据的处理设计密切结合起来
    • 结构和行为分离的设计:(如图,数据库和软件设计分离,不好的设计)
      • 传统的软件工程:重行为设计,忽视对应用中数据语义的分析和抽象,只要有可能就尽量推迟数据结构设计的决策
      • 早期的数据库设计:重结构设计,致力于数据模型和数据库建模方法研究,忽视了行为设计对结构设计的影响

7.1.2 数据库设计方法:

  • 大型数据库设计是涉及多学科的综合性技术,又是一项庞大的工程项目。它要求数据库设计人员具有多方面的知识和技术主要包括
    • 计算机的基础知识
    • 软件工程的原理和方法
    • 程序设计的方法和技巧
    • 数据库的基本知识
    • 数据库设计技术
    • 应用领域的知识
  • 早期数据库设计:主要采用手工与经验相结合的方法:
    • 设计质量与设计人员的经验和水平有直接关系
    • 缺乏科学理论和工程方法的支持,设计质量难以保证
    • 数据库运行一段时间后又不同程度地发现各种问题,增加了系统维护的代价
  • 规范设计法基本思想:过程迭代和逐步求精,典型方法如下:
    • 新奥尔良(New Orleans)方法
      • 简介:把数据库设计分为四个间阶段,目前不同的阶段做什么事,如第一个阶段需求分析(了解用户和应用程序对数据库的要求),第二个阶段概念结构设计根据需求分析设计出数据库大致长什么样(如用E-R图),第三阶段逻辑设计根据E-R设计转为数据库中实际的表,第四阶段物理结构设计(就是数据存储在什么地方,怎么存放)  
    • 基于 E-R 模型的设计方法
      • 简介:根据需求分析得到实体与实体之间的联系,做成E-R图  
    • 3NF(第三范式)的设计方法
      • 简介:就是取消了表中的传递函数依赖  
    • 面向对象的数据库设计方法
      • 简介:和java中的面向对象一样的原理  
    • 统一建模语言(UML)方法
      • 简介:这是一种工具,和E-R图有点类似,表达出实体与实体间的联系

7.1.3 数据库设计的基本步骤:

  • 数据库设计分 6 个阶段:(在上述的新奥尔良方法中增加了两个设计)
    • 需求分析 — 就是了解数据库要建成什么样
    • 概念结构设计 — 把数据库描述出来(如用E-R或UML)
    • 逻辑结构设计 — 根据概念结构设计,在数据库中设置出一张张表
    • 物理结构设计 —数据存储在什么地方,怎么存放
    • 数据库实施 — 上面四步数据库就建成,那怎么用,就是实施
    • 数据库运行和维护 — 数据库进行使用枚举需要运行和维护
  • 细节:
    • 需求分析和概念结构设计独立于任何数据库管理系统
      • 理解:这两个阶段不是真得要建立数据库,只是设计阶段,独立于任何数据库管理系统,就是那我设计完了,可能用MySQL或SqlServer
    • 逻辑结构设计和物理结构设计与选用的数据库管理系统密切相关
      • 理解:就是不同的数据库管理系统,设计的操作也不同,所以密切相关,像MySQL或SqlServer的很多操作就不同 
    • 这个图可以多看:  
  • 参加数据库设计的人员
    • 系统分析人员和数据库设计人员:数据库设计的核心人员,将自始至终参与数据库设计,其水平决定了数据库系统的质量
    • 数据库管理员和用户代表:主要参加需求分析与数据库的运行和维护
    • 应用开发人员(包括程序员和操作员):在实施阶段参与进来,分别负责编制程序和准备软硬件环境
  • 各阶段的主要任务:
    • 1. 需求分析阶段
      • 整个设计过程的基础,是最困难和最耗费时间的一步
      • 是否做得充分与准确,决定了构建数据库的速度和质量
    • 2. 概念结构设计阶段
      • 整个数据库设计的关键
      • 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体数据库管理系统的概念模型
    • 3. 逻辑结构设计阶段
      • 将概念结构转换为某个数据库管理系统所支持的数据模型,并对其进行优化
    • 4.物理结构设计阶段  
      • 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)
    • 5. 数据库实施阶段
      • 根据逻辑设计和物理设计的结果建立数据库
      • 编写与调试应用程序
      • 组织数据入库并进行试运行
    • 6. 数据库运行和维护阶段
      • 经过试运行后即可投入正式运行
      • 在运行过程中必须不断对其进行评估、调整与修改
  • 细节:
    • 设计一个完善的数据库应用系统,往往是上述 6 个阶段的不断反复
    • 这个设计步骤既是数据库设计的过程,也包括了数据库应用系统的设计过程
    • 在设计过程中把数据库的设计和对数据库中数据处理的设计紧密结合起来,将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计 
  • 各阶段的数据设计描述:
  • 对上述图简单的说明:
    • 1.需求分析阶段
      • 综合各个用户的应用需求
    • 2.概念设计阶段
      • 用图像的方式(E-R图)表示出需要分析
    • 3.逻辑设计阶段
      • 将E-R图转换成具体的数据库产品支持的数据模式(就是表)
      • 然后根据用户处理的要求、安全性考虑,在基本表上在建立视图,形成数据外模式
    • 4.物理设计阶段
      • 根据(不同的产品数据库)数据库管理系统特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式

7.1.4 数据库设计过程中的各级模式:

7.2 需求分析:

  • 什么是需求分析?分析用户的要求

7.2.1 需求分析的任务:

  • 详细调查现实世界要处理的对象(组织、部门、企业等)
  • 充分了解原系统(手工系统或计算机系统)的工作概况
  • 明确用户的各种需求,然后在此基础上确定新系统的功能
  • 新系统必须充分考虑今后可能的扩充和改变
  • 调查的重点:是“数据”和“处理”,通过调查、收集与分析,获得用户对数据库的信息要求、处理要求、安全性与完整性要求

7.2.2 需求分析的方法:

  • 需求分析的目标:
    • 调查清楚用户的实际要求并进行初步分析,与用户达成共识,分析与表达这些需求
  • 调查用户需求的具体步骤:
    • 调查组织机构情况
    • 调查各部门的业务活动情况
    • 协助用户明确对新系统的各种要求,包括信息要求、 处理要求、完全性与完整性要求
    • 确定新系统的边界
  • 常用的调查方法:
    • 跟班作业。通过亲身参加业务工作来了解业务活动的情况
    • 开调查会。通过与用户座谈来了解业务活动情况及用户需求
    • 请专人介绍
    • 询问。对某些调查中的问题可以找专人询问
    • 设计调查表请用户填写。如果调查表设计得合理,则很有效
    • 查阅记录。查阅与原系统有关的数据记录
    • 结构化分析方法(Structured Analysis,SA):从最上层的系统组织机构入手,采用自顶向下、逐层分解的方式分析系统
    •           

7.2.3 数据字典:

  • 什么是数据字典?数据字典和新华字典一样,但数据字典解释的是每一个数据,解释每一个数据里面有什么属性和什么操作
  • 数据字典是关于数据库中数据的描述,即元数据(不是直接描述,如存的是张三,学号001不是这样描述,而是描述出学号是什么样的,应该学号是三位的的数字,范围是多少,是这样描述的),不是数据本身。数据字典是在需求分析阶段建立,是继续详细的数据收集和数据分析所得到的,并在数据库设计过程中不断修改、充实、完善的
  • 数据字典包括:数据项(有哪些数据)、数据结构(这个数据是什么结构,如:学号的结构是什么)、数据流(数据的流向,部门A指向部门B)、数据存储(数据是B+树存储还是表的形式存储)、处理过程(数据库哪些数据要进行增删改查,这个操作可以被哪些用户拥有)
  • 数据项:数据项是不可再分的数据单位
    • 数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系} 
    • 理解:
      • 数据项名 — 如Sno
      • 数据项含义说明 — Sno的作用
      • 别名 — Sno在其它其它表中是否有别名,如学号
      • 数据类型 — Sno的数据类型,然char(3)
      • 长度 –char(3),3就是它的长度
      • 取值范围 — Sno的取值范围001-999
      • 取值含义 — 001是学号,或表示男女生0是女1是男
      • 与其他数据项的逻辑关系 –如: SC(Sno,Cno),就是外键
      • 数据项之间的联系:如知道Sno就可以推出学生的姓名,就是函数依赖
    • “取值范围”、“与其他数据项的逻辑关系”定义了数据的完整性约束条件,是设计数据检验功能的依据
    • 可以用关系规范化(范式)理论为指导,用数据依赖的概念分析和表示数据项之间的联系
  • 数据结构:数据结构反映了数据之间的组合关系
    • 数据结构描述={数据结构名,含义说明,组成:{数据项或数据结构}}
    • 说明:一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成
    • 理解:如仓库进货,入库单就是数据结构,入库单上又有很多信息
  • 数据流:数据流是数据结构在系统内传输的路径
    • 数据流描述={数据流名,说明,数据流来源,数据流去向,组成:{数据结构},平均流量,高峰期流量}
    • 理解:如从选课表中抽取一个成绩反馈给用户
      • 数据流名 — 就可以是成绩
      • 说明 — 该数据是干什么的
      • 数据流来源 — 数据从哪来的SC表
      • 数据流去向 –数据到哪去,到应用程序
      • 组成 — 如学号、姓名和成绩组成
      • 平均流量 — 如12小时或一个月的传输次数
      • 高峰期流量 — 如15号来查询成绩,15号就是高峰期流量
    • 说明:
      • 数据流来源:说明该数据流来自哪个过程
      • 数据流去向:说明该数据流将到哪个过程去
      • 平均流量:在单位时间(每天、每周、每月等)里的传输次数
      • 高峰期流量:在高峰时期的数据流量
  • 数据存储:数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一
    • 数据存储描述={数据存储名,说明,编号,输入的数据流,输出的数据流,组成:{数据结构},数据量,存取频度,存取方式}
    • 理解:
      • 数据存储名 — 这个存储的名字
      • 说明 — 存储什么信息
      • 编号 — 存储编号
      • 输入/出的数据流 — 输入输出的信息
      • 组成 — 输入输出的是哪些数据,存取的量,存取的频率,存取的方式
    • 说明:
      • 存取频度:每小时、每天或每周存取次数及每次存取的数据量等信息
      • 存取方式:批处理/ 联机处理;检索/ 更新;顺序检索/随机检索
      • 输入的数据流:数据来源
      • 出的数据流:数据去向
  • 处理过程:处理过程的具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息
    • 处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明}}
    • 说明: — 说白了就是我要对该数据做什么
      • 说明该处理过程的功能及处理要求 — 如该处理要达到什么目的,如查询成绩最高的学生
      • 功能:该处理过程用来做什么
      • 处理要求:处理频度要求(如多次时间执行一次),如单位时间里处理多少事务,多少数据量、响应时间要求等 
      • 这些处理要求是后面物理设计的输入及性能评价的标准
  • 需求分析小结:
    • 需求收集和分析作为数据库设计的第一阶段是十分重要的
    • 第一阶段收集的基础数据(用数据字典来表达)是下一步进行概念设计的基础
    • 强调两点:
      • 设计人员应充分考虑到可能的扩充和改变,使设计易于更改、系统易于扩充
      • 必须强调用户的参与  

7.3 概念结构设计(E-R):

  • 什么是概念结构设计?将需求分析得到的用户需求抽象为信息结构(即概念模型)的过程就是概念结构设计

7.3.1 概念模型:

  • 什么是概念模式?将需求分析得到的用户需求抽象为信息结构(即概念模型)
  • 概念模型的主要特点:

    (1)能真实、充分地反映现实世界,包括事物和事物之间的联系,是现实世界的一个真实模型

    (2)易于理解,可以用它和不熟悉计算机的用户交换意见

    (3)易于更改,当应用环境和应用要求改变时容易对概念模型修改和扩充

    (4)易于向关系、网状、层次等各种数据模型转换

7.3.2 E-R模型:

  • 描述现实世界的概念模型的工具:E-R 模型
  • 实体是E-R图的核心,做E-R图的时要先找实体,实体包括实体的名称,实体的属性,在找另外一个实体,在找实体与实体的联系
  • 什么是实体?在现实世界中客观存在并可相互区别的事物,如一个人,商店等
  • 实体之间的联系:两个实体型之间的联系
    • 一对一联系(1:1)、一对多联系(1:n)、多对多联系(m:n)
  • 两个以上的实体型之间的联系:

    • 多个以上的实体型之间也存在着一对一、一对多、多对多联系
  • 单个实体型内的联系:

    • 同一个实体集内的各实体之间也可以存在一对一、一对多、多对多联系

  • 联系的度:参与联系的实体型的数目
    • 两个实体型之间的联系度为 2,也称为二元联系
    • 三个实体型之间的联系度为 3,称为三元联系
    • N个实体型之间的联系度为 N,也称为 N 元联系
  • E-R 图:
    • E-R 图提供了表示实体型、属性和联系的方法:
      • 实体型:用矩形表示,矩形框内写明实体名
      • 属性:用椭圆形表示,并用无向边将其与相应的实体型连接起来
      • 联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:1、1:n 或 m:n) 
  • 例子:
    • 某个工厂物资管理的概念模型。物资管理涉及的实体有:
      • 仓库:属性有仓库号、面积、电话号码
      • 零件:属性有零件号、名称、规格、单价、描述
      • 供应商:属性有供应商号、姓名、地址、电话号码、账号
      • 项目:属性有项目号、预算、开工日期
      • 职工:属性有职工号、姓名、年龄、职称
    • 这些实体之间的联系如下:  
      • 一个仓库可以存放多种零件,一种零件可以存放在多个仓库中,因此仓库和零件具有多对多的联系。用库存量来表示某种零件在某个仓库中的数量
      • 一个仓库有多个职工当仓库保管员,一个职工只能在一个仓库工作,因此仓库和职工之间是一对多的联系
      • 职工之间具有领导与被领导关系,即仓库主任领导若干保管员,因此职工实体型中具有一对多的联系 
      • 供应商、项目和零件三者之间具有多对多的联系,即一个供应商可以供给若干项目多种零件,每个项目可以使用不同供应商供应的零件,每种零件可由不同供应商供给
    •