数据库设计
1、数据库设计概述
数据库设计。广义地讲,是数据库及其应用系统的设计,即设计整个数据库应用系统;狭义地讲,是设计数据库本身,即设计数据库的各级模式并建立数据库, 这是数据库应用系统设计的一部分。
数据库设计是指对于一个给定的应用环境,设计一个优良的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据处理要求:①信息管理要求:在数据库中存储和管理需要的数据对象;②数据处理要求:对数据对象需要进行的处理,如查询、增删改、统计和分析等。
(1.1)数据库设计的特点
(1)数据库建设的基本规律
① 三分技术,七分管理,十二分基础数据;
② 管理:数据库建设项目管理、企业(即应用部门)的业务管理;
③ 基础数据:数据的收集、整理、组织和不断更新。
(2)结构(数据)设计和行为(处理)设计相结合
① 将数据库结构设计和数据处理设计密切结合
② 传统的软件工程:重行为设计
忽视对应用中数据语义的分析和抽象,只要有可能就尽量推迟数据结构设计。
③ 早期的数据库设计:重结构设计
致力于数据模型和数据库建模方法研究,忽视了行为设计对结构设计的影响。
![]()
结构和行为分离的设计
(1.2)数据库设计方法
大型数据库设计是涉及多学科的综合性技术,又是一项庞大的工程项目。要求多方面的知识和技术。主要包括:计算机的基础知识、软件工程的原理和方法、程序设计的方法和技巧、数据库的基本知识、数据库设计技术、应用领域的知识。
数据库设计工具:
① SYBASE PowerDesigner
数据库建模-UML 工具;
② Rational Rose
UML 工具-数据库建模;
③ CA ERWin
ERwin 全称是 ERwin Data Modele 功能强大、易于使用的数据建模、数据库设计与开发工具。
数据库设计方法:
(1)手工设计法
① 设计质量与设计人员的经验和水平有直接关系;
② 缺乏科学理论和工程方法的支持,工程的质量难以保证;
③ 数据库运行一段时间后常常又不同程度的发现各种问题,增加了维护代价。
(2)规范设计法
典型方法 —— 新奥尔良(New Orleans)方法
① 将数据库设计分为若干阶段和步骤;
② 采用辅助手段实现每一过程;
③ 按设计规程用工程化方法设计数据库。
(3)基于 E-R 模型的设计方法
概念设计阶段广泛采用。
(4)3NF 的设计方法
逻辑阶段可采用的有效方法。
(5)ODL(Object Definition Language)方法
面向对象的数据库设计方法。
(6)UML(Unified Modeling Language)方法
面向对象的建模方法。
(1.3)数据库设计的基本步骤
数据库设计分为 6 个阶段:
(1)需求分析;
(2)概念结构设计;
(3)逻辑结构设计
(4)物理结构设计;
(5)数据库实施;
(6)数据库运行和维护。
在数据库设计过程中,需求分析和概念结构设计可以独立于任何数据库管理系统进行,但是逻辑结构设计和物理结构设计与选用的数据库管理系统密切相关。
如下图所示:
各阶段设计说明:
(1)需求分析阶段:是否做得充分与准确,决定构建数据库的速度和质量。
(2)概念设计阶段:对用户需求进行综合、归纳与抽象,形成独立于具体 DBMS 的概念模型。
(3)逻辑设计阶段:将概念结构转换成某个 DBMS 所支持的数据模型,并对其进行优化。
(4)物理设计阶段:为逻辑数据结构选取一个最适合应用环境的物理结构,包括存储结构和存取方法。
(5)数据库实施阶段:根据逻辑设计和物理设计的结构构建数据库,编写与调试应用程序,组织数据入库并进行试运行。
(6)数据库运行和维护阶段:经过试运行后即可投入正式运行。在运行过程中必须不断对数据库设计进行评估、调整和修改。
设计一个完善的数据库应用系统往往是上述 6 个阶段的不断反复。这个设计步骤既是数据库设计的过程,也包括了数据库应用系统的设计过程。把数据库的设计和对数据库中数据处理的设计紧密结合起来,将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计。
参加数据库设计的人员:
① 系统分析人员和数据库设计人员
自始至终参与数据库设计;
② 数据库管理员和用户代表
主要参加需求分析与数据库的运行和维护;
③ 应用开发人员
包括程序员和操作员,在实施阶段参与进来,分别负责编制程序和准备软硬件环境。
数据库设计各个阶段产生的设计文档/设计说明:
![](https://img-blog.csdnimg.cn/20210817173719974.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzgzMDQ3,size_16,color_FFFFFF,t_70)
(1.4)数据库设计过程中的各级模式
如图所示:
![](https://img-blog.csdnimg.cn/20210817175903613.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzgzMDQ3,size_16,color_FFFFFF,t_70)
(1)需求分析阶段: 综合各个用户的应用需求。
(2)概念设计阶段: 形成独立于机器特点,独立于各个 DBMS 产品的概念模式(E-R图)。
(3)逻辑设计阶段:
① 首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式;
② 然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图(View),形成数据的外模式。
(4)物理设计阶段: 根据数据库管理系统特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。
2、需求分析
需求分析 —— 分析用户的要求,是设计数据库的起点。
需求分析的重要性:结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。
需求分析常常被忽视。原因:设计人员认为这是软任务,急于进行具体的设计;用户嫌麻烦;领导不重视。
(2.1)需求分析的任务
需求分析的任务是通过详细调查要开发应用系统的组织(部门、企业等),充分了解原系统的工作概括,明确用户的各种需求,最后确认新系统的功能。
调查的重点是 “ 数据 ” 和 “ 处理 ”,获得用户对数据库的如下要求:
(1)信息要求
用户需要从数据库中获得信息的内容和性质;由信息要求可以导出数据要求,即在数据库中需要存储哪些数据。
(2)处理要求
用户要什么处理功能、对处理性能、处理方式、处理周期等的要求。
(3)安全性和完整性要求
确定用户需求的难点:用户缺少计算机知识,不能准确地表达自己的需求,提出的需求往往不断地变化。设计人员缺少用户的专业知识,不易理解用户的真正需求,甚至误解用户的需求。
解决方法:设计人员必须不断深入地与用户进行交流 ,才能逐步确定用户的实际需求。
(2.2)需求分析的方法
在调查过程中,可以根据不同的问题和条件使用不同的调查方法。常用的调查方法有:
(1)跟班作业。通过亲身参加业务工作来了解业务活动的情况。
(2)开调查会。通过与用户座谈来了解业务活动情况及用户需求。
(3)请专人介绍。
(4)询问。对某些调查中的问题可以找专人询问。
(5)设计调查表请用户填写。如果调查表设计得合理,这种方法是很有效的。
(6)查阅记录。查阅与原系统有关的数据记录。
调查了解用户需求以后,还需要进一步分析和表达用户的需求。在众多分析方法中,结构化分析(Structured Analysis,SA)方法是一种简单实用的方法。SA 方法从最上层的系统组织机构入手,采用自顶向下、逐层分解的方式分析系统。对用户需求进行分析与表达后,需求分析报告必须提交给用户,征得用户的认可。
![](https://img-blog.csdnimg.cn/20210817183053968.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzgzMDQ3,size_16,color_FFFFFF,t_70)
(2.3)数据字典
数据字典是关于数据库中数据的描述,称为元数据,它不是数据本身,而是数据的数据。数据字典在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善。数据字典是进行详细的数据收集和分析所获得的主要结果。
数据字典的内容:
(1)数据项;
(2)数据结构;
(3)数据流;
(4)数据存储;
(5)处理过程。
其中,数据项是数据的最小组成单位。若干个数据项可以组成一个数据结构。通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。
(1)数据项
数据项是不可再分的数据单位。
数据项描述 = { 数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系 }
关系规范化理论为指导,用数据依赖的概念分析和抽象数据项之间的联系 —— 函数依赖。
“ 取值范围 ”、“ 与其他数据项的逻辑关系 ” 定义了数据的完整性约束条件,是模式设计、完整性检查条件、触发器、存储过程的依据。
【例】学生学籍管理子系统的数据字典。
数据项,以学号为例。
数据项: 学号;
含义说明:唯一标识每个学生;
别名: 学生编号;
类型: 字符型;
长度: 9;
取值范围:0 至 99999999;
取值含义:前 4 位标别该学生入学年份,第 5 第 6 位所在专业系编号, 后 3 位按顺序编号,例如 201615008;
与其他数据项的逻辑关系:学号的值确定了其他数据项的值。
&