ofbiz 中的data model(转载)

原创 2004年08月02日 14:35:00
ofbiz 中的data model


  
 关于ofbiz中的data model
  
 ofbiz中参考"The data model resource toolkit" volumn1,volumn2 及一些CRM、ERP软件中的设计方法,在整个项目的不同子系统中进行data model的设计。在没有看data model之前,我认为ofbiz的entity engine其实不是一个非常好的的设计,他只是起到一层封装的作用而已,没有对以往的直接写sql 语句的做法有很大的提高,因为它大量的使用了map,而这在编码阶段是很容易出错的,许多错误只有到运行时才能发现,给编码人员调试工作带来了很多麻烦。在这方面相比hibernate等or mapping的工具,有着比较大的劣势。而且他的查询做的也不够好。
 但是我想entity engine可能与data model的设计结合可能综合来看会带来很多的好处。
  
 我们以往的数据库设计很多都是基于三范式来进行的,更多从项目出发,根据实际情况来设计,对于扩展性(通过增加字段或表)和一些需要考虑的与业务相关的情况考虑不够。ofbiz的data model设计时就融入了一些oo的思想,对项目而言未必是合适,而且带来一定的编码工作量的增大,并且在查询和统计方面可能会复杂很多,但是参考ofbiz的data model设计,可以为我们的基于业务的复用的思考带来一些新的思路。以技术平台的复用加上业务上的复用,把业务的复用建立在扎实的技术平台之上,这是我们思考已久的事情。而ofbiz3。0的新版本就是这样做的。
  
 data model的设计也可以用很多的pattern来表示,以下对其中几个做一个简单的介绍。
  
 Extensibility Pattern
  
 这是使用比较多的一个,在很多子系统中使用,主要解决了设计时和运行时的扩展性问题。对于一个实体表,我们可能需要另外三到四张相关的表。我们用Entity来表示实体表,那我们还需要EntityClass (optional) EntityType, EntityAttribute, and EntityTypeAttr。他们的关系如下:

 screen.width/2)this.width=screen.width/2" vspace=2 border=0>
  

 我们假设部门内部设计一个管理系统,管理部门内部正在从事的项目,以项目为例,图中的entity即为项目表,比如有项目编号,项目名称,等字段;entitytype表表示产品的类型,比如软件项目(SOFTWARE_PROJ),硬件项目(HARDWARE_PROJ)还是咨询服务(SERVICE_PROJ)。那么如果一个项目只有一种类型,那么entity与entitytype就是一对一的关系,如果一个项目有几个类型,比如金交所同时负责硬件和软件,那么增加entityclass来表示一对多的关系,所以说entityclass是可选的。
  
 对于不同类型,可能有一些公共的属性,我们可以设计为entitytype的字段,对于不同类型可能差异较大,我们需要记录不同的属性的时候,我们注意到entitytype中有一个HAS_TABLE的字段,表示此entitytype记录是否有专门的表来记录类型,如果某记录的HAS_TABLE字段为"Y",则有一个表名与Entitytype中的这条记录的Type字段名称一样的表,表示此类型的信息。比如entitytype中一条记录,insert into table entitytype(seq,type,has_table) values (1,"HARDWARE_PROJ","Y"wink.gifscreen.width/2)this.width=screen.width/2" vspace=2 border=0>,则表示另外有一张表名为HARDWARE_PROJ的表来记录此类型的具体信息。我们可以看到entitytype中还有一个parenttype,用来表示继承关系,比如我们可以将软件项目分为交易类项目,银行类项目,则他们的parenttype都是软件项目。
  
 entityAttr表就比较好理解,表示对entity的扩展,一个attr就可以代表entity中的一个column,比如一些attr只有很少的entity中有,而且也不常用,再如一些设计时没有考虑到的字段,就可以通过这种方式做扩展。
  
 entitytypeattr就是表示对entitytype的扩展。
  
 party patten
  
 基于上面的Extensibility Pattern,我们可以来考虑party pattern的设计,这里的party是指参与者。我们知道目前许多企业都在做向客户中心的转移。那么统一的客户信息就非常必要。比如对于一个大的机构而言,他的供应商,同样也是自己的客户,比如ibm是我们的供应商,但是我们也可以做一些他们的外包的项目,或者未来我们可以为ibm做一些内部项目,这样他们就成了我们的客户。对于party可以分为个人(Person)与组织(Organization)两个类型。不同party间的关系也是错综复杂的,我们如何来定义一个清晰模型就变得越来越重要。如果记录在不同的表中,可能会给未来的分析决策带来不便。
  
 在公司内部,各员工间、不同部门间、以及各角色之间的关系使用传统的方式也变得难以定义。
  
 party的设计目前在不同的数据建模的书中都不相同,但都是作为一个设计的重点。在ofbiz中对party的定义相对简单。由Party PartyClassification PartyClassificationType PartyType PartyAttribute PartyTypeAttr PartyRole RoleType RoleTypeAttr PartyRelationship PriorityType PartyRelationshipType PartyDataObject PartyGroup Person等表构成(注:在文档中还有Customer表,但查实际的entity 定义中没有,PartyGroup文档中没有列出)。

 参照刚才的Extensibility Pattern,根据名称我们也可以知道每张表大致的意思。
 Party中定义所有的Party,所有的参与者在party表中定义,无论客户、供应商、员工或是其他。
 partytype中分解类型,PartyGroup和Person是PartyType表中Has_Table=''Y''的两条记录。
 PartyRole中定义Party具有的角色,角色在RoleType中定义。
  
 还有一点需要注意,对应的权限设计,每个party可以有多个UserLogin帐户,UserLogin与Party是多对一的关系。
  
 小结
 以往在技术架构上考虑的多,确实业务上抽象比较困难,通过在表结构设计方面的一些考虑,可能能为我们在业务上复用带来一些思路。而我确实听说一些国内公司的产品能够实现技术框架、技术组件、业务组件、业务流程几个级别的复用,相信我们也可以做到。
  
 -------------------------------
  
 参考文档
         ofbiz文档:/website/entity-overview.html
         ofbiz data model     

Apache OFBiz源码解读之MVC模型

Apache OFBiz的MVC模型的实现机制分析与源码解读。
  • yanghua_kobe
  • yanghua_kobe
  • 2015年02月01日 14:02
  • 6561

ofbiz之entity实体写法

实体定义文件  实体定义文件一般存放位置是在对应模块的entity文件夹下面,以party为例,party的实体定义文件路径为 %ofbiz-home%\applications\party\en...
  • codepest
  • codepest
  • 2013年02月03日 13:01
  • 6402

在OFBIZ中使用多个数据库的方法

要在OFBIZ中使用多个数据库,我们就需要知道OFBIZ实体与数据库的关联关系。然后要知道实体分组。 我们每定义一个实体就应该明确的将该实体分到对应的实体分组中,一个实体分组可以包含多个实体。每个分组...
  • hezhipin610039
  • hezhipin610039
  • 2013年01月24日 14:56
  • 3386

UML建模之数据建模(Data Model Diagram)

一、数据库模简介 二、数据建模元素 1、表(Table) 2、表索引(Table Index) 3、表触发器(Table Trigger) 4、表约束(Table Constraint) ...
  • heshengfen123
  • heshengfen123
  • 2013年07月18日 00:13
  • 1260

Core Data浅谈系列之九 : 使用Mapping Model

通常,我们都会尽量使数据模型的变化尽量简单。但有些情况下,不得不进行大的改动,甚至是重新设计数据模型。在这种情况下,之前提过的简单数据迁移已经无法适应了,需要引入Mapping Model这个中间层。...
  • yangkunlll
  • yangkunlll
  • 2013年07月09日 10:07
  • 348

数学建模与数据科学简要(Mathematical model&Data science)

数学建模 数据科学 mathematical_model data_science
  • seanzhen52
  • seanzhen52
  • 2017年05月27日 15:56
  • 562

ExtJS教程(5)---Ext.data.Model之高级应用

Ext.data.Model的一些高级应用
  • jaune161
  • jaune161
  • 2014年07月06日 23:28
  • 18011

Core Data浅谈系列之九 : 使用Mapping Model

通常,我们都会尽量使数据模型的变化尽量简单。但有些情况下,不得不进行大的改动,甚至是重新设计数据模型。在这种情况下,之前提过的简单数据迁移已经无法适应了,需要引入Mapping Model这个中间层。...
  • jasonblog
  • jasonblog
  • 2013年01月22日 10:33
  • 8763

步步为营UML建模系列七、表图(Data model diagram)

概述 数据模型Profile是Enterprise Architect的UML扩展来支持关系数据库建模。它包括一些定制扩展,如:表,数据库图表,表键,触发器和约束。它是一种在UML中对关系数据库建模...
  • acervogue
  • acervogue
  • 2012年03月31日 09:40
  • 327

Core Data浅谈系列之九 : 使用Mapping Model

原帖地址: 通常,我们都会尽量使数据模型的变化尽量简单。但有些情况下,不得不进行大的改动,甚至是重新设计数据模型。在这种情况下,之前提过的简单数据迁移已经无法适应了,需要引入Mapping ...
  • liuyujinglove
  • liuyujinglove
  • 2014年05月06日 18:11
  • 416
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ofbiz 中的data model(转载)
举报原因:
原因补充:

(最多只允许输入30个字)