2.7 KiB
2.7 KiB
MySQL 设计说明
本文档说明交付版 MobileModels 的 MySQL 数据组织方式、兼容层设计与推荐查询方式。
设计目标
- 所有设备标识都能落到 MySQL 查询
- 支持第三方直接查库,保证查询速度
- 保留兼容旧结构的访问方式
- 页面侧和 SQL 接入侧统一使用同一份设备数据
主表
主推物理表:
mobilemodels.mm_device_catalog
主表整合了设备型号、品牌、厂商、来源、别名归一化结果和兼容字段,适合作为统一查询入口。
关键字段
modelrecord_idalias_normdevice_namebrandmanufacturer_brandparent_brandmarket_branddevice_typesource_filesectionsource_ranksource_weightcodecode_aliasver_name
推荐查询方式
1. 第三方直接查主表
推荐按 alias_norm 等值查询:
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 也是基于这张主表。
查询流程:
- 接收客户端原始上报值
- 服务端归一化为
alias_norm - 按主表等值查询
- 返回结果列表、执行 SQL 和 JSON 输出
兼容视图
为了兼容旧系统,当前仍保留以下视图:
mobilemodels.mm_device_lookup
mobilemodels.mm_device_record
mobilemodels.models
python_services_test.models
其中旧结构 python_services_test.models 主要用于兼容既有查询逻辑,不再作为主推接入方式。
兼容旧结构查询示例
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中文] - 去掉空格、横线、下划线和其他标点
示例:
SM-G9980 -> smg9980
iPhone14,2 -> iphone142
NOH-AL00 -> nohal00
数据来源
主表和索引数据均由以下流程生成:
- 同步上游原始 markdown 数据
- 解析
workspace/brands/*.md - 构建
dist/device_index.json - 导出
dist/mobilemodels_mysql_seed.sql - 加载 MySQL schema 与 seed
交付建议
- 第三方新接入优先使用
mm_device_catalog - 页面联调和数据库联调使用同一套原始数据与归一化规则
- 生产环境务必替换默认数据库密码