【电商DMP平台】码表方案

相关概念

应用场景

  • 将标签值映射为业务语义。如性别标签,存储层使用int表示,展示时,将其映射为男女。
  • 对标签值进行补充说明。如用户偏好商家标签,存储层存储商家id,展示时,补全商家名称、logo、等级等额外信息。

类型

  • 静态码表:码表值静态,可枚举。如性别只有男女。
  • 动态码表:码表值动态,不可枚举。如抖音达人(不可枚举),商品的行业分类(行业数量动态变化)。

架构图

生产链路数据流

生产链路

消费链路时序图

创建静态码表

创建码表(静态)时序图

创建动态码表

创建码表(动态)时序图

穷举查询(静态码表)

查询码表(静态)时序图

模糊查询(动态码表)

查询码表(动态)时序图

领域设计

public class Dict {
    private String _dictId;                 // 码表ID
    private String _name;                   // 码表名
    private String _describe;               // 码表描述
    private DictStruct _dictStruct;         // 码表结构
    private Set<DictData> _dictDatas;       // 码表值
    private StatusTypeEnum _statusType;     // 码表状态
    private DictTypeEnum _dictType;         // 码表类型
    private String _tenantId;               // 租户ID
    private String _createdUserId;
    private Date _createdAt;
    private String _updatedUserId;
    private Date _updatedAt;
    private Date _lastProducedAt;           // 上次生产时间
}

public class DictStruct {
    private Map<String, DictFieldDefinition> _keyFieldDefinitions; // 名称属性定义
    private DictFieldDefinition _valueFieldDefinition; // 值属性定义
}

public class DictData {
    private Map<String, DictField> _keyFields; // 名称属性
    private DictField _valueField;            // 值属性
    private String _description;              // 描述
}

public class DictField {
    private DictFieldDefinition _dictFieldDefinition; // 属性定义
    private String _value;                    // 属性值
}

public class DictFieldDefinition {
    private String _fieldName;                // 属性名
    private ValueTypeEnum _valueType;         // 属性值类型
}

库表结构

ER图

表结构

# 码表
## 码表元数据
CREATE TABLE `t_dict`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `dict_id` varchar(255) NOT NULL COMMENT '码表id',
  `dict_name` varchar(255) NOT NULL DEFAULT '' COMMENT '码表名',
  `detail` varchar(255) NOT NULL DEFAULT '' COMMENT '码表描述',
  `dict_struct` json NOT NULL COMMENT '码表结构',
  `status_type` tinyint NOT NULL COMMENT '码表状态',
  `dict_type` tinyint NOT NULL COMMENT '码表类型',
  `tenant_id` varchar(255) NOT NULL COMMENT '租户id',
  `create_user_id` varchar(255) NOT NULL COMMENT '创建人',
  `created_at` timestamp NOT NULL COMMENT '创建时间',
  `update_user_id` varchar(255) NOT NULL COMMENT '更新人',
  `updated_at` timestamp NOT NULL COMMENT '更新时间',
  `last_produced_at` timestamp NULL COMMENT '上次生产时间',
  PRIMARY KEY (`id`),
  UNIQUE `uniq_biz_index`(`dict_id`)
) COMMENT '码表元数据';

## 码值
CREATE TABLE `t_dict_data`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `dict_id` varchar(255) NOT NULL COMMENT '码表id',
  `view_name` varchar(255) NOT NULL COMMENT '码表特定列名',
  `view_value` varchar(255) NOT NULL COMMENT '码表特定列值 ',
  `code` varchar(255) NOT NULL COMMENT '码值',
  `code_type` tinyint NOT NULL COMMENT '码值类型',
  `detail` varchar(255) NOT NULL DEFAULT '' COMMENT '码值描述',
  PRIMARY KEY (`id`),
  INDEX `idx_biz_index`(`dict_id`)
) COMMENT '码值';

## 动态码表构建数据
CREATE TABLE `t_dict_biuld_info`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `dict_id` varchar(255) NOT NULL COMMENT '码表id',
  `source_db` varchar(255) NOT NULL COMMENT '源库名',
  `source_table` varchar(255) NOT NULL COMMENT '源表名',
  `task_id` bigint NOT NULL COMMENT 'dorado任务id',
  `dict_struct` json NOT NULL COMMENT '码表结构',
  PRIMARY KEY (`id`),
  UNIQUE `uniq_biz_index`(`dict_id`)
) COMMENT '动态码表构建数据';
上一篇
下一篇