元数据基础数据设计
解决问题:
1.基础数据公有化后,当需要新增业务,例如门店、商品模块,
这时后端无需开发,直接调用公共服务即可.
2.解决无限拓展的属性,比如商品的字段需要不停的添加,
每添加一次就要改代码和数据库,增加了很大的开发量.(mongo可直接扩展字段)
3.如果直接使用mysql的json字段来实现属性的无限拓展,
使用属性来做筛选,性能会非常的慢.
实现功能:
1.元数据
例如门店、商品、公司、区域模块等
2.元数据配置属性
元数据:商品
属性:价格、是否可订货、sku、spu、规格等
3.元数据关联元数据
元数据:商品、门店、公司
公司下有哪些门店,门店下有哪些商品等
4.元数据A关联的元数据B需要单独的属性
元数据:商品、单位
毫克单位是商品A的订货单位、和盘点单位
毫克单位是商品B的订货单位、和销售单位
5.值限制
元数据的属性值做限制,类似于最大最小值,是否允许拼音搜索等
元数据关系的属性值限制,类似于是否允许一对多,是否有属性.
6.用户关联元数据
用户的财务报表关联到了门店、商品等信息.
7.任务
通过任务的调度,来对数据做变更操作.
控制数据执行的生命周期
mysql
metadata_schema 元数据名字等基本信息
code 编号
name 名称
description 描述
ignore_state 忽略状态
allow_parent 允许父级
metadata_schema_attr 元数据的属性
code 编号
name 名称
schema_code
description
attr_type 字段类型
constraints 值限制 详情如下:
例如值: {"max": "50", "min": "1", "unique": true, "required": true, "allow_names": [], "allow_values": [], "pinyin_search": true}
max : 最大长度
min : 最小长度
unique : 唯一
required : 必填
allow_names : 可选名称
allow_names : 可选名称的值
pinyin_search : 是否允许拼音搜索
metadata_schema_relation 元数据的关联
code 编号
name 名称
description
sourece_schema_id 原始schema元数据id
target_schema_id 被关联目标schema元数据id
constraints 值限制 详情如下:
例如值: {"ignore_state": false ,"has_attr": false, "multiple": false}
ignore_state : 是否忽略状态管理
multiple : 是否是多连级,一对多
has_attr : 是否有属性,比如克单位是某个商品的订货单位.
metadata_schema_relation_attr 元数据关联里的属性
name
code
schema_relation_id 元数据的关联的id
description
attr_type 字段类型
constraints 值限制 详情如下:
和metadata_schema_attr表里的constraints字段一致
metadata_entity 元数据数据实体
code 数据code
schema_code 元数据code
state 状态 是否可用
content 内容 例如:{"code": "001", "name": "A店", "status": "enabled"}
content_pending 等待内容
process_status 同步状态 未同步、同步中、已同步、同步失败、同步异常等
form 属性的值 当查询不对里面的值做过滤时可以直接使用
metadata_relation 元数据关联数据实体
code 数据code
soure_schema_code 元数据code
target_schema_code 目标元数据code
soure_entity_code 实体 code
target_entity_code 目标实体code
state 状态 是否可用
content 内容 对应的一些属性的值{},其他的在目标实体有
content_pending 等待内容
process_status 同步状态 未同步、同步中、已同步、同步失败、同步异常等
form 属性的值 当查询不对里面的值做过滤时可以直接使用
user_relation 用户关联元数据(简化表)
user_code 用户code
relation_code 关联元数据实体的code
metadata_task 任务
schema_type 类型:元数据、实体
name
source_code 源code
target_code 目标code
content 内容 对应的一些属性的值{},其他的在目标实体有
content_pending 等待内容
process_status 同步状态 未同步、同步中、已同步、同步失败、同步异常等
start 开始时间
end 结束时间
action 操作 crud
retry 重试次数
message 最后的执行结果
metadata_task_log 任务执行的详情
task_id 任务id
action 操作 crud
start 开始时间
end 结束时间
action 操作 crud
message 最后的执行结果
mongo
entity库: 专门存放 元数据数据实体
表维度:按照一个元数据+租户 = 表
表名::store_200 门店表 租户为200的
字段为门店添加的所有属性
字段:code(用于所有关联)、name、address、tel、status
relation库: 专门存放 元数据数据实体
表维度:按照两个元数据+租户 = 表
元数据:门店、商品
表:store_product_200 门店商品关系表 租户为200的
字段为门店商品关系添加的所有属性
字段:source_entity_i(商品id)、target_entity_id(商品id),关系所添加的属性.....
一.元数据
例如门店、商品、公司、区域模块等
crud全都使用metadata_schema表来新建一个商品模块.
二.元数据配置属性
元数据:商品
属性:价格、是否可订货、sku、spu、规格等
rud:
1.使用:metadata_schema_attr表来新建商品模块的属性
2.使用mongo的entity库来创建一个product商品表
4.商品所有属性的rud操作直接使用product表即可.
c:
1.通过schema表里的code,就能在attr表里查出门店有哪些属性
2.通过attr里的code,在metadata_entity表里获取到实体的总code
3.使用entity表code,就能在mongo的entity库product表查出属性的值
三.元数据关联元数据
元数据:商品、门店、公司
公司下有哪些门店,门店下有哪些商品等
crud:借助上个步骤,获取到实体code,
直接操作metadata_relation表即可(通过soure_entity_code筛选)
四.元数据A关联的元数据B需要单独的属性
元数据:商品、单位
毫克单位是商品A的订货单位、和盘点单位
毫克单位是商品B的订货单位、和销售单位
crud:借助上个步骤,获取到metadata_relation表code,
直接操作mongo的relation库,把对应的属性添加进去即可
五.值限制
1.元数据的属性值做限制,类似于最大最小值,是否允许拼音搜索等
metadata_schema_attr表里获取constraints字段
2.元数据关系的属性值限制,类似于是否允许一对多,是否有属性.
metadata_schema_relation表里获取constraints字段
六.用户关联元数据
用户的财务报表关联到了门店、商品等信息.
简化user_relation表,只是大概描述下大致意思
需求报表,里面包含数量,商品,门店,金额,用户
实现:那么就需要创建一个report表
重要字段:user_code,store_code,product_code
store_code、product_code对应的是metadata_entity表里的code
七.任务
通过任务的调度,来对数据做变更操作.
控制数据执行的生命周期
使用metadata_task表来做任务调度和控制生命周期
使用metadata_task_log来记录每个步骤详细的过程和结果.