本文仅供参考学习使用,谢谢

文章目录

  • 1 数据库设计概述
    • 1.1 数据库设计的特点
    • 1.2 数据库设计方法
    • 1.3 数据库设计的基本步骤
    • 1.4 数据库设计过程中的各级模式
  • 2 需求分析
    • 2.1 需求分析的任务
    • 2.2 需求分析的方法(DFD)
    • 2.3 数据字典
      • 1. 数据项
      • 2. 数据结构
      • 3. 数据流
      • 4. 数据存储
      • 5. 处理过程
  • 3 概念结构设计(important)
    • 3.1 概念模型
    • 3.2 E-R模型
    • 3.3 扩展的E-R模型
    • 3.4 UML
    • 3.5 概念结构设计
      • 1. 实体与属性的划分原则
      • 2. E-R图的集成
  • 4 逻辑结构设计(important)
    • 4.1 E-R图向关系模型的转换
    • 4.2 数据模型的优化
    • 4.3 设计用户子模式
  • 5 物理结构设计
    • 5.1 数据库物理设计的内容和方法
    • 5.2 关系模式存取方法选择:索引方法、聚簇方法
    • 5.3 确定数据库的存储结构
    • 5.4 评价物理结构
  • 6 数据库的实施和维护
    • 6.1 数据的载入和应用程序的调试
    • 6.2 数据库的试运行
    • 6.3 数据库的运行和维护

1 数据库设计概述

  • 广义地讲,是数据库及其应用系统的设计,即设计整个数据库应用系统;
  • 狭义地讲,是设计数据库本身,即设计数据库的各级模式并建立数据库,
    这是数据库应用系统设计的一部分。

  • 什么是数据库设计?

数据库设计是指对于一个给定的应用环境,设计一个优良的数据库逻辑模
式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管
理数据,满足各种用户的应用需求,包括信息管理要求和数据处理要求:

  • 信息管理要求:在数据库中存储和管理需要的数据对象 。
  • 数据处理要求:对数据对象需要进行的处理,如查询、增删改、统计和分析等。

1.1 数据库设计的特点

  1. 数据库建设的基本规律

    • 三分技术,七分管理,十二分基础数据
    • 管理 : 数据库建设项目管理;企业(即应用部门)的业务管理
    • 基础数据: 数据的收集、整理、组织和不断更新
  2. 结构(数据)设计和行为(处理)设计相结合

    • 将数据库结构设计和数据处理设计密切结合
    • 传统的软件工程:重 行为设计
      • 忽视对应用中数据语义的分析和抽象,只要有可能就尽量推迟数据结构设计
    • 早期的数据库设计:重 结构设计
      • 致力于数据模型和数据库建模方法研究,忽视了行为设计对结构设计的影响

1.2 数据库设计方法

大型数据库设计是涉及多学科的综合性技术,又是一项庞大的工程项目要求多方面的知识和技术
主要包括:

  • 计算机的基础知识
  • 软件工程的原理和方法
  • 程序设计的方法和技巧
  • 数据库的基本知识
  • 数据库设计技术
  • 应用领域的知识

  • 手工设计法

    1. 设计质量与设计人员的经验和水平有直接关系
    2. 缺乏科学理论和工程方法的支持,工程的质量难以保证
    3. 数据库运行一段时间后常常又不同程度地发现各种问题,增加 了维护代价
  • 规范设计法
    1. 典型方法——新奥尔良(New Orleans)方法
    2. 将数据库设计分为若干阶段和步骤
    3. 采用辅助手段实现每一过程
    4. 按设计规程用工程化方法设计数据库
  • 基于E-R模型的设计方法 :概念设计阶段广泛采用
  • 3NF(第三范式)的设计方法 :逻辑阶段可采用的有效方法
  • ODL(Object Definition Language)方法 :面向对象的数据库设计方法
  • UML(Unified Modeling Language)方法 :面向对象的建模方法

数据库设计工具

  • SYBASE PowerDesigner
    数据库建模-UML工具
  • Rational Rose
    UML工具-数据库建模
  • CA ERWin
    ERwin全称是ERwin Data Modele 功能强大、易于使用的数据建模、数据库设计与开发工具

1.3 数据库设计的基本步骤

数据库设计分6个阶段

  • 需求分析 //独立于任何数据库管理系统
  • 概念结构设计 //独立于任何数据库管理系统
  • 逻辑结构设计 //与选用的数据库管理系统密切相关
  • 物理结构设计 //与选用的数据库管理系统密切相关
  • 数据库实施
  • 数据库运行和维护

  • 设计一个完善的数据库应用系统 往往是上述6个阶段的不断反复。
  • 这个设计步骤既是数据库设计的过程,也包括了数据库应 用系统的设计过程。
  • 把数据库的设计和对数据库中数据处理的设计紧密结合起来,将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计。


参加数据库设计的人员

  • 系统分析人员和数据库设计人员:
    自始至终参与数据库设计
  • 数据库管理员和用户代表:
    主要参加需求分析与数据库的运行和维护
  • 应用开发人员:
    包括程序员和操作员
    在实施阶段参与进来,分别负责编制程序和准备软硬件环境

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


自左向右四个阶段:

  • 需求分析阶段:
    综合各个用户的应用需求

  • 概念设计阶段: 形成独立于机器特点,独立于各个 DBMS产品的概念模式(E-R图)

  • 逻辑设计阶段:

    1. 首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模型, 形成数据库逻辑模式
    2. 然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立
      必要的视图(View),形成数据的外模式
  • 物理设计阶段:
    根据数据库管理系统特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式

2 需求分析

2.1 需求分析的任务

  • 什么是需求分析——分析用户的要求
    是设计数据库的起点

  • 需求分析的重要性
    结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用


  • 充分了解原系统(手工系统或计算机系统)工作概况 ——确定新系统的功能
  • 详细调查要开发应用系统的组织/部门/企业等
  • 明确用户的各种需求
    PS:新系统今后可能的扩充和改变

调查的重点是“数据”和“处理”,获得用户对数据库的要求

  1. 信息要求

    • 用户需要从数据库中获得信息的内容与性质
    • 由信息要求可以导出数据要求,即在数据库中需要存储哪些数据
  2. 处理要求
    • 用户要什么处理功能、对处理性能、处理方式、处理周期等的要求
      (批处理 / 联机处理/ 发布处理/每月一次/…)
  3. 安全性与完整性要求

确定用户需求的难点

  • 用户缺少计算机知识,不能准确地表达自己的需求,提出的需求往往不断地变化。
  • 设计人员缺少用户的专业知识,不易理解用户的真正需求,甚至误解用户的需求。

解决方法

  • 设计人员必须不断深入地与用户进行交流 ,才能逐步确定用户的实际需求

2.2 需求分析的方法(DFD)


数据流程图(Data Flow Diagram ,简称DFD)

也称为数据流图,是便于用户理解的系统数据流程的图形表示,能精确地在逻辑上描述系统的功能、输入、输出和数据存储。它表达了数据和处理过程的关系。

常用符号:

  1. 外部实体(S)
  • 代表系统之外的信息提供者或使用者 。
  • 源点和终点(又称端点)是系统外的实体,又称作外部项。它们存在于环境之中,与系统有信息交流,从源点到系统的信息叫系统的输入;从系统到终点的信息称系统的输出。同—个端点可以是人或其它系统。在DFD中引入源点和终点是为了便于理解系统,所以不需要详细描述它们。它们可有编号,以“S”开头。
  1. 加工 (P)
  • 加工又称处理亦称变换,它表示对数据流的操作或处理。
  • 加工的符号分成上、下两部分,从上到下分别是标识部分和功能描述部分。
  • 标识部分用于标注加工编号,加工编号应具有唯一性,以标识加工,以“P”开头。
  • 功能描述部分用来写加工名。为使DFD清晰易读,加工名应简单,能概括地说明对数据的加工行为,其详细描述在数据词典中定义。
  • 加工要逐层分解,以求得分解后的加工功能简单、易于理解。
  1. 数据存储(D)
  • 数据存储是用来存贮数据的。代表数据暂时存储或永久保存的地方。
  • 在分层DFD中,数据存储一般仅属于某一层或某几层,因此又称数据存储为局部文件。现对数据存储符号说明如下:
    ①数据存储名写在开口的长方框内,应概要地说明文件中的主要数据。
    ②数据存储上一定要有数据流。
    ③为便于说明和管理,数据存储亦应编号,编号写在文件符号左端小方格中,以“D”开头。
    ④为避免DFD中出现交叉线,同一数据存储可在多处画出,可以用下图所示符号表示数据存储重复
  1. 数据流(F)
  • 数据流(Data Flow)由一个或一组确定的数据组成。是在加工之间有向流动的数据项或数据集合
    ①数据流名应能直观地反映数据流的含义。
    ②数据流的流向
    ③数据流可以同名,也可以有相同的数据结构,但必须有不同的数据或具有不同的含义。
    ④两个符号(加工、外部项、数据存储)之间可以有多个数据流存在,DFD并不表明它们之间的任何关系,诸如次序、主次等。
    ⑤避免错误的数据流命名方法

3 绘制数据流图的主要原则
(1)明确系统界面
(2)自顶向下逐层扩展:构造DFD通常采用自项向下、逐层分解,直到功能细化为止,形成若干层次的DFD
(3)合理布局
(4)数据流图绘制过程,就是系统的逻辑模型的形成过程,必须始终与用户密切接触,详细讨论,不断修改,也要和其他系统建设者共同商讨一求一致意见


数据流图的具体绘制步骤

(1)确定所开发的系统的外部项(外部实体),即系统的数据来源和去处。
(2)确定整个系统的输出数据流和输入数据流,把系统作为一个加工环节,画出顶层图(第0层图)。
(3)确定系统的主要信息处理功能,按此将整个系统分解成几个加工环节(子系统)确定每个加工的输出与输入数据流以及与这些加工有关的数据存储。
(4)根据自顶向下,逐层分解的原则,对上层图中全部或部分加工环节进行分解。
(5)重复步骤(4),直到逐层分解结束。
(6)对图进行检查和合理布局,主要检查分解是否恰当、彻底,DFD中各层是否有遗漏、重复、冲突之处,各层DFD及同层DFD之间关系是否争取及命名、编号是否确切、合理等,对错误与不当之处进行修改。
(7)和用户进行交流,在用户完全理解数据图的内容的基础上征求用户的意见


eg

图书预订系统:书店向顾客发放订单,顾客将所填订单交由系统处理,系统首先依据图书目录对订单进行检查并对合格订单进行处理,处理过程中根据顾客情况和订单数目将订单分为优先订单与正常订单两种,随时处理优先订单,定期处理正常订单。最后系统根据所处理的订单汇总,并按出版社要求发给出版社。

  画出图书预定系统的各层数据流图


2.3 数据字典

什么是数据字典?
数据字典是关于数据库中数据的描述,称为元数据。 它不是数据本身,而是数据的数据。

  • 数据字典在需求分析阶段建立,在数据库设计过程中不断 修改、充实、完善。
  • 数据字典是进行详细的数据收集和分析所获得的主要结果。
    PS:与 DBMS中的数据字典的区别和联系

数据字典的内容

  1. 数据项
  2. 数据结构
  3. 数据流
  4. 数据存储
  5. 处理过程
  • 数据项是数据的最小组成单位
  • 若干个数据项可以组成一个数据结构
  • 通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容

1. 数据项

数据项是不可再分的数据单位

  • 数据项描述={数据项名,数据项含义说明,别名, 数据类型,长度,取值范围,取值含义,
    与其他数据项的逻辑关系, 数据项之间的联系 }
  • 关系规范化理论为指导,用数据依赖的概念分析和抽象数据项之间的联系——函数依赖
  • “取值范围”、“与其他数据项的逻辑关系”
    定义了数据的完整性约束条件,是模式设计、完整性检查条件、触发器、存储过程的依据

2. 数据结构

数据结构反映了数据之间的组合关系

  • 一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。
  • 数据结构描述= {数据结构名,含义说明,组成: {数据项或数据结构} }

3. 数据流

数据流是数据结构在系统内部传输的路径

  • 对数据流的描述

数据流描述={ 数据流名,说明,数据流来源,数据流去向,组成: {数据结构}, 平均流量,高峰期流量 }

  • 数据流来源:说明该数据流来自哪个处理过程/数据存储
  • 数据流去向:说明该数据流将到哪个处理过程/数据存储去
  • 平均流量:在单位时间(每天、每周、每月等)里的传输次数
  • 高峰期流量:在高峰时期的数据流量

4. 数据存储

数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一

  • 数据存储描述={数据存储名,说明,编号,输入的数据流 ,输出的数据流, 组成:
    {数据结构}, 数据量, 存取频度, 存取方式}
  • 存取频度:每小时、每天或每周存取次数,每次存取的数据量等信息
  • 存取方法:批处理 / 联机处理; 检索 / 更新; 顺序检索 / 随机检索
  • 输入的数据流:数据来源
  • 输出的数据流:数据去向

5. 处理过程

处理过程具体处理逻辑一般用判定表或判定树来描述。

  • 数据字典中只需要描述处理过程的说明性信息
  • 处理过程描述={ 处理过程名, 说明, 输入:{数据流},输出:{数据流}, 处理:{简要说明} }
  • 简要说明:说明该处理过程的功能及处理要求
    • 功能:该处理过程用来做什么
    • 处理要求:
      处理频度要求,如单位时间里处理多少事务,多少数据量、响应时间要求等
    • 处理要求是物理设计的输入 及 性能评价的标准

3 概念结构设计(important)

3.1 概念模型

什么是概念结构设计

  • 将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计
  • 概念结构是现实世界的一个真实模型。是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定
  • 概念结构设计是数据库设计的关键


概念模型的用途

  • 概念模型用于信息世界的建模
  • 是现实世界到机器世界的一个中间层次
  • 是数据库设计的有力工具
  • 数据库设计人员和用户之间进行交流的语言

对概念模型的基本要求

  • 较强的语义表达能力
  • 简单、清晰、易于用户理解
  1. 实体(Entity) 客观存在并可相互区别的事物称为实体。 可以是具体的人、事、物或抽象的概念。
  2. 属性(Attribute) 实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。
  3. 码(Key) 唯一标识实体的属性集称为码。
  4. 实体型(Entity Type) 用实体名及其属性名集合来抽象和刻画同类实体称为实体型
  5. 实体集(Entity Set) 同一类型实体的集合称为实体集
  6. 联系(Relationship)
  • 现实世界中事物内部以及事物之间的联系在信息世界 中反映为实体(型)内部的联系和实体(型)之间的联系。
  • 实体内部的联系: 是指组成实体的各属性之间的联系
  • 实体之间的联系: 通常是指不同实体集之间的联系 实体之间的联系有一对一(1:1)、一对多(1:m)和多对多(m:n)等多种类型

3.2 E-R模型

1. 实体之间的联系

(1)两个实体型之间的联系,可以分为三种:

  • 一对一联系(1∶1)
  • 如果对于实体集A中的每一个实体,实体集B中最多有一个(也可以没有)实体与
    之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1∶1。
  • 例如,学校里一个班级只有一个正班长,而一个班长只在一个班中任职,则班级与 班长之间具有一对一联系。
  • 一对多联系(1∶n)
  • 如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之 ,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体 集A与实体集B有一对多联系,记为1∶n。
  • 例如,一个班级中有若干名学生,而每个学生只在一个班级中学习,则班级与学生 之间具有一对多联系。
  • 多对多联系(m∶n)
  • 如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之 ,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称 实体集A与实体集B具有多对多联系,记为m∶n。
  • 例如,一门课程同时有若干个学生选修,而一个学生可以同时选修多门课程,则课 程与学生之间具有多对多联系。

(2)两个以上的实体型之间的联系:也存在着一对一、一对多、多对多联系
(3)单个实体型内的联系,也存在一对一、一对多、多对多的联系

把参与联系的实体型的数目称为联系的度

两个实体型之间的联系度为2,也称为二元联系
三个实体型之间的联系度为3,也称为 三元联系
N个实体型之间的联系度为N,也称为N元联系


2. E-R图:提供了表示实体型、属性和联系的方法:

  • 实体型:用矩形表示,矩形框内写明实体名。
  • 属性:用椭圆形表示,并用无向边将其与相应的实体型连接起来
  • 联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实 体型连接起来,同时在无向边旁标上联系的类型(1∶1,1∶n 或 m∶n)。
    PS: 联系可以具有属性

例题1:

  • 某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在 不同的产品。这些零件由不同的原材料制成,不同零件所用的材料可 以相同。有的零件可用在不同的产品,这些零件按照所属的不同产品 分别放在仓库中,原材料按照类别放在若干仓库中。
  • 请用E-R图画出此工厂产品、零件、材料、仓库的概念模型。

例题2:

  • 学校中有若干系,每个系有若干班级和教研室,每个教研室 有若干教师,其中有的教授和副教授每人各带若干研究生,
    每个班有若干学生,每个学生选修若干课程,每门课程可由若 干学生选修。
  • 请用E-R图画出此学校的概念模型,并加入实体和联系的属性

例题三:

  • 画出某个工厂物资管理的概念模型(教科书P .218)
  • 物资管理涉及的实体有:
  • 仓库:属性有仓库号、面积、电话号码
  • 零件:属性有零件号、名称、规格、单价、描述
  • 供应商:属性有供应商号、姓名、地址、电话号码、账号
  • 项目:属性有项目号、预算、开工日期
  • 职工:属性有职工号、姓名、年龄、职称

    (1) 一个仓库可以存放多种零件,一种零件可以存放在多个仓库中,因此仓库和 零件具有多对多的联系。用库存量来表示某种零件在某个仓库中的数量。
    (2) 一个仓库有多个职工当仓库保管员,一个职工只能在一个仓库工作,因此仓 库和职工之间是一对多的联系。
    (3) 职工之间具有领导-被领导关系。即仓库主任领导若干保管员,因此职工实 体型中具有一对多的联系。
    (4) 供应商、项目和零件三者之间具有多对多的联系。即一个供应商可以供给若 干项目多种零件,每个项目可以使用不同供应商供应的零件,每种零件可由不同供 应商供给。

3.3 扩展的E-R模型

主要的3种扩展:

1. ISA联系

  • 有的实体型是某个实体的子类型,这种父类-子类联系成为ISA联系
    表示“is a”语义。用 ∆ 表示
  • ISA联系的性质:子类继承了父类的所有属性,子类也可以有自己的属性

(1)分类属性

  • 分类属性是父实体型的一个属性
  • 分类属性的值把父实体型中的实体分派到子实体型中

(2)不相交约束与可重叠约束

  • 不相交约束:描述父类中的一个实体不能同时属于多个子类中的实体集。即 一个父类中的实体最多属于一个子类实体集。
  • 用ISA联系符号 三角形的一个叉号“X”来表示。
  • 可重叠约束:父类中的一个实体能同时属于多个子类中的实体集。子类符号
    中没有叉号表示是可重叠的

(3)完备性约束

  • 描述父类中的一个实体是否必须是某一个子类中的实体。
    如果是,则叫做完全特化(total specialization)
    否则叫做部分特化(partial specialization)
  • 完全特化用父类到子类的双线连接来表示
  • 部分特化用父类到子类的单线连接来表示

  1. 基数约束
  • 说明实体型中的任何一个实体可以在联系中出现的最少次数和最多次数。
  • 对实体之间一对一、一对多、多对多联系的细化。
  • 约束用一个数对 min…max 表示,0≤min≤max。例如,0…1,1…3,1…*,其中 *代表无穷大。


基数约束的类别

  • min=1的约束叫做强制参与约束,即被施加基数约束的实体型中的每个实体都要参与联 系;
  • min=0的约束叫做非强制参与约束,被施加基数约束的实体型中的实体可以出现在联系 中,也可以不出现在联系中
  1. PART-OF联系
  • 描述某个实体型是另外一个实体型的一部分。

Part-of 联系可以分为两种情况:

  • 非独占的Part-of联系,简称非独占联系
    整体实体如果被破坏,另一部分实体仍然可以独立存在
  • 独占的Part-of联系,简称独占联系
    整体实体如果被破坏,部分实体不能存在

Part-of 联系如何表示

  • 用非强制参与联系表示非独占的Part-of联系
  • 用弱实体类型和识别联系来表示独占联系

PS: 如果一个实体型的存在依赖于其他实体型的存在,则这个实体型叫做弱实体型
双矩形表示弱实体型,用双菱型表示识别联系

3.4 UML

  • UML称为统一建模语言(Unified Modeling Language),是对象管理 组织(Object Management Group,OMG)的一个标准。
  • UML是为软件开发的各个阶段提供模型化和可视化支持的规范语言, 从需求规格描述到系统完成后的测试和维护。
  • UML可以用于数据建模,业务建模,对象建模,组件建模等。
  • UML提供了多种类型的模型描述图(diagram),借助这些图可以使 应用程序更易理解。
  • UML中的类(class)大致对应E-R图中的实体
    用UML的类图表示E-R图

    • 实体型:用类表示,矩形框上部记上实体名,下面列出属性名。
    • 实体的码:在类图中在属性后面加“PK”(primary key)来表示码属性。
    • 联系:用类图之间的“关联”来表示。

eg:

基数约束

  • UML中关联类之间的基数约束和 E-R图中基数约束的概念类似。

UML中的子类

  • 面向对象技术支持超类-子类概念,子类可以继承超类的属性,也可以有自己的属性
  • 这些概念和E-R图的父类-子类联系(ISA联系)是一致的。

3.5 概念结构设计

  1. 实体与属性的划分原则

    • 作为属性,不能再具有需要描述的性质。
    • 属性不能与其他实体具有联系。
  2. E-R图的集成
    • 设计各个子系统的分E-R图
    • 消除冲突,进行集成
    • 设计基本E-R

1. 实体与属性的划分原则

现实世界的事物能作为属性对待的,尽量作为属性对待。可以简化E-R图的处置

两大原则:

  1. 作为属性,不能再具有需要描述的性质。
    属性必须是不可分的数据项,不能包含其他属性。
  2. 属性不能与其他实体具有联系。
    E-R图中所表示的联系是实体与实体之间的联系

eg:某工厂开发信息系统,经过可行性分析,详细调查确定了该系统由物资管理、销售管理、劳动人事管理等子系统组成。

该子系统的主要功能是:

  • 处理顾客和销售员送来的订单
  • 工厂是根据订货安排生产的
  • 交出货物同时开出发票
  • 收到顾客付款后,根据发票存根和信贷情况进行应收款处理

通过需求分析,知道销售子系统功能围绕“订单”和“应收账款”的处理来实现


2. E-R图的集成

E-R图的集成一般需要分两步

  • 合并:解决各分E-R图之间的冲突,将分E-R图合并,生成初步E-R图
  • 修改和重构:消除不必要的冗余,生成基本E-R图

(1)合并E-R图,生成初步E-R图

  • 各个局部应用所面向的问题不同,各个子系统的E-R图之间必 定会存在许多不一致的地方,称之为冲突。
  • 子系统E-R图之间的冲突主要有三类:
  1. 属性冲突

属性域冲突:即属性值的类型、取值范围或取值集合不同。

  • 例如零件号,有的部门把它定义为整数,有的部门把它定义为字符型。
  • 年龄,某些部门以出生日期形式表示职工的年龄,有的用整数表示职工的 年龄。

属性取值单位冲突

  • 例如零件的重量有的以公斤为单位,有的以斤为单位,有的以克为单位
  1. 命名冲突
  • 同名异义:即不同意义的对象在不同的局部应用中具有相同的名字。
  • 异名同义(一义多名),即同一意义的对象在不同的局部应用中具有不同
    的名字。

如对科研项目,财务科称为项目,科研处称为课题,生产管理处称为工程。

  • 命名冲突

可能发生在实体、联系一级上
也可能发生在属性一级上
通过讨论、协商等行政手段加以解决

  1. 结构冲突

同一对象在不同应用中具有不同的抽象。

例如:职工在某一局部应用中被当作实体,而在另一局部应用中被当作属性。
解决方法:把属性变换为实体或把实体变换为属性,使同一对象具有相同的抽象。

同一实体在不同子系统的E-R图中的属性个数和属性排列次序不完全相同。

解决方法:取各子系统的E-R图中属性的并集,再适当调整属性的次序。

实体间的联系在不同的E-R图中为不同的类型。

例如:实体E1与E2在一个E-R图中是多对多联系,在另一个E-R图中是一对多联系
解决方法:根据应用的语义对实体联系的类型进行综合或调整


(2)消除不必要的冗余,设计基本E-R图

  • 冗余的数据是指:可由基本数据导出的数据
  • 冗余的联系是指:可由其他联系导出的联系
  • 冗余带来的问题:破坏数据库的完整性,数据库维护困难,应当予以消除
  • 消除冗余方法:
    • 分析方法
    • 规范化理论的方法


用规范化理论来消除冗余

  1. 确定分E-R图实体之间的数据依赖。
    实体之间一对一、一对多、多对多的联系可以用实体码之间的函数依赖来表示。于是有函数依赖集FL
  2. 求FL的最小覆盖GL ,差集为 D= FL - GL
    逐一考察D中的函数依赖,确定是否是冗余的联系,若是,就把它去掉

应注意的问题:

  • 冗余的联系一定在D中,而D中的联系不一定是冗余的
  • 当实体之间存在多种联系时,要将实体之间的联系在形式上加以区分



4 逻辑结构设计(important)

逻辑结构设计的任务

  • 把概念结构设计阶段设计好的基本E-R图转换 为与选用的DBMS产品所支持的逻辑结构
  • 目前主要使用关系模型,关系模型的逻辑结构是一组关系模式的集合

4.1 E-R图向关系模型的转换

转换内容

将E-R图转换为关系模型: 将实体型、实体的属性和实体型之间的联系转化为关系模式。


转换原则

  1. 实体型的转换:一个实体型转换为一个关系模式
  • 关系模式的属性:实体的属性
  • 关系模式的码:实体的码

  1. 实体型间的1:1联系:
  • 可以转换为一个独立的关系模式

关系模式的属性:与该联系相连的各实体的码以及联系本身的属性
关系模式的候选码:每个实体的码均是该关系模式的候选码

  • 也可以与相连的任意一端对应的关系模式合并

关系模式的属性:与某一端关系模式合并,则在该关系模式的属性中加入另一端关系模 式的码和联系的属性
合并后关系模式的码:不变


  1. 实体型间的1:n联系:

转换为一个独立的关系模式

关系模式的属性:与该联系相连的各实体的码 + 联系本身的属性
关系模式的码:n端的 实体的码

与n端对应的关系模式合并

合并后关系模式的属性:在n端关系模式中 + 1端关系的码 + 联系本身的属性
合并后关系模式的码:不变
可以减少系统模式中的关系个数,一般情况下更倾向于采用这种方法

  1. 实体型间的m:n联系:

一个m:n联系转换为一个关系模式

关系的属性:与该联系相连的各实体的码以及联系本身的属性
关系的码:各实体码的组合

  1. 三个或三个以上实体间的一个多元联系

转换为一个关系模式

关系模式的属性:与该多元联系相连的各实体的码 + 联系本身的 属性
关系模式的码:各实体码的组合

  1. 具有相同码的关系模式可合并

目的:减少系统中的关系个数
合并方法:

  • 将其中一个关系模式的全部属性加入到另一个关系模式中
  • 然后去掉其中的同义属性(可能同名也可能不同名)
  • 适当调整属性的次序

4.2 数据模型的优化

  • 数据库逻辑设计的结果不是唯一的。
  • 得到初步数据据模式后,还应该适当地修改、调 整数据库逻辑结构,以进一步提高数据库应用系 统的性能,这就是数据模型的优化。
  • 关系数据模型的优化通常以规范化理论为指导

优化数据模型的方法:

  1. 确定数据依赖:
    按需求分析阶段所得到的语义,分别写出每个关系模式内部各属性之间的数据依赖以及不同关系模式属性之间数据依赖。
  2. 对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。
  3. 按照数据依赖的理论对关系模式进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖等,确定各关系模式分别属于第几范式。
  4. 按照需求分析阶段得到的各种应用对数据处理的要求,分析对于这样的应用环境这些 模式是否合适,确定是否要对它们进行合并或分解。
    包括水平分解和垂直分解。

注意事项:

  • 对于一个具体应用来说,到底规范化进行到什么程度,需要权衡响应时间和 潜在问题两者的利弊来决定。
  • 当查询经常涉及两个或多个关系模式的属性时,系统必须经常地进行连接运 算,连接运算的代价是相当高的。这种情况下,需要降低规范化程度。
  • 非BCNF的关系模式会存在不同程度的更新异常。如果在实际应用中对此关 系模式只是查询,并不执行更新操作,就不会产生实际影响

4.3 设计用户子模式

  • 数据库模式——全局模式。 考虑系统全局应用需求,时间效率、空间效率、易维护等。
  • 用户子模式——视图机制 考虑局部应用的特殊需求和用户体验。
  1. 使用更符合用户习惯的别名:

    • 合并各分E-R图曾做了消除命名冲突的工作,以使数据库系统中同一关
      系和属性具有唯一的名字。这在设计数据库整体结构时是非常必要的。
    • 在设计用户子模式时可以设计子模式时重新定义某些属性名,使其与用 户习惯一致,以方便使用
  2. 针对不同级别的用户定义不同的视图,提高系统的安全性 :
    假设有关系模式:
    产品(产品号,产品名,规格,单价,生产车间,生产负责人,产品成本,产品合格率,质量等级)
    为一般顾客、为产品销售部门和管理部门建立不同的视图。

  3. 简化用户对系统的使用:
    某些局部应用中经常要使用一些很复杂的查询,为了方便用户,可以将这些复 杂查询定义为视图。

5 物理结构设计

  • 为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构 的过程,就是数据库的物理设计
  • 数据库在物理设备上的存储结构与存取方法称为数据库的物理结 构,它依赖于选定的DBMS

5.1 数据库物理设计的内容和方法

关系数据库物理设计的内容

  • 为关系模式选择存取方法(建立存取路径)
  • 为关系、索引、日志、备份等数据库文件选择物理存储结构

PS:不同的DBMS产品

  • 物理环境、存取 方法和存储结构有很大差别
  • 能供设计人员使 用的设计变量、参 数范围很不相同
  • 没有通用的物理 设计方法,只能给出一般的设计内容 和原则

设计物理数据库结构的准备工作

  • 充分了解应用环境,详细分析要运行的事务 ,以获得选择物理数据库设计所需参数。
  • 充分了解所用RDBMS的内部特征,特别是 系统提供的存取方法和存储结构。
  • 有哪些索引(例如B+树索引,HASH索引, BITMAP索引等),如何建立索引;
  • 有哪些存储结构(行存储,列存储,聚簇存储) ,如何选择

物理数据库设计参数(部分列选)

  • 数据库查询事务

    • 查询所涉及的关系
    • 查询条件所涉及的属性
    • 连接条件所涉及的属性
    • 查询的投影属性
  • 数据更新事务
    • 被更新的关系
    • 每个关系上的更新操作条件所涉及的属性
    • 修改操作要改变的属性值
  • 每个事务在各关系上运行的频率和性能要求

PS:数据库上运行的事务会不断变化、增加或减少,要根据应用的变化,及时收集设计信息,调整数据库的物理结构

5.2 关系模式存取方法选择:索引方法、聚簇方法

提高存取的效率——查询、插入、删除、更新的效率

如何选择索引存取方法
根据应用要求确定:

  • 对哪些属性列建立索引
  • 对哪些索引要设计为唯一索引、组合索引、
  • 选择合适的索引方法
CREATE [ UNIQUE ] INDEX 索引名字
ON 表名 [ USING 索引方法 ] (列名1,列名2,[, ...] );CREATE UNIQUE INDEX studentname ON student
USING Hash (sname);

RDBMS提供的索引方法:

  • B-tree(B+树),hash(散列)R-tree 、Bitmap等。
  • 如果不指定,缺省一般是B-tree

选择索引存取方法的一般规则:

  • 如果一个(或一组)属性经常在查询条件中出现,则考虑在这个(这组)属性上建立索引(或组合索引);
  • 如果一个属性经常作为最大值和最小值等聚集函数的参数,则考虑在这个属性上建立索引;
  • 如果一个(或一组)属性经常在连接操作的连接条件中出现,则考虑在这个(或这组)属性上建立索引

B+树索引的特点:

  • 多分平衡树,存取效率高
  • 既能随机查找、又能顺序查找
  • 增删改操作,保持平衡





选择Hash存取方法的规则
如果一个关系的属性主要出现在等值连接条件中或主要出现在等值比较选择条件中,而且满足下列两个条件之一:

  • 该关系的大小可预知,而且不变;
  • 该关系的大小动态改变,但所选用的数据库管理系统提供了动态Hash存取方法。

索引带来的额外开销:

  • 维护索引的开销
  • 查找索引的开销
  • 存储索引的开销
  • 确定是否需要建立索引,选择哪种索引

什么是聚簇

  • 为了提高某个属性(或属性组)的查询速度,把这个(或这些)属性上具有相同值的元组集中存放在连续的物理块中称为聚簇。
  • 该属性(或属性组)称为聚簇码(cluster key)
  • 许多RDBMS都提供了聚簇功能
//1. 先创建一个聚簇
CREATE CLUSTER <聚簇名> (<聚簇码>) SIZE (<大小>);//2. 在聚簇上建立索引
CREATE INDEX <索引名> ON CLUSTER <聚簇名>;//eg:
CREATE CLUSTER emp_dept_cluster (deptno number(6) ) SIZE 1024;
CREATE INDEX emp_dept_cluster_index ON CLUSTER emp_dept_cluster;

聚簇的用途
大大提高按聚簇属性进行查询的效率

eg: 假设要查询计算机系的所有学生

  • 学生数据表随机存放,计算机系的500名学生分散存储在500个不同的物理块上,则至少要执行500次 I/O操作。
  • 如果按照专业系名聚簇存放,将同一系的学生元组聚簇在一起存放,则可以显著地减少了访问磁盘的次数。计算机系的500名学生 聚簇存储在50个不同的物理块上,只要执行50次 I/O操作

聚簇的适用范围
既适用于单个关系独立聚簇,也适用于多个关系组合聚簇

eg: 假设用户经常要按姓名查询学生成绩单

SELECT sname, cno, grade from student, sc where student.sno=sc.sno

这一查询涉及学生关系和选修关系的连接操作,按学号连接这两个关系

  • 按照学号把学生表和选修表聚簇在一起
  • 相当于把多个关系按“预连接”的形式存放
  • 大大提高连接操作的效率

当SQL语句中包含有与聚簇码有关的ORDER BY,GROUP BY, UNION, DISTINCT等子句或短语时, 使用聚簇特别有利,可以省去或减少对结果集的排序操作


聚簇的局限性

  • 在一个基本表上最多只能建立一个聚簇索引
  • 聚簇只能提高某些特定应用的性能
  • 建立与维护聚簇的开销相当大
  • 对已有关系建立聚簇,将导致关系中元组的物理存储位 置移动,并使此关系上原有的索引无效,必须重建。
  • 当一个元组的聚簇码改变时,该元组的存储位置也要相 应改变

聚簇索引的适用条件

  • 很少对基表进行增删操作
  • 很少对其中的变长列进行修改操作

5.3 确定数据库的存储结构


影响数据存放位置和存储结构的因素

  • 硬件环境
  • 应用需求
    • 存取时间
    • 存储空间利用率
    • 维护代价

这三个方面常常是相互矛盾的
必须进行权衡,选择一个折中方案


基本原则

根据应用情况将

  • 易变部分与稳定部分分开存放
  • 经常存取部分与存取频率较低部分分开存放

eg:

  • 可以将比较大的表分别放在两个磁盘上,以加快存取速度,这在多用 户环境下特别有效。
  • 可以将日志文件与数据库对象(表、索引等)放在不同的磁盘以改进 系统的性能
  • 根据应用情况和物理环境(磁盘或磁盘阵列的容量、内存的大小)

    • 易变部分与稳定部分分开存放
    • 经常存取部分与存取频率较低部分分开存放
    • 将日志文件与数据库对象(表、索引等)分开存放

在海量数据和多用户环境下,把数据分布存放在不同的磁盘或磁盘阵列上,可以改进系统性能


数据库管理系统一般都提供了一些存储分配参数

  • 同时使用数据库的用户数
  • 同时打开的数据库对象数
  • 内存分配参数
  • 缓冲区分配参数(使用的缓冲区长度、个数)
  • 存储分配参数
  • 物理块的大小
  • 物理块装填因子
  • 数据库的大小
  • 锁的数目等

  • 系统都为这些变量赋予了合理的缺省值
    在进行物理设计时需要根据应用环境确定这些参数值,以使系统性能最优。
  • 在物理设计时对系统配置变量的调整只是初步的,要根据系统实际运行情况做进一步的调整,以切实改进系统性能

5.4 评价物理结构

对数据库物理设计过程中产生的多种方案进行评价,从中选择一个较优的方案作为数据库的物理结构

评价方法

  • 定量估算各种方案

    • 存储空间
    • 存取时间
    • 维护代价
  • 对估算结果进行权衡、比较,选择出一个较优的合理的物理结构
  • 返回用户征求意见 修改设计

6 数据库的实施和维护

6.1 数据的载入和应用程序的调试

一、定义数据库结构
用DBMS提供的DDL来创建数据库结构

CREATE TABLE ;
CREATE VIEW;
CREATE INDEX;
etc


二、数据装载

  • 组织数据入库是数据库实施阶段最主要的工作。
  • 数据装载——ETL
    • 数据抽取
    • 数据转换
    • 数据载入
  • 使用ETL工具辅助完成
    ETL工作是相当费力、费时的

三、编制与调试应用程序

  • 数据库应用程序的设计应该与数据设计并行进行.
  • 在数据库实施阶段,编制与调试数据库的应用程序。 调试应用程序时由于数据入库尚未完成,可先使用 模拟数据

6.2 数据库的试运行

应用程序调试完成,并且已有一小部分数据入库后,就可以开始对数据库系统进行联合调试

主要工作包括:

  • 功能测试:实际运行应用程序,执行对数据库的各种操作,测试应用程序的各种功能
  • 性能测试:测量系统性能指标,分析是否符合设计目标

数据库性能指标的测量

  • 数据库物理设计阶段,评价数据库结构,估算时间、空间指标时,作了许多简化和假设,必然是近似结果
  • 数据库试运行则是要实际测量系统的各种性能指标
    如果结果不符合设计目标,则需要返回物理设计阶段, 调整物理结构,修改参数;有时甚至需要返回逻辑设计 阶段,调整逻辑结构

  1. 数据的分期入库
  • 重新设计物理结构甚至逻辑结构,会导致数据重新入库
  • 由于数据入库工作量实在太大,所以可以采用分期输入 数据的方法
    • 先输入小批量数据供先期联合调试使用
    • 待试运行基本合格后再输入大批量数据
    • 逐步增加数据量,逐步完成运行评价
  1. 数据库的转储和恢复
  • 在数据库试运行阶段,系统还不稳定,硬、软件故障随时都可能发生
  • 系统的操作人员对新系统还不熟悉,误操作也不可避免
  • 因此必须做好数据库的转储和恢复工作,尽量减少对数 据库的破坏

6.3 数据库的运行和维护

在数据库运行阶段,对数据库经常性的维护工作主要是由数据库管理员完成的,包括:

  1. 数据库的转储和恢复
  • 数据库管理员要针对不同的应用要求制定不同的转 储计划,定期对数据库和日志文件进行备份。
  • 一旦发生介质故障,即利用数据库备份及日志文件备 份,尽快将数据库恢复到某种一致性状态
  1. 数据库的安全性、完整性控制
  • 初始定义
  • 数据库管理员根据用户的实际需要授予不同的操作权限
  • 根据应用环境定义不同的完整性约束条件
  • 修改定义
  • 当应用环境发生变化,对安全性的要求也会发生变化,数据库管理员需要根据实际情况修改原有的安全性控制
  • 由于应用环境发生变化,数据库的完整性约束条件也会变化,也 需要数据库管理员不断修正,以满足用户要求
  1. 数据库性能的监督、分析和改进
  • 在数据库运行过程中,数据库管理员必须监督系统运行,对监测数据进行分析,找出改进系统性能的方法。
  • 利用监测工具获取系统运行过程中一系列性能参数的值
  • 通过分析这些数据,判断当前系统是否处于最佳运行状态
  • 如果不是,则需要通过调整某些参数来改进数据库性能
  1. 数据库的重组织与重构造
  1. 数据库的重组织
    数据库运行一段时间后,由于记录的不断增、删、改,会 使数据库的物理存储变坏,从而降低数据库存储空间的利 用率和数据的存取效率,使数据库的性能下降。

数据库重组织的主要工作

  • 按原设计要求
  • 重新安排存储位置
  • 回收垃圾
  • 减少指针链
  • 数据库的重组织不会改变原设计的数据逻辑结构和物理结构

数据库管理系统一般都提供了供重组织数据库使用的实用程序,帮助数据库管理员重新组织数据库

  1. 数据库的重构造
    数据库应用环境发生变化,会导致实体及实体间的联系也发生相应的变化,使原有的数据库设计不能很好地满 足新的需求
  • 增加新的应用或新的实体
  • 取消某些已有应用
  • 改变某些已有应用

数据库重构造的主要工作

  • 根据新环境调整数据库的模式和内模式
  • 增加或删除某些数据项
  • 改变数据项的类型
  • 增加或删除某个表
  • 改变数据库的容量
  • 增加或删除某些索引
  • 重构造数据库的程度是有限的
  • 应用需求变化太大,软件硬件发展太快
  • 无法通过重构数据库来满足新的需求,或重构数据库 的代价太大,则表明现有数据库应用系统的生命周期 已经结束,应该重新设计新的数据库应用系统了

个人笔记:数据库——数据库设计相关推荐

  1. PCTP考试学习笔记之二:TiDB 数据库 schema 设计

    作者: OnTheRoad 原文来源: https://tidb.net/blog/6a1007ff 本系列学习笔记根据官方课程<TiDB 高级系统管理 [TiDB v5]>整理,感谢官方 ...

  2. 基于flask的在线笔记共享管理系统【2】(数据库的设计和建立)

    基于flask的在线笔记学习系统 [2]数据库的设计 根据上一篇文章的功能分析,关于数据库我们只需要建立俩个表即可.表的结构如下. 数据库名称: cloudnotes 表: user:用户表:用来存储 ...

  3. 【Mysql】数据库的设计学习笔记

    数据库的设计 三大范式 数据库设计步骤(以个人博客举例) 收集信息 分析需求 用户表(用户登录注销,用户的个人信息,写博客,创建分类) 分类表(文章分类,谁创建的) 文章(博客)表(文章的信息) 评论 ...

  4. 数据库范式的思考以及数据库的设计

    数据库范式--通俗易懂[转] 数据库范式是数据库设计中必不可少的知识,没有对范式的理解,就无法设计出高效率.优雅的数据库.甚至设计出错误的数据库.而想要理解并掌握范式却并不是那 么容易.教科书中一般以 ...

  5. 数据库表设计、 数据库分层、myslq水平拆分、oracle表分区

    数据库表设计 数据库表结构设计方法及原则(li)数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的 ...

  6. mysql数据库查询笔记_MySql数据库基础笔记(一)

    一.表与库的概念 数据库管理数据,它是以什么样的形式组成的? 生活中的表---->表 table 多行多列,传统的数据库都是这样的;声明了表头,一个表创建好了,剩下的就是往表中添加数据 多张表放 ...

  7. 关于数据库的设计的一点思路

    2.5 年前,就学过php,不过当时并没有学好,导致对数据库的设计是一知半解的:一直都知道php 在设计时,使用的是 MVC 模式,但是什么是MVC ,却没有搞懂过.前两天重新翻看了以前的笔记,才明白 ...

  8. 商城 商品模块 数据库 表设计

    商城 商品模块 数据库 表设计 要实现一个商城,对于商品模块中的数据库表设计不懂,主要是:相同类别的产品的产品参数相同,不同类别的不同,这里就不懂要怎么设计了,所以上网找几篇博客了解. 什么是SPU. ...

  9. 初学数据库---数据库设计学习

    数据库设计学习笔记 一.理解并口述(技术点和面试点) 1.数据库简介 口述1:什么是数据?(理解并掌握) 数据(Data)是描述事物的标记符号.例如: 人的身高数据是170cm, 体重数据是60kg, ...

最新文章

  1. 中科院刘焕勇老师知识图谱关于schema博客
  2. APK 本地化和去广告
  3. 看懂三篇文章--需要归纳
  4. 哪个websocket库与Node.js一起使用? [关闭]
  5. scrollview 实现滑动到底部再滑动加载数据的功能
  6. VMware安装MikroTik RouterOS chr
  7. 数据结构-第十章 排序
  8. c语言 抽奖算法,腾讯2018校招笔试!抽奖算法思路c++实现!进入鹅厂真的简单!...
  9. SQL 个版本下载地址
  10. 大规模中文自然语言处理语料(百科,问答、新闻,翻译)
  11. SHELL下去掉变量中的回车换行
  12. mysql2008分数约束_关于SQL2008对表中列的约束
  13. 软件实习项目4——校园一卡通管理系统(实验准备与设计)
  14. matlab55中值滤波,基于MATLAB的中值滤波算法实现
  15. 泛函分析笔记7:弱收敛与弱星收敛
  16. 国标28181:实时视频播放
  17. 一个与小球碰撞有关的有趣问题
  18. 正版七日杀服务器存档,如何在网吧保存steam七日杀存档 | 手游网游页游攻略大全...
  19. 数据泄露的类型以及如何防止它们
  20. 抖音账号主页设置推荐机制

热门文章

  1. idea合并分支操作
  2. 微信小程序中wx:for使用数值循环
  3. SuperMap iDesktop场景崩溃合集(持续更新)
  4. 初七,开工,新年红包来了!
  5. 渲染管线流程描述精简
  6. 荣耀帐号服务,提升用户使用体验
  7. 弗朗西斯科·罗曼·阿拉尔孔·苏亚雷斯!!伊斯科!!
  8. 指示函数 indicator function
  9. SpringBoot集成Mybatis项目实操
  10. DAY09_继承拼图游戏案例