领域模型与E-R模型区别(转载)

最流行的六大数据模型工具
Model confusion : Domain Model & E-R Model 领域模型与E-R模型区别(转载)
转自:http://www.cnblogs.com/evanyuan/archive/2005/10/27/263366.html
前段时间看了DDD,最近在做一个项目的时候Leader要求先出E-R Model,我不是很清楚Domain Model和E-R Model具体的关系和区别。
E-R Model关注的是对象的实体和关系,是Data Modeling的一种方式,建模时并不考虑Entity的行为,在E-R概念模型的基础上可以建立relational data model及physical data model,我不太确认E-R model driven是否就是数据驱动的一种设计流程。
而Domain model driven同样是分析抽象实体并建立实体的关系的过程,同时需要建模实体的职责(对象的行为),以面向对象的手法建立领域层的模型。
我有些迷糊,E-R model driven和Domain model driven 是否是冲突的,或者说可以柔和在一起,比如先建立conceptual e-r model,然后在这个模型的基础上再分别建立relational data model和domain model。但是跟随DDD的分析过程,我实在看不出有建立e-r model的必要,是否可以说,使用了domain driven design就可以不需要e-r model了呢(至少在建立domain model之前)?

evan 发表于2005-04-06 11:37 AM
花了点时间去了解了E-R model,domain
model,conceptual model,data modeling的关系与区别,收获颇丰。反过来看,自己之前对这些概念的理解还是比较肤浅的。
首先,需要了解“数据建模”和“对象建模”的概念、关系及区别。在某种层度上两者是具有一定的对立性的,孰幼孰劣即使是专家也众口不一。
这里有一篇难得的好贴进行了大量的讨论 数据建模VS对象建模(http://www.hibernate.org.cn/viewtopic.php?t=1464&postdays=0&postorder=asc&start=0)
我们之前两周的工作,大家在概念上的不统一我想很大层度上是因为在这两者的理解上完全还是混淆的而造成的。
我们之前要求设计的E-R Model是属于数据建模的范畴,E-R Model是数据模型的一种表现形式(数据建模不只是E-R Model一种表现形式) ,E-R Model以数据为中心,关注的是对象的实体和关系,建模时并不考虑Entity的行为。在E-R概念模型的基础上可以建立“关系数据模型”进而推导出“物理数据模型”,这是一条以E-R Model为起始的数据建模的路线。 E-R Model的介绍请参看附件 “E-R Model(R).ppt ”。
值得注意的是,在扩展的E-R模型里面具有继承结构,同时以UML的形式也可以表现E-R模型,具体的介绍请参看附件“用UML表示的ER图.pdf”。不过在该领域内的专家Scott.W.Ambler提到"Unfortunately data modeling is not yet covered by the Unified Modeling Language (UML), even though persistence-related issues are clearly an important aspect of object-oriented software project. For several years I have argued that the UML needs a data model (Ambler 1997, Ambler 1997b, Ambler 2001a, Ambler 2002a) and have vacillated between various ways that it should be done."(详见 A UML Profile for Data Modeling http://www.agiledata.org/essays/umlDataModelingProfile.html )
这个给我带来了些迷糊,以UML表示的ER图属于数据建模还是对象建模?而这好像正是我们之前两周工作中所面临的问题。
为什么要强调以UML表示的ER图属于数据建模还是对象建模,因为我们之前希望在UML表现的E-R图的基础上建立Domain Model和Relational Data Model,这是否是一条合理的路,或者说在什么情况下合理,我还很难判断。不过Domain Model是属于对象建模的范畴,它和E-R Model的分析具有很大的相似性,最大的区别我认为对象建模需要为对象建立职责(对象的行为),而正因为行为的存在衍生出时序、多态等等对象模型比之数据模型所特有的东西。 从《DDD》的建模分析推导过程,我实在看不出在建立Domain Model之前有建立E-R Model的必要性。但是正如上面帖子里所讨论的,数据建模优先还是对象建模优先,对专家级别的人来说也是由其经验和偏好所决定的。在CMS项目里面,我觉得数据模型上的复杂度并不是很高,我想Domain Model优先可能合适一点。Domain Model到什么地步才会有数据模型或者是关系数据表能确定?我想还是在对象和其属性大致确定的时候比较合适。
最后,我们还提到了概念模型(conceptual model),容易让人混淆的是不管是数据模型还是对象模型都会有 概念的层面。在数据建模中通常将E-R Model就称之为概念数据模型(接下来的层面是关系数据模型和物理数据模型);在对象模型中,对象图通常是从粗到细具有不同的level,可以将只考虑对象实体的划分和关系的建立的层面称之为概念模型(可参考《Analysis Pattern》)
希望若干时间以后我会觉得上面的理解还是很肤浅。