# MySQL 设计说明 本文档说明交付版 MobileModels 的 MySQL 数据组织方式、兼容层设计与推荐查询方式。 ## 设计目标 - 所有设备标识都能落到 MySQL 查询 - 支持第三方直接查库,保证查询速度 - 保留兼容旧结构的访问方式 - 页面侧和 SQL 接入侧统一使用同一份设备数据 ## 主表 主推物理表: ```sql mobilemodels.mm_device_catalog ``` 主表整合了设备型号、品牌、厂商、来源、别名归一化结果和兼容字段,适合作为统一查询入口。 ### 关键字段 - `model` - `record_id` - `alias_norm` - `device_name` - `brand` - `manufacturer_brand` - `parent_brand` - `market_brand` - `device_type` - `source_file` - `section` - `source_rank` - `source_weight` - `code` - `code_alias` - `ver_name` ## 推荐查询方式 ### 1. 第三方直接查主表 推荐按 `alias_norm` 等值查询: ```sql SELECT model, record_id, alias_norm, device_name, brand, manufacturer_brand, parent_brand, market_brand, device_type, source_file, section, source_rank, source_weight, code, code_alias, ver_name FROM mobilemodels.mm_device_catalog WHERE alias_norm = ? ORDER BY source_rank ASC, record_id ASC LIMIT 20; ``` ### 2. 页面 SQL 查询 页面的 `SQL 查询` tab 也是基于这张主表。 查询流程: 1. 接收客户端原始上报值 2. 服务端归一化为 `alias_norm` 3. 按主表等值查询 4. 返回结果列表、执行 SQL 和 JSON 输出 ## 兼容视图 为了兼容旧系统,当前仍保留以下视图: ```sql mobilemodels.mm_device_lookup mobilemodels.mm_device_record mobilemodels.models python_services_test.models ``` 其中旧结构 `python_services_test.models` 主要用于兼容既有查询逻辑,不再作为主推接入方式。 ## 兼容旧结构查询示例 ```sql SELECT model, dtype, brand, brand_title, code, code_alias, model_name, ver_name FROM python_services_test.models WHERE model = ? LIMIT 20; ``` ## 归一化规则 `alias_norm` 统一按以下规则生成: - 全部转小写 - 仅保留 `[0-9a-z中文]` - 去掉空格、横线、下划线和其他标点 示例: ```text SM-G9980 -> smg9980 iPhone14,2 -> iphone142 NOH-AL00 -> nohal00 ``` ## 数据来源 主表和索引数据均由以下流程生成: 1. 同步上游原始 markdown 数据 2. 解析 `workspace/brands/*.md` 3. 构建 `dist/device_index.json` 4. 导出 `dist/mobilemodels_mysql_seed.sql` 5. 加载 MySQL schema 与 seed ## 交付建议 - 第三方新接入优先使用 `mm_device_catalog` - 页面联调和数据库联调使用同一套原始数据与归一化规则 - 生产环境务必替换默认数据库密码