订阅本站

谈数据库设计前分析工作

漏网小鱼 发表于 2010-6-21 分类 个人随笔 | 34条评论

当数据库学习者已经基本掌握了某一种数据库设计工具后,那么如何着手开始设计数据库呢?在这里我和正准备设计第一个数据库应用项目的朋友来谈一谈项目实施前的分析工作。
一、在没有谈之前,我们首先认识一下人类的记录事物的行为。理解人类记录自身社会行为活动的原因。
纵观人类社会的发展,人类记录事件的行为方式是伴随人类文明发展而不断变化,但最终目的都是对人类各种社会行为活动的历史追朔,从而分析过去和现在的关系,分析前因后果的内部联系,明确利益分配和责任承担,分解复杂事物便于驾驭复杂事物等等。因此就有了古代的节绳记事及现代的计算机等记录载体的出现,而我们要谈到的是计算机领域存储数据的数据库部分。数据库的发展是伴随着计算机的快速发展而发展,由最早的卡片穿孔和磁带顺序存储发展到后期广泛应用的磁盘随机存储形式,数据的组织模型也由早期的网状数据库模型、层次数据库模型发展到现在普遍使用的关系数据库模型,后期由于面向对象的设计思想出现又发展出面向对象数据库模型。在本文中我们重点讨论关系型数据库的设计,其他知识只简略描述。
二、设计数据库时为什么要进行设计前的分析?
有人会不要思索的回答“是设计需要当然要做需求分析”,也有人会说“这只是为了形成设计文档而做的工作”,还有人说“有点故弄玄虚,不用做分析一样可以设计数据库”,有许多的回答让我们对数据库设计分析存在的意义增加了一些疑问。
实际上在设计数据库之前的分析工作十分重要,注意我这里所讲的分析不只是客户所提出的那些需求分析,除了客户提出的要求之外,设计人员还要更广泛的考虑到社会事物普遍规律,把握事物的本质以便更好的绘制出数据库应用系统的E-R模型(实体-关系模型)。在现实的数据库设计过程中,有些设计人员好象并没做相关分析也比较快的完成了数据库的设计工作,似乎并不需要这些分析过程,然而事实上这些设计人员恰恰相反,他们以非常快的速度完成了分析的过程,这是因为他们通过长期的工作总结出了一套更快捷的分析经验,一旦所设计的内容与其经验相符合,那么经验将充分发挥作用;如果没有任何经验可以参考,那么必然会从头开始一步一步的做完分析过程。(注意:以上我所描述的设计人员并不是职业分析员,分析员的职业特点决定了分析员所针对分析工作的必要性。)分析的目的就是利用现有分析方法对人类可以认识的事物及人类各种社会行为活动概括简化并抽象为可以理解和解释的文字及图示模型,程序员往往可以根据这些被抽象化的文字与模型通过模拟再现事物及人类行为过程。用更少的文字概括分析目的就是“通过分析事物创建模型,利用模型模拟再现事物”。实际上当我们面对一个复杂的事物进行分析时,我们会发现其过程是一个比较枯燥和艰巨,分析工作的结果往往会产生大量的文档,这些文档又会随着分析的深入不断更新,程序设计员根本没有更多的精力去应对这样的工作量,这也是出现职业分析人员及各种分析工具的原因。

三、设计数据库前涉及到的分析方法。
到现在为止还没有比较完美的完全针对数据库的分析方法,当前软件工程进行需求分时通常采用结构化分析方法和面向对象的分析方法。从面向对象的语言发展的快速趋势看,已经有一部分程序员能熟练使用面向对象的系统分析方法,但在使用面向对象的分析方法对关系型数据库进行分析时,发现数据库模拟的实体却无法做到面向对象能做到的继承的特性,这实在令人感到沮丧,因此在分析某个阶段又不得不回到结构分析方法上来。(关于使用面向对象的方法进行数据库设计时内部不可调和的矛盾的认识请参考coffeewoo的专栏的这篇文章 http://blog.csdn.net/coffeewoo/archive/2010/02/05/5291582.aspx),正如“coffeewoo”所说的那样 “关系数据库的高效及方便不是面向对象数据库模式在短期内可以轻易达到的,我们不能因为倒脏水把婴儿也泼掉了” 因此我们应从务实角度出发去分析去设计,在分析阶段要尽量使用面向对象的分析方法进行分析,这种分析方法能有效的对人类个体或团体的社会事件及行为加以抽象与概括,便于认识与理解事物的本质轮廓,面向对象的分析方法指导分析人员对已经认识的事物采用图型或文字对其本质进行描述并形成文档,同时能指导程序员在计算机环境下模拟再现真实世界中的人类个体或团体的社会行为。当然这个过程也可以通过结构化分析方法来完成,但结构化分析方法显然更适合局部事物或封闭事件内的具体行为过程的分析,它往往是在已知条件不变的环境下对事物进行分析,如果当已知条件本身发生的变化,应用结构化分析方法就明显力不从心,结果只能将原来的分析描述推翻重来。但也不能说面向对象的方法就能解决所有一切,例如对于真实存在但人类无法全面认识的事物,即便采用了面向对象的分析方法也不可能准确的描述事物的本质,其分析描述结果也不足以指导程序员通过计算机模拟事物的行为。但结构化分析方法则不同,它不会因此而影响描述事物现有的行为,它完全可以对人类不完全认识的事物进行局部分析描述,而不需要受到环境其他因素的影响。这里可能涉及到与哲学相关的认识论问题,但本文里不去讨论。(注意我们这里没讨论另一种系统分析方法—-原型法,这是因为原型法并不是一个具体的分析手段而是软件工程的实施手段,这里不做讨论。)本人建议在数据库设计前尽量使用面向对象的分析方法来进行分析,毕竟大量的数据库设计是针对各种商业团体,而商业团体已经明确的被社会定义为实体,完全适合采用面对象的分析方法进行分析,这也是本人推荐使用面向对象的分析方法的原因,强调一下笔者仅仅一家之言,因此只能是建议性的推荐并无绝对可言,有不同观点的朋友希望能有所交流。话回本文的主题上来,由于我们论坛的主题是 MS Access 数据库平台,我们就是针对设计 Access 数据库前的分析方法进行研讨。

四、举例进行分析过程的解析。
下面我们拿企业物资入库的局部行为活动进行分析。
我们通过与企业相关人员交流后获得了如下一份记录物资入库活动的核心文件,即物资入库单见下图所示。

有工作经验的朋友对上图应该比较熟悉,现在根据上图所示的入库单我们来初步分析该入库单所蕴含的,我们所关注的,对数据库设计有用的重要信息。我们将这些信息罗列如下:

描述入库单本身的信息 编号、日期 、合计(金额)
描述入库物资的重要信息 物资类别、材料名称、材料规格或代号、单位、单价、金额、备注、序号
入库活动的参与者信息 经办人、仓库管理员、验收人、部门负责人
仓库信息 仓库编号
物资供应方信息 交来单位/部门、发票号/生产单号
其他信息 暂无

为了更形象的分析这些信息,我们在上图所示的入库单上进行了相关标注如下图所示。

通过标注后,入库单中的所有信息与我们的数据库设计的相关性开始清晰起来。如果只针对企业内部的入库行为活动进行分析,那么我们采用结构化分析可以很快的得到业务流程,我们通过与企业相关人员进行交流可以将入库业务流程绘制成如下流程图。

未完等续 –  2010-6-20

声明: 本文采用 BY-NC-SA 协议进行授权 | 漏网小鱼博客
转载请注明转自《谈数据库设计前分析工作

标签

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :( :!: 8-O 8)

[使用Ctrl+回车快速提交]

您也可以使用微博账号登陆


无觅相关文章插件,快速提升流量