3.3 软件项目数据库设计
数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使其能够有效地存储数据,满足各种用户的信息要求和处理要求。
数据库设计包括需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施及数据库的运行和维护6个阶段。
3.3.1 需求分析
需求分析也称为软件需求分析或系统需求分析,是开发人员经过深入细致地调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转换为完整的需求定义,从而确定系统必须做什么的过程。
需求分析是在用户调查的基础上,通过分析,逐步明确用户对系统的需求,包括数据需求和围绕这些数据的业务处理需求。同时,需求分析是软件生存周期中的一个重要环节,该阶段主要是分析系统在功能上需要“实现什么”,而不是考虑如何去“实现”。
需求分析主要表现在以下3个方面。
(1)功能性需求。功能性需求即软件必须完成哪些事、必须实现哪些功能,以及为了向其用户提供有用的功能所需执行的动作。功能性需求是软件需求的主体。开发人员需要亲自与用户进行交流,核实用户需求,从软件帮助用户完成事务的角度上充分描述外部行为,形成软件需求规格说明书。
(2)非功能性需求。作为对功能性需求的补充,软件需求分析的内容中还应该包括一些非功能性需求,主要包括软件使用时对性能方面的要求、运行环境要求,以及软件设计时必须遵循的相关标准和规范、用户界面设计的具体细节、未来可能的扩充方案等。
(3)设计约束。一般也称为设计限制条件,通常是对一些设计或实现方案的约束说明。例如,要求待开发软件必须使用Oracle数据库系统完成数据管理功能,运行时必须基于Linux环境等。
3.3.2 概念结构设计
概念结构设计的任务是在需求分析阶段产生的需求说明书基础上,按照特定的方法把它们抽象为一个不依赖于任何具体机器的数据模型,即概念模型。概念模型使设计者的注意力能够从复杂的实现细节中解脱出来,而只集中在最重要信息的组织结构和处理模式上。
概念数据模型主要在系统开发的数据库设计阶段使用,是按照用户的观点来对数据和信息进行建模,利用实体关系图来实现的。它描述系统中的各个实体及相关实体之间的关系,是系统特性和静态描述。数据字典也将是系统进一步开发的基础。
1.概念模型的主要特点
概念模型的主要特点包括以下几个方面。
(1)能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是现实世界的一个真实模型。
(2)易于理解,可以用它和不熟悉计算机的用户交换意见。用户的积极参与是数据库设计成功的关键。
(3)易于更改,当应用环境和应用要求改变时容易对概念模型修改和扩充。
(4)易于向关系、网状、层次等各种数据模型转换。
概念结构设计是对信息世界进行建模,常用的概念模型是E-R模型。E-R模型是用E-R图来描述现实世界的概念模型。
2.实体之间的联系
在现实世界中,事物内部及事物之间是有联系的。而在计算机世界中,实体内部的联系通常是指组成实体的各属性之间的联系,实体之间的联系通常是指不同实体型实体集之间的联系。
(1)一对一联系(1:1)。如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与其联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:1。
(2)一对多联系(1:n)。如果对于实体集A中的每一个实体,实体集B中有n个实体(n>1)与其联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与其联系,则称实体集A与实体集B有一对多联系,记为1:n。
(3)多对多联系(m:n)。如果对于实体集A中的每一个实体,实体集B中有n个实体(n>0)与其联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m>0)与之联系,则称实体集A与实体集B具有多对多联系,记为m:n。
两个实体之间的联系如图3-1所示。
图3-1 实体之间的联系
3.3.3 逻辑结构设计
逻辑结构设计是将概念结构设计阶段完成的概念模型转换成能被选定的数据库管理系统支持的数据模型。这里主要是将E-R模型转换为关系模型。需要具体说明把原始数据进行分解、合并后重新组织起来的数据库全局逻辑结构,包括所确定的关键字和属性、重新确定的记录结构和文件结构、所建立的各个文件之间的相互关系,形成本数据库的数据库管理员视图。
逻辑结构设计一般分为以下3个步骤。
(1)从E-R图向关系模式转换。数据库的逻辑设计主要是将概念模型转换成一般的关系模式,也就是将E-R图中的实体、实体的属性和实体之间的联系转换为关系模式。
(2)数据模型的优化。数据库逻辑设计的结果不是唯一的。为了进一步提高数据库应用系统的性能,还应该适当修改数据模型的结构,以提高查询的速度。
(3)关系视图的设计。关系视图的设计又称为外模式的设计,也称为用户模式设计,该模式是用户可直接访问的数据模式。同一系统中,不同用户可有不同的关系视图。关系视图来自逻辑模式,但在结构和形式上可能不同于逻辑模式,所以它不是逻辑模式的简单子集。
关系视图主要有以下3个作用。
(1)通过外模式对逻辑模式的屏蔽,为应用程序提供一定的逻辑独立性。
(2)能更好地适应不同用户对数据的不同需求。
(3)为不同用户划定不同的访问数据范围,有利于数据的保密。
3.3.4 物理结构设计
数据库的物理结构设计是指数据库存储结构和存储路径的设计,即将数据库的逻辑结构设计在实际的物理存储设备上加以实现,从而建立一个具有较好性能的物理数据库,该过程依赖于给定的计算机系统。在这一阶段,设计人员需要考虑数据库的存储问题,即所有数据在硬件设备上的存储方式管理和存取数据的软件系统数据库存储结构(以保证用户以其所熟悉的方式存取数据),以及数据在各个位置的分布方式等。
总的来说,数据库的物理设计包括以下几个方面。
(1)确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构。
(2)对物理结构进行评价,评价的重点是时间和空间效率。
如果评价结构满足原设计要求,则可进入到物理实施阶段;否则,就需要重新设计或修改物理结构,有时甚至要返回逻辑设计阶段修改数据模型。
1.数据库物理设计的方法
(1)对于数据库查询事务,需要得到查询的关系、查询条件所涉及的属性、连接条件所涉及的属性、查询的投影属性。
(2)对于数据更新事务,需要得到被更新的关系、每个关系上的更新操作条件所涉及的属性、修改操作要改变的属性值。
(3)除此以外,还需要制定每个事务在各关系上运行的频率和性能要求。
通常,关系数据库物理设计的内容主要包括选择关系模式存取方法,以及设计关系、索引等数据库文件的物理存储结构。
2.关系模式存取方法的选择
1)B+树索引
如果一个(或一组)属性经常在查询条件中出现,则考虑在这个(或这组)属性上建立索引(或组合索引);如果一个属性经常作为最大值和最小值等聚集函数的参数,则考虑在这个属性上建立索引;如果一个(或一组)属性经常在连接操作的连接条件中出现,则考虑在这个(或这组)属性上建立索引。
2)hash索引
如果一个关系的属性主要出现在等值连接条件中或主要出现在等值比较选择条件中,则此关系可以选择hash存取方法。
3.3.5 数据库的实施
数据库实施阶段包括数据的载入与应用程序的编码和调试。
1.载入数据
为提高数据输入工作的效率和质量,我们可以针对具体的应用环境设计一个数据输入子系统,由计算机来完成数据入库的任务。在源数据入库前,要采用多种方法对其进行检验,以防止不正确的数据入库,这部分的工作在整个数据输入子系统中是非常重要的。
2.数据库的试运行
在原有系统的数据有一小部分已输入数据库后,就可以开始对数据库系统进行联合调试了,称为数据库的试运行。这一阶段要实际运行数据库应用程序,执行对数据库的各种操作,测试应用程序的功能是否满足设计要求。如果不满足,对应用程序部分则要修改、调整,直到达到设计要求为止。
在数据库试运行时,还要测试系统的性能指标,分析其是否达到设计目标。在对数据库进行物理设计时已初步确定了系统的物理参数值,但在试运行阶段也要实际测量和评价系统性能指标。
(1)组织数据入库是十分费时、费力的事,如果试运行后需要修改数据库的设计,则还要重新组织数据入库。因此,应分期分批地组织数据入库,先输入小批量数据做调试用,待试运行基本合格后再大批量输入数据,逐步增加数据量,逐步完成运行评价。
(2)在数据库试运行阶段,系统还不稳定,软、硬件故障随时可能发生,而系统操作人员对新系统还不熟悉,误操作也在所难免,因此要做好数据库的转储和恢复工作,以减少对数据库的破坏。
3.3.6 数据库的运行和维护
数据库试运行合格后,数据库开发工作就基本完成了。但是由于应用环境的不断变化,数据库运行过程中物理存储也会不断变化,因此对数据库设计进行评价、调整、修改等维护工作是一个长期的任务,也是设计工作继续提高、改进的原因。
数据库的维护工作主要包括以下几个方面。
(1)数据库的转储和恢复。数据库的转储与恢复是系统正式运行后最重要的维护工作之一。
(2)数据库的安全性、完整性控制。在数据库运行过程中,由于应用环境的变化,对安全性的要求也会发生变化,系统中用户的密级也会改变,因此需要数据库管理员不断修正以满足用户要求。
(3)数据库性能的监督、分析和改造。在数据库运行过程中,监督系统运行、对监测数据进行分析、找出改进系统性能的方法是数据库管理员的另一重要任务。
(4)数据库的重组织与重构造。数据库运行一段时间后,记录不断被添加和修改会使数据库的物理存储情况变坏,降低数据的存取效率及数据库的性能,这时数据库管理员就要对数据库进行重组织或部分重组织。关系数据库管理系统一般都提供数据重组织的实用程序。在重组织过程中,按原设计要求重新安排存储位置、回收垃圾、减少指针链等,以提高系统性能。
数据库的重组织并不修改原设计的逻辑和物理结构,而数据库的重构造是指修改部分数据库的模式和内模式。