大型项目中如何开展数据库设计工作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大型项目中如何开展数据库设计工作
本文基于我在上海证券交易所第三代监察系统项目的实践描述如何在
大型项目中开展数据库设计工作,本文避免过多的描述具体实现的技
术细节,侧重于从软件工程角度描述数据库设计的整体流程以及项目
各个阶段的工作侧重点。
开展数据库设计工作所需条件
对于基于数据信息处理的大型行业解决方案项目来说,数据库设计是整个系统设计工作中最为重要、最为基础的环节之一,具备什么样的条件才能顺利开展数据库设计工作呢
本章主要从资源配置角度描述如何确保数据库设计工作能够顺利进行。
独立的数据库设计小组
对于一个软件合同额数千万,前后参与项目的人员数量数百人的大型软件工程项目来说,项目管理的重要程度要远比几十个人月、几个人完成的小项目要重要的多,而成功进行项目管理的基础之一便是完备的组织机构。
对于一个基于数据处理的大型核心业务应用系统来说,数据库设计是整个应用系统实现的基础,可以说其设计质量的好坏直接影响到整个项目的成败,应当有专门的组织机构负责其设计。
教训:在3GSS项目中数据库规划组成立时间过晚,只是在开发工作过半的时候才组建起来,在这之前我个人也是在需求工作、架构工作都已基本结束的时间点进入项目组,这对于顺利的进行数据库设计造成了很大的困难。
职责
数据库设计小组的职责主要体现在以下方面:
参与项目总体架构设计,对于涉及到数据库应用的架构问题主要负责。
保证在项目进行过程中数据库设计的稳定,为各个应用子系统的开发提供稳定的数据平台,从而保证项目计划的正常执行。
在数据库性能优化工作起到主导作用,并对数据库性能优化的结果负责。
对于数据库版本的管理和发布以及变更负责。
做好需求与开发之间的桥梁。
在项目组中的地位和作用
数据库设计小组在整个项目组的组织机构配置中应当与架构组、需求组、测试组等平级,直接对项目组PM、PSM负责,因为数据库设计的工作需要各个小组的积极配合才能够顺利完成,所以项目小组之间的沟通协调工作显得尤其重要,如果不能做到从组织机构上将数据库设计小组提到项目组中一个相对较高的位置上,那么在一个大型项目组中,沟通协调工作将会很难进行。
教训:3GSS项目中,数据库规划组在项目进入到编码阶段之前并没有单独独立出来,只是隶属于核心预警系统组,因此在与其他组的沟通协调方面增加了一定的困难。
如何组建数据库设计小组
描述数据库设计小组的组建过程和资源角色配置。
角色配置
一个数据库设计小组主要应当包括以下角色:
资源使用
可以这样说,数据库设计工作没有太多的开发工作量,但是对人员素质的要求很高,因此数据库设计小组的组建要按照“外科手术”的标准进行,贵在精而不在多:
硬件资源
数据库设计工作顺利开展的一个重要条件是拥有既定硬件方案所规定型号的主机以及配套的存储设备,并且网络通讯能力要和真实上线条件一致,总之数据库设计工作需要一整套真实上线环境下的硬件设备,这不仅仅是数据库设计的需要,同时也是整个项目开发工作的一个重要基础条件,因为没有经过真实上线环境的检验,谁也不敢说我们用PC机和低档服务器开发出来的系统能否在上线的时候稳定运行。必需要保证在编码工作开始前准备好硬件方案所规定型号的主机以及配套的存储设备。
教训:3GSS项目在7月进入开发编码阶段,而硬件环境直到9月份才到位,在这之前我们只能使用PC机来作数据库服务器,根本没有办法模拟大数据量存储,致使数据库物理设计的优化调整只能延后,如果我们能够在这宝贵的2个月时间内仔细验证、优化我们的数据库物理设计方案,我们完全可以规避很多实现风险,也不会造成后来开发阶段数据库存储性能的瓶颈问题。
设计工具
工欲善其事,必先利其器,现在有很多数据库设计工具可供选择,3GSS项目选择Sybase公司的作为设计工具,我认为这个工具主要有以下好处:
可以方便地进行数据库的物理设计、逻辑设计
有很强的文档生成能力,可以定制生成各种数据库设计文档
拥有数据库反向工程能力
数据库设计工作的流程与方法
首先提出一个问题:在一个项目中数据库设计工作什么时候开始启动什么时候结束
我认为,从需求工作启动的那一刻起,数据库设计工作就正式开始了,直到项目交付完毕、正式上线运行方才告一段落!其中工作重心主要放在需求阶段、架构设计阶段、详细设计阶段。
需求阶段
数据库的设计,特别是大型核心业务应用系统的数据库设计,远非建几张数据库表那么简单,在数据库设计工作的初时阶段,就其本质来讲,是对客户核心业务的一次数据建模,出色完成该阶段数据库设计任务的关键条件是对用户核心业务的业务模式、处理流程、数据构成充分理解,可以说在这一阶段的数据库设计工作中,并没有涉及多少数据库技术方面的工作,更多的工作集中在对于客户核心业务的理解和学习上,为在后续阶段对数据库进行逻辑设计打好基础。而在这一方面,无疑需求组的同事是处于主导地位的,我们必须和需求组的同事合作,获取它们的帮助,同时,我们的参与也会促进需求组的同事进一步和客户沟通、明确很多业务方面的细节问题,从某种意义上讲也是间接推动了客户需求的细化工作。
数据库设计小组需要在需求阶段投入最大的精力和资源。
这一阶段数据库设计小组(以数据建模员为主)主要从事以下方面的工作:
对于客户需求的分析、理解、细化
有人可能会说:这是需求组来作的事,干吗让我来做
这种观点是不正确的,因为需求人员的工作是站在偏业务的方面与客户进行沟通,而数据库设计人员是站在设计实现的角度去作,可以说数据库设计人员对于客户的数据需求比需求组的同事更加敏锐。
这段时间的工作是数据库设计工作中最困难也是最重要的工作,因为对于客户业务需求的理解是整个数据库设计工作的基础,磨刀不误砍柴工,在需求阶段将客户业务需求理解透彻将会在后续的设计工作中节省大量的时间。
数据概念模型建模
在对客户的需求用例有了比较透彻的理解之后,就应当着手针对需求用例进行数据抽象,得出初步的数据流图、E_R模型、数据字典。
主要应当考虑以下方面的内容:
创建数据字典和E_R模型图表。E_R模型图表和数据字典可以让任何了解数据库的人都明确如何从数据库中获得数据。ER图对表明表之间关系很有用,而数据字典则说明了每个字段的用途以及任何可能存在的别名。对后续开发SQL来说这是完全必要的。
确定数据依赖,识别数据实体之间的关系,对数据实体间的关系作规范化处理。数据库实体之间关系规范化的范式有很多专门的技术文档可供参考,这里不加详细描述,但是需要指出一点,在实际项目实践过程中,并不一定完全按照范式的要求实现就是最好的设计,需要根据实际情况