【请教讨论】数据建模方面的问题,如何建模?(分不够再加)
先说说具体情况吧:
过去当一个新项目过来时,先由项目经理或售前人员调研需求,提供一些概要设计。然后技术负责人自己或找几个人细化这些文档后手工撰写建表文档和DDL文档,再建立数据库。这样仅靠数据库建表文档很难让需求调研人员检查业务流程的正确性(因为缺乏表间关系的描述)。
最近新来的项目不是特急,而且规模比较大(关于政府电子政务方面的业务)。所以决定通过建模的方式来设计数据库。但是公司内部技术人员都没有任何的建模经验,完全无章可循,所以只能靠自己摸索。看了几天关于建模的东西,总是感觉很乱,理不出头绪,到底建模有什么规律可循?应该如何去建模?
比如:
1、我看网上说一般数据建模有4种方式,
CDM(概念数据建模)
OOM(面向对象建模)
BPM(业务流程建模)
PDM(物理系统建模)
(1)他们之间有什么关系和区别?是不是数据建模选择任何一种方式都可以,殊途同归?还是说一个项目可以同时利用其中的一个或几个方式建模?
(2)如果只能选择一种方式建模,那么应该如何选择?是CDM还是OOM?
2、建模和E-R图有什么联系,是不是数据建模就是画E-R图?还是说E-R图时独立于这4种建模方式的一个设计模式?E-R图应该由需求调研人员来做还是技术人员来做?
3、UML和4种设计模式及E-R图又有什么关系?建模一定要用到UML语言来描述吗?
4、如果采用CDM方式建模,是不是在自动转化后里面的实体和实际数据库的表是一一对应的关系?
5、建模工具好多,Rose、powerdesigner、erwin、visio、together等等,这些工具都一样吗?面对我们现在的项目,用哪个工具最合适?PD吗?
6、有没有开源的建模工具?哪里有建模方面电子教程的资料?推荐一下谢谢:)
先想到这些问题,再想到再提,因为刚接触问题可能比较初级,见笑。有些问题我也查过资料,但感觉还是不很明白,希望在这里能够得到有这方面经验的朋友帮助,谢谢!
------解决方案--------------------
说说我的看法:
项目成功有几个要素:
1 业务是否理解,这方面多花一些功服,做一些客户能看明白的,UML客户看不了。实施也看不了。
2 这些不要为了建模而建模,建模工具只是用来帮助分析业务的,分析程序设计的。数据库设计画e-r图,只要能正确分析业务,不会漏,不会后面有问题
就是用白板也没有事,当然,工具可以帮你快速生成一些角本,用更好了。
3 设计时多与非开发人交流,后面工作就好做一些,开发前多做评审。
我工作11年了。UML,也看了不少,实际应用中,只是用它来讨论多。很少为了文档而做那些,当然我们的项目都比较紧。
我们现在用的是代码管理工具svn vss ,数据设计powerdesigner,脑图软件,也用startUML 只讨论多。
还有测试,测试管理软件。
------解决方案--------------------
谈谈我的观点:
1.先说一下你提到的4种建模方式。其实不应该说是4种方式,而是个阶段。我们从一个例子来将。
需求:建立一套CMS系统。(为什么是CMS呢?可能是比较有典型性吧,其实是我比较熟悉)
第一步:拿到了需求我们要做分析,CMS系统都管什么呢?“内容”,“文件”,“应用”,“模板”....很多很多。让我们来明确这些业务概念。
“内容”是个抽象概念,用来描述所有系统管理的对象。“应用”是内容的一种形式,和“图片”“视频”并列,数据内容之下的概念。“文件”是“内容”的一种承载方式,与其并列的还有“数据库”。
好了,我们明确的业务概念和这些概念之间的关系,这个阶段可以看做“概念模型”。此阶段明确了基本的业务范围,确定了术语(这个很重要,否则回在后续阶段出现“鸡同鸭讲”的情况。)
“概念模型”可以有很多表达方式,Word、UseCase都无所谓,只要说清楚了就行。
第二步:业务概念明确了,但这些概念都是静态的,呆滞的。我们要让他们活跃起来,要考虑各个概念的生存周期,状态变化等等。这些就需要通过“业务流程模型”来体现。
“业务流程模型”一般我习惯再用UML的状态图、序列图表达。
第三步:以上两步完成了系统概貌就清晰了,你的需求分析已经完成了80%了。下面就要细化概念,将笼统的概念明确为具体的概念。这个阶段有很多方法论,例如:DDD(领域设计)目前很流行。
我习惯用UML的静态图(类图)来描述,主要关注与概念的对象化。这里有一些设计技巧和经验,例如:“状态”是用单一属性实现,还是采用状态对象实现。
第四步:上述工作完成后恭喜你,你的需求分析基本完成了。在详细设计之前我们还需要建立数据结构(就是“物理模型”)。这个阶段是依据上一阶段的产出进行的优化,主要是考虑数据结构优化,添加冗余,或拆分复杂结构等等等等。
以上是比较完整了思考流程,具体实施时可根据情况略有缩减。
2.E-R图很早期用过感觉就是“对象实体模型”(即:上述第三步的产出)
3.UML和E-R图没有关系,其实UML只是设计语言的Best Practice。可以根据个人习惯选用其他形式。
4.上面已经阐述了这个问题
5 & 6.工具的选择还是习惯。由于公司禁止使用盗版,申请licence比较麻烦,我基本上只使用free的工具目前我在使用startUML(这个对中文支持不好),做完后粘贴到Word中。
------解决方案--------------------
1、我看网上说一般数据建模有4种方式,
CDM(概念数据建模)
OOM(面向对象建模)
BPM(业务流程建模)
PDM(物理系统建模)
(1)他们之间有什么关系和区别?是不是数据建模选择任何一种方式都可以,殊途同归?还是说一个项目可以同时利用其中的一个或几个方式建模?
上述4中模型,都是从不同的角度对一个系统进行建模。CDM主要是从词汇的角度来看系统,偏向于静态视图;BPM主要是从业务角度来看系统,偏向于动态视图;PDM主要是从系统实施角度来看系统,如那个机器上需要安装一个模块等等,当然也包括网络拓扑结构等等,偏向于静态视图。OOM最重要的工具就是大名鼎鼎的UML了,在UML的3位发明人的UML User Guide一书中,谈及体系架构,他们认为,一个系统的体系架构包括5个视图:用例视图,设计视图,进程视图,实现视图和实施视图。用例视图描述了系统的需求,设计视图明确了系统的词汇,进程视图主要针对系统的性能,实现视图主要针对软件配置管理,实施视图主要针对网络拓扑、交付和安装等方面。因此OOM涵盖了其他3种大部分内容。
(2)如果只能选择一种方式建模,那么应该如何选择?是CDM还是OOM?
由于(1)中谈及的原因,大部分情况下应该选择OOM。并且OOM有很多很好的专业的工具软件。
2、建模和E-R图有什么联系,是不是数据建模就是画E-R图?还是说E-R图时独立于这4种建模方式的一个设计模式?E-R图应该由需求调研人员来做还是技术人员来做?
大部分情况下,你可以认为数据建模(data modeling)就是画ERD,但是此种data modeling和你上面提及的CDM是完全不同的。ERD通常是由系统分析员,在进行需求分析的基础上和DBA一起完成的,不是非技术人员可以胜任的工作。
3、UML和4种设计模式及E-R图又有什么关系?建模一定要用到UML语言来描述吗?
一般认为UML和OOM结合最为紧密,事实上,UML就OOM的产物。但它也可以用于其他三种建模方式服务。至于和ERD的关系不是很大。建模未必需要用到UML,你可以完全使用诸如纯文字,或者加上古老的流程图来完成,但UML可以带来很大的方便,为技术人员的沟通带来很大便利,没有用文字描述的模糊性。
4、如果采用CDM方式建模,是不是在自动转化后里面的实体和实际数据库的表是一一对应的关系?
一般不会,即便UML也不能(绝大部分情况如此)。UML侧重的不是data modeling。用专门的data modeling工具,诸如ERWin或者PowerDesigner则可以。
5、建模工具好多,Rose、powerdesigner、erwin、visio、together等等,这些工具都一样吗?面对我们现在的项目,用哪个工具最合适?PD吗?