MySQL通用数据字典采用“dict_type + dict_item”双表结构,统一管理各类业务枚举值;主表定义类型(type_code、type_name等),项表存储键值对(item_key/item_value),通过type_code关联,支持排序、启用控制与高效查询。

MySQL 中实现通用数据字典功能,核心是用一张“字典主表 + 字典项表”的结构替代大量硬编码或重复建表,兼顾灵活性、可维护性和查询效率。不推荐为每个业务字段单独建字典表(如 sex_dict、status_dict),而应统一抽象,避免碎片化。
字典主表(dict_type):定义字典分类
用于管理所有字典类型,如“用户状态”、“订单来源”、“性别”等,每条记录代表一类取值集合。
-
type_code:唯一标识,建议用小写英文+下划线(如
user_status、order_source),程序中直接引用,避免中文或空格 - type_name:显示名称,供后台管理页面展示(如“用户状态”)
- remark:可选说明,比如“0-禁用,1-启用,2-待审核”
- enabled:是否启用(tinyint(1)),便于动态开关某类字典
- sort_order:排序权重,用于前端下拉框顺序控制
字典项表(dict_item):存储具体键值对
存放每个字典类型下的实际选项,与主表通过外键关联。
PHP是一种功能强大的网络程序设计语言,而且易学易用,移植性和可扩展性也都非常优秀,本书将为读者详细介绍PHP编程。 全书分为预备篇、开始篇和加速篇三大部分,共9章。预备篇主要介绍一些学习PHP语言的预备知识以及PHP运行平台的架设;开始篇则较为详细地向读者介绍PKP语言的基本语法和常用函数,以及用PHP如何对MySQL数据库进行操作;加速篇则通过对典型实例的介绍来使读者全面掌握PHP。 本书
-
type_code:关联
dict_type.type_code,不建议用外键约束(避免删除主类时级联风险,业务层控制更稳妥) -
item_key:业务值,通常是数字或短字符串(如
1、active),对应数据库字段实际存的值 - item_value:显示文本(如“启用”、“活跃”),前端下拉、列表展示用
- is_default:是否默认项(tinyint(1)),方便初始化或兜底逻辑
- sort_order:该项在同类中的排序,比 type 级排序更细粒度
- enabled:该项是否可用(例如“已废弃”的状态项可设为 false,不影响历史数据)
常用查询与使用方式
业务代码中查字典,通常只需根据 type_code 和 item_key 获取文本;管理端则按 type_code 拉取全部有效项。
- 查单个值的显示名:
SELECT item_value FROM dict_item WHERE type_code = 'user_status' AND item_key = '1' AND enabled = 1 - 查某类全部可用项(带排序):
SELECT item_key, item_value FROM dict_item WHERE type_code = 'order_source' AND enabled = 1 ORDER BY sort_order, item_key - 连表查业务数据 + 字典文本(如查用户列表并显示状态中文):
SELECT u.id, u.name, d.item_value AS status_text
FROM user u
LEFT JOIN dict_item d ON u.status = d.item_key AND d.type_code = 'user_status' AND d.enabled = 1
增强实用性的小技巧
- 加唯一联合索引:
(type_code, item_key)防止重复录入;(type_code, enabled, sort_order)加速常用查询 - item_key 类型建议统一为
VARCHAR(50),兼容数字、字母、短编码(如WX、ALIPAY),避免 INT 限制扩展性 - 支持多语言?可在 dict_item 加
lang字段(如zh-CN、en-US),按需扩展,初期可不加 - 缓存建议:应用层对全量字典(按 type_code 分组)做本地缓存(如 Caffeine),更新时清对应 key,减少 DB 查询压力









