`
jiasudu1649
  • 浏览: 724593 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于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。他们的关系如下:

 
 

 我们假设部门内部设计一个管理系统,管理 部门内部正在从事的项目,以项目为例,图中的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"screen.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 
分享到:
评论
4 楼 javajdbc 2009-12-03  
<A HREF="http://www.baidu.com">百度</A> 很少有ofbiz资料,谢谢
3 楼 javajdbc 2009-12-03  
javaeye 写道
文字
2 楼 javajdbc 2009-12-03  
引用
ofbiz

[url]( ⊙o⊙ )哇[/url]
1 楼 lfrick 2008-06-18  
谢谢。现在也正在研究ofbiz。

相关推荐

    Apache OFBiz Datamodel 2

    Apache OFBiz Datamodel 2

    Apache OFBiz Datamodel 4

    ### Apache OFBiz Datamodel 4 知识点详解 #### 一、Apache OFBiz Datamodel 概述 Apache OFBiz 是一个开源的企业级电子商务框架,它提供了完整的业务流程管理、内容管理和电子交易处理功能。OFBiz Datamodel 作为...

    Apache OFBiz Datamodel 3

    ### Apache OFBiz Datamodel 3 #### 概述 Apache OFBiz Datamodel 3 是一个高级的数据模型系统,主要用于管理电子商务、供应链管理等业务场景下的数据流与数据结构。OFBiz 本身是一款开源的企业级应用框架及应用...

    Ofbiz 数据库全模型

    在Ofbiz中,数据库模型扮演着至关重要的角色,它是系统数据结构的基础,定义了所有业务实体及其相互关系。 数据库模型是Ofbiz的核心组成部分,它描述了系统中的各种实体(如产品、订单、客户等)以及它们之间的关系...

    ofbiz10.04表结构

    2. "ofbiz10.04表结构.pdm":PDM(Physical Data Model)通常是一个图形化的数据库模型表示,可能展示了OFBiz 10.04版本的表结构,包括各个表的物理布局、字段、主键和外键关系。这种可视化工具对理解数据库设计非常...

    ofbiz 数据模型 中文手册

    在OFBiz项目中,数据模型是其业务逻辑的基础,其中定义了大量的数据库表以及它们之间的关联和约束。本手册主要翻译了核心数据模型中的表结构和字段,以及提供了主键、外键、非空字段的说明。 核心数据模型涵盖了几...

    Ofbiz 入门教程

    在 Ofbiz 中,实体模型 (Entity Model) 是非常核心的概念之一,它定义了数据存储的结构。为了定义实体模型,我们需要创建一系列的 XML 文件。这些文件主要包括 `entitymodel_xxx.xml`、`ofbiz-component.xml` 和 `...

    ofbiz入门教程-初学者开发指南

    Ofbiz 会根据 entitymodel_study.xml 自动生成相应的SQL脚本并在数据库中创建表。 5. 实现增删改查操作:Ofbiz 提供了丰富的API,使得开发者可以轻松地进行数据操作。例如,创建新客户时,可以使用 EntityFactory....

    ofbiz一个完整例子

    在OFBiz中,你可以使用数据导入工具(Data Import Tool)来填充这些实体的数据。编写CSV文件,包含`countryCode`和`name`,然后通过OFBiz的管理界面导入这些数据,以创建实体实例。 3. 定义实体和系统标签 OFBiz...

    OFBiz Framework Quick Reference Book

    - **entitymodel.xml**:用于定义数据模型中的实体及其属性。 - **EntityGroup**:由一系列相关的实体组成的集合,在 **entitygroup*.xml** 文件中定义。 - **EntityECA**:用于定义实体事件的条件与动作,在 **...

    Data+Model+Resource+Book+Revised+Edition+Volumn1 代码

    《数据模型资源书修订版卷一》是电子商务领域的重要参考资料,尤其在Ofbiz官网中被推荐,这表明它在理解并构建数据驱动的电子商务系统中扮演着关键角色。本资源包含了一系列与数据库设计和管理相关的源代码,适用于...

    ofbiz重要的xml文件详解

    以下是一些OFBiz中关键的XML配置文件的详细解析: 1. **entityengine.xml**: 这个文件负责配置数据源,包括数据库连接池、事务管理和字段类型的定义。`&lt;delegator&gt;`元素定义了不同的数据操作代理,每个代理可以...

    ofbiz开源框架学习资料(附有小例子)

    在实体引擎中,OFBIZ采用了多种设计模式,如业务代理(Business Delegate)、值对象(Value Object)、复合实体(Composite Entity)、值对象组装器(Value Object Assembler)、服务定位器(Service Locator)和数据访问对象...

    ofibz目录结构

    - **entity**:实体引擎,负责数据模型的定义和管理,其模型定义通常在XML文件中,如`model-entity`目录下的文件。 - **service**:服务引擎,提供业务逻辑处理,通过XML配置文件定义服务接口和实现。 - **...

    OFBizDataModel.pdf

    本篇文章旨在探讨《Data Model Resource Book, Volume 1.pdf》中所述的数据模型在 OFBiz(Open for Business)框架中的具体应用。OFBiz 是一个开源的企业级应用框架,提供了丰富的功能来支持电子商务、供应链管理等...

Global site tag (gtag.js) - Google Analytics