相关概念
应用场景
- 将标签值映射为业务语义。如性别标签,存储层使用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 '动态码表构建数据';