类型定义,用于描述现实世界的对象的分类,如空间、新风机等
信息点定义,用于描述类型的属性
对象数据(六大对象),即类型定义的实例,表示现实世界中的一个具体的物体,比如一个具体的房间,一个具体的空调
图类型,用于描述对象之间的关系的分类
边类型,对图类型的补充说明
关系数据,描述具体的关系,比如某个空调位于某个空间
平台字典,系统内置的一组类型定义和信息点定义数据,与集团和项目无关
集团变更,基于集团对平台字典的扩充和自定义,比如新增类型、新增信息点、修改信息点,集团变更需要审核,审核通过后才会生效,同时对其他集团不可见
集团字典,是平台字典和通过审核的集团变更的数据的并集
集团方案,根据业态不同,从集团字典中筛选(订阅)特定的类型和信息点形成方案,从而过滤掉实际业务中不关注的类型和信息点,集团方案是集团字典的子集,集团所拥有的项目必须应用一个且仅有一个集团方案
项目变更,基于项目对平台字典的扩充和自定义,比如新增信息点、修改信息点,同样需要审核,审核通过后才会生效,同时对其他项目不可见
项目字典,集团方案和项目变更的并集
应用订阅,根据应用关注点不同,从项目字典中筛选(订阅)特定的类型和信息点,从而过滤掉应用不关注的类型和信息点,每个应用对每个项目都需要进行订阅配置
站在用户或数据字典使用方的角度来看数据字典有三层:平台级字典,集团级字典,项目级字典
类型相同或信息点相同时(编码相同)项目级字典优先级最高,集团级次之,平台级字典最低,优先级高的会覆盖优先级低的
使用数据字典时明确"使用的字典位于哪个层级"对需求的分析和理解会有很大帮助
集团级数据、集团方案、项目级数据是数据字典内部逻辑概念,项目实际使用过程中应该不会用到这些概念
应用和服务应该关注的是项目级字典和应用订阅内容
对集团变更和项目变更的数据应该定时进行汇总分析,暂定线下人工处理
默认每个类型都有id、name、localId、localName、objType、classCode、projectId,无需订阅,也不能取消订阅
字段 | 说明 | 备注 |
---|---|---|
class | 类型 | |
funcid | 信息点 | |
classCode | 类型定义的code: class.code | |
className | 类型定义的name: class.name | |
infoCode | 信息点定义的code: funcid.code | |
infoName | 信息点定义的name: funcid.name | |
groupCode | 集团编码 | |
projectId | 项目ID | |
schemeId | 集团方案ID | |
graph | 图类型 | |
graphId | 关系数据字段,图实例id | |
rel | 关系数据字段,边类型 | |
类型 class
字段 | 数据类型 | 说明 |
---|---|---|
code | String | 全局唯一 |
name | String | 类型名称 |
aliasCode | String | 类型别名编码, 集团下唯一 |
aliasName | String | 类型别名名称 |
type | String | 类别:平台级common,集团级group,项目级project |
groupId | String | 集团id, type=group或type=project时该字段为集团id,否则为"0" |
projectId | String | 集团id, type=project时该字段为项目id,否则为"0" |
majorCode | String | 专业编码, 上级类型是系统or设备时该字段有值 |
systemCode | String | 系统编码,上级类型是设备时该字段有值,值为系统类型的code |
parentCode | String | 上级类型code |
信息点 funcid
字段 | 数据类型 | 说明 |
---|---|---|
code | String | 信息点编码,同类型下唯一 |
name | String | 信息点名称 |
classCode | String | 类型编码 |
type | String | 字典级别:平台级common,集团级group,项目级project |
category | String | 信息点分类:静态,脉冲,阶段,时序 |
groupId | String | 集团id, type=group或type=project时该字段为集团id,否则为"0" |
projectId | String | 集团id, type=project时该字段为项目id,否则为"0" |
firstTag | String | 一级标签 |
secondTag | String | 二级标签 |
priority | String | 优先级 |
inputMode | String | 输入方式 |
unit | String | 单位 |
dataType | String | 数据类型 |
isMultiple | Boolean | 是否复数 |
isRegion | Boolean | 是否区间 |
formater | String | 数据格式 |
dataSource | String / Object[] | 数据源取值范围/枚举值清单等,根据dataType有不同的内容 |
note | String | 备注 |
subFlag | String | 子分类标记:是否可以按此信息点进行子分类替换,同一类型下目前只支持一个子分类信息点 |
对象 object
字段 | 数据类型 | 说明 |
---|---|---|
id | String | id,全局唯一 |
projectId | String | 项目id,不可为空 |
classCode | String | 类型code,不可为空 |
其他信息点编码 | 根据信息点定义 | |
关系 relation
字段 | 数据类型 | 说明 |
---|---|---|
graphId | String | 图实例id |
rel | String | 边类型 |
from | String | 对象id |
to | String | 对象id |
infos | Object | 关系附加信息 |
数据类型 | 类型名称 | 信息点分类 | 是否复数 | 是否区间 | 数据源 | 格式 |
---|---|---|---|---|---|---|
INTEGER | 整数 | 静态/脉冲/时序/阶段 | true/false | true/false | {$gt:10, $lt:50} | 无 |
DOUBLE | 浮点型 | 静态/脉冲/时序/阶段 | true/false | true/false | {$gte:10.1, $lt:50.9} | 无 |
BOOLEAN | 布尔值 | 静态/脉冲/时序/阶段 | true/false | false | 无 | |
STRING | 字符串 | 静态/脉冲/时序/阶段 | true/false | false | (字符串长度区间){$gt:10, $lt:50} | 无 |
DATETIME | 日期时间 | 静态/脉冲/时序/阶段 | true/false | true/false | {'$gt':'0915', '$lt':'1031'} | 'MMdd' |
ENUM | 单选枚举 | 静态/脉冲/时序/阶段 | true/false | false | 应用数据标准化中定义的数据类型 | 无 |
MENUM | 多选枚举 | 静态/脉冲/时序/阶段 | true/false | false | 应用数据标准化中定义的数据类型 | 无 |
ATTACHMENT | 附件 | 静态 | true/false | false | ||
OBJECT | 对象 | 静态 | true/false | false | 对象id |
说明
把原来的data_type拆解成多个属性,减少了data_type种类数量
使用新的数据类型时,使用新的数据类型时,创建或编辑信息点需要明确指出数据类型、动静分类、是否复数、是否区间、长度(可选)、取值区间(可选)、格式(可选)
Tree、Topology、Route、Function四种类型不再支持(有需求再加回来)
动静分类(静态 STATIC、脉冲 PULSE、时序 SEQUENTIAL、阶段 GRADATION)应该是信息点的一个分类,不是数据类型的属性,放在这里是为了更直观更容易理解
根据动静分类区分动态量或静态量,静态量的值存储的是具体的数据,动态量的值存储的是表号-功能号,动态量包括脉冲量、时序量和阶段量
根据是否区间来判断存储的值是具体值还是区间, 比如INTEGER非区间的值12, 区间值[8, 15],为了区分开闭区间,这里实际存储为{$gt: 12, $lte: 15}, 其中$gt大于,$lt小于,$gte大于等于,$lte小于等于
根据是否复数区分存储的值是单个值还是多个值,单个值存储形式为xxx,多个值存储形式为[xxx, yyy],如果同时是复数和区间,存储的是多个区间
取值区间可以约束值的取值范围,可以通过取值区间做一次校验,如果是区间值,区间也应该是在取值区间的内部
统一用DATETIME表示日期和时间,通过格式设定具体存储的内容,格式由数据字典进行维护,物理世界存储的数据严格符合格式
格式是数据存储的数据格式或文件格式,对于日期时间附件对象等可进行校验
单选枚举Enum单数存储为GC, 复数存储为[GC, JK]
多选枚举MEnum单数存储为[GC, JK], 复数存储为[[GC], [GC,JK]], 多选枚举单数和单选枚举复数的存储形式一样应该不会出现问题,因为实际使用时是和类型(Enum,Menum)一起使用,