本章重点介绍数据模型管理中关联类的应用。在DWF中,关联类(Relation Class)用于解决多对多关系的数据存储。关联类本质上也是一个实体类,不同之处在于,关联类描述两个实体类之间的关联关系,通过关联类的属性记录一个来源实体类(左类)和一个目的实体类(右类)之间的关系。本章通过电商平台上的订单到商品的关联类来说明关联类的定义和应用。
关联类的理解
举例:电商订单
电商平台上描述一个用户购买商品的清单称之为订单。所以电商平台上就有以下二个实体类:。
- 订单类:描述某人、何时、购买了什么商品;
- 商品类:描述商品信息:品牌、品名、商品编号、货号、尺码、商品价格等。
表-订单信息
由于不同订单中购买商品的种类和数量不同,订单类无法设定固定数量的商量类,因此购买商品数量不能记录在订单类上。同样道理,同一个商品会被很多客户购买,出现在很多不同客户的订单里,购买数量也不能记录在商品类上。为此建立订单类到商品类的联系,将购买数量记录在这个联系上。参见下图:
图-订单和商品数据结构
- 左类:主动关联其它实体的来源实体类称之为左类。如本例中的订单类为左类;
- 右类:被动关联的目的实体类称之为右类。如本例中的商品为右类;
- 关联类:描述左类与右类之间关系的实体类称之为关联类。如本例中订单到商品关联类;
- 关联类属性:用来描述左类和有类之间的具体关系。本例中属性“数量”就是用来记录购买数量。
使用方法:
- 创建关联类:设置关联类名称、指定左类的实体类、指定右类的实体类、属性等;
- 创建关联类实例:系统自动生成关联类实例的代码,选择左右类的实例,输入属性值。例如选择一个订单,选择该订单需要购买的商品,输入本次购买该商品的数量;
- 一对多关系:1个左类实例对应n个右类实例,生成n个同类关联类实例,例如同一个订单包含n种商品;
- 多对一关系:m个左类实例对应1个右类实例,生成m个同类关联类实例,例如同一个商品对应m个订单。
基本概念
(一)关联类
通过上述网购的例子可以看到,关联类是被常用到数据关系的描述,关联类用于解决多对多关系的数据存储,描述两个实体类之间的关联关系,记录了一个来源实体类(左类)和一个目的实体类(右类)所产生的关系。
在订单的例子中,订单类可作为来源实体类(左类),商品类可以作为目的实体类(右类)。
关联类支持了多对多的关系,在电商订单中,一个订单可关联多个商品,一个商品可关联多个订单,用关联类就可完整记录这种关系。
在DWF中可建立关联类,关联类主要属性见下表。
属性名 | 显示名 | 数据类型 | 长度 | 是否为空 | 备注 |
rightRev | 右对象迭代标识 | UUID | 32 | ||
leftClass | 左对象类 | String | 50 | 否 | 记录左类的类名 |
order | 序号 | Integer | 9 | ||
rightClass | 右对象类 | String | 50 | 否 | 记录右类的类名 |
leftOid | 左对象标识 | String | 32 | 否 | 记录左类绑定的对象oid |
rightOid | 右对象标识 | String | 32 | 否 | 记录右类绑定的对象oid |
(二)关联类对象
关联类对象和实体类不同,关联类对象除自身以外还包含左对象和右对象引用。
在电商购物例子中,订单类(左类)下的具体订单就是左对象,比如你网购的订单,商品类(右类)的具体商品就是右对象,比如你网购订单购买的商品。
(三)关联类属性
关联类对象也可以绑定属性,绑定方式同实体类。
很多情况下数量为关联类的属性,在订单例子中,用订单和商品关联类的关系属性—数量number来记录某订单所购买该商品的数量。
(四)关联类系统属性
关联类在创建时需要选择左类和右类,这些类只允许从已创建的实体类中选择。每创建一个关联类,系统自动会为其增加12个内置系统属性,其中4(5)个系统属性与左右实体类相关,且这些属性在创建关联对象时自动赋值。
关联类系统属性表
属性名 | 显示名 | 数据类型 | 长度 | 是否为空 | 备注 |
---|---|---|---|---|---|
creator | 创建人 | UUID | 32 | 关联类自身属性 | |
lastModifier | 最近更新人 | UUID | 32 | 关联类自身属性 | |
rightRev | 右对象迭代标识 | UUID | 32 | 预留属性 | |
leftClass | 左对象类 | String | 50 | 否 | 自动赋值 |
order | 序号 | Integer | 9 | 关联类自身属性,预留属性 | |
rightClass | 右对象类 | String | 50 | 否 | 自动赋值 |
leftOid | 左对象标识 | String | 32 | 否 | 自动赋值 |
rightOid | 右对象标识 | String | 32 | 否 | 自动赋值 |
lastModifyTime | 最近更新时间 | Date | 0 | 关联类自身属性 | |
version | 版本号 | Integer | 10 | 关联类自身属性,预留属性 | |
createTime | 创建时间 | Date | 0 | 关联类自身属性 | |
oid | 全局唯一标识 | UUID | 32 | 否 | 关联类自身属性 |
(五)工单-零件的关联类
在设备管理的案例中,我们需要在工单中记录维修需要用到零件(可能是若干种零件)及数量,为了完成这个功能,我们需要创建工单到零件的关联类,其中:
涉及到的实体类为:
- 工单WorkOrder:描述工单本身的信息,如:故障设备、故障部位、工单状态等。
- 零部件Part:描述零件的信息,如:零件名称、零件类别、零件规格、零件材料、零件描述等
工单到零件关联类
- 工单到零件(WorkOrderToPart):描述某个工单需要用到的维修零件及数量,在工单到零件这个关联类(WorkOrderToPart)中,左类是工单,右类是零件(工单中的零件是指该工单需要用到的维修的零件),数量是描述关联关系的属性,即某工单需要维修零件的数量。见下图:
图-工单-零件关联类
需要说明的问题
1)工单(WorkOrder)实体类中的故障部位(PartOid)是指发生故障的零件,是零件实体类中零件全局唯一标识partOid。
2)零件实体类的partoid,数据类型是UUID,128位二进制数,用于表示数据库表的主键。
3)此时零件的Partoid被应用到了工单实体类中。
基本功能
关联类中所涉及的来源实体类(左类)和目标实体类(右类)必须是已经存在的实体类,换言之:在创建关联类之前必须要先完成左类和右类实体类的创建,关联类管理的基本功能包括:
- 新建关联类:创建一个关联类。
- 删除关联类:删除关联类。
- 编辑关联类:编辑关联类,并进行关联类数据的绑定。
- 导出模板:导出关联类数据模板。
- 导入数据: 将关联类数据进行导入。
图-关联类管理
建模过程
(一)创建关联类
关联类创建过程:
- 1. 进入“数据模型”,选择“关联类管理”;
- 2. 点击“新建关联类”,弹出新建关联类的对话框,输入关联类的:英文名(WorkOrderToPart)、显示名(工单到零件);
- 3. 选择左类(工单WorkOrder);
- 4. 输入左类角色(工单);
- 5. 选择右类(零件Part);
- 6. 输入右类角色(零件);
- 7. 点击“确认”,即可完成关联类的创建。
图-新建关联类
(二)关联类属性绑定
与实体类属性绑定一样,关联类创建后也同样需要绑定关联类的属性,关联类的属性通常为数量,关联类属性绑定建模过程:
- 1. 进入“数据模型”,选择“关联类管理”,点击“编辑关联类”,弹出编辑关联类的对话框;
- 2.确认左类的角色,此处可以更改左类角色;
- 3.确认右类的角色,此处可以更改右类的角色;
- 4.选择“新增属性绑定”,定义属性,该关联类属性为“数量”;
- 5.点击“确认”,即可完成关联类属性(数量number)的绑定。
图-关联类属性绑定
关联类数据导入
对于关联类而言,导入数据的格式要求更严格一些。需要确保导入数据中含有正确的左右类名称和左右类全局唯一标识。类名与相应的实体类名称一致,全局唯一标识也与对应实体类中实例的全局唯一标识相同。
如果需要导入的属性太多,比如设备类,可以通过‘导出模板’按钮批量选择需要导入的属性,DWF会生成一份含有对应属性名称的.xlsx空表格,只需将数据粘贴或通过脚本批量写入到对应列即可。
小结
本章介绍了数据模型中关联类的应用背景和关联类的基本概念,关联类解决的是多对多的应用(某父对象也可关联多个子对象,某子对象可关联多个父对象)的关系,关联类的基本概念包括:
- 关联类
- 关联类对象(左对象,右对象)
其次,介绍了关联类管理的基本功能和基本操作和建模过程:
- 创建关联类,绑定属性
最后,结合设备管理介绍了工单到零件关联类的应用场景和数据模型。设备管理零件到零件的关联类应用将在第六章数据模型高级中介绍。