
提取表结构元数据并生成可读描述
第一步自然是获取表结构的“原始档案”。使用 MySQL 客户端连接目标数据库,执行SHOW CREATE TABLE your_table_name; 命令,将完整的建表语句复制出来。注意,不能只看字段名列表——字段类型、默认值、注释(COMMENT)、是否允许 NULL、主键或唯一约束等上下文信息一个都不能少。缺少这些信息,模型将无法判断 tinyint(1) 是布尔标志还是状态码,也无法区分 varchar(20) 与 varchar(255) 是否属于同一语义层级。
将建表语句保存到纯文本文件中,例如 table_schema.txt,务必使用 UTF-8 编码。这一步不可省略——如果直接丢入截图或 PDF,模型很可能识别出错。
构造提示词让 Qwen 识别字段语义冲突
拿到建表语句后,将其喂给模型。这里有两种典型操作方式。 **方法一:本地部署直接对话。** 使用 Qwen2.5-7B-Instruct 或更高版本(32B 效果更优),在本地部署完成后启动对话界面。输入以下提示词(换行和缩进最好原样保留): 你是一名资深数据库架构师。请严格基于以下 MySQL 表结构定义,逐字段分析是否存在语义冗余、类型冗余或命名冲突。要求:① 只输出 JSON 格式;② 字段对必须同时满足「类型兼容」「业务含义高度重叠」「无明确分工说明」才判定为冗余;③ 对每组冗余字段,给出合并建议(保留哪个、为何保留);④ 不要臆测业务逻辑,仅依据字段名、类型、注释、约束推断。结构如下:{"redundant_pairs": [{"field_a": "xxx", "field_b": "yyy", "reason": "xxx", "suggestion": "xxx"}], "non_redundant_notes": ["xxx"]} 提示词输入完毕后,将
table_schema.txt 全文粘贴在下面,中间空一行。模型会自动解析字段注释中的中文描述,例如 COMMENT '用户注册手机号' 与 COMMENT '用户绑定手机号' 可能被识别为同一实体。
这里有一个**关键前提**:表结构中必须包含 COMMENT 注释。如果缺乏注释,模型仅依靠字段名(例如 mobile 和 phone)很容易误判——这两个词在中文中常被混用,但如果注释分别写着“用户主联系方式”和“紧急联系人电话”,则显然不是冗余。
用 Python 脚本批量喂入多张表
如果只有一两张表,手动操作已足够。但如果需要一次性处理几十上百张表,则必须借助脚本。 第一步:编写脚本,从 information_schema.columns 中拉取指定库的所有字段信息。SQL 大致如下:SELECT table_name, column_name, data_type, is_nullable, column_default, column_comment, column_key FROM information_schema.columns WHERE table_schema = 'your_db_name' ORDER BY table_name, ordinal_position;
第二步:将查询结果转换为结构化的字典,按表名分组,为每张表生成一段带格式的自然语言描述。例如:“表 orders 包含字段:order_id(bigint,主键)、user_id(bigint,非空)、status(varchar(20),注释:订单当前状态)、order_status(varchar(20),注释:订单生命周期阶段)……”
第三步:对每张表调用 Qwen2.5-32B-Instruct 的 API 接口,传入上述生成的描述文本,同时将 temperature 设为 0.1 以保持输出稳定性。模型返回 JSON 后,用 Python 解析 redundant_pairs 字段,并直接写入 CSV 报告。
操作上十分简便,只需将文件拖入即可。但有一个小提醒:最好不要一次性提交超过 5 张表的描述。虽然 Qwen2.5-32B 支持 128K 上下文,但过多字段描述堆叠容易触发 token 截断,导致漏判。
人工复核与落地合并
模型输出的冗余对列表已经拿到,但工作并未结束。真正的重头戏在于以下四个步骤。 ① 先查阅 Git 历史,确认两个字段是否由不同 PR 在不同时间添加;② 检查应用代码,看看是否有服务仍在读写被标记为冗余的字段;③ 如果确认字段确实冗余,执行ALTER TABLE … DROP COLUMN 之前,务必先在测试环境中使用 pt-table-sync 工具校验数据一致性;④ 合并后,更新所有相关文档、ORM 映射、API 响应 Schema,并在字段注释中添加一句“已合并至 xxx 字段”。
模型不会告诉你某个字段正被一个凌晨运行的报表任务读取——这一步必须人工验证。跳过该步骤直接删除字段,线上服务将立刻报错,后果严重。