做电机驱动、逆变电源或者电池管理系统的硬件选型,大概率都有一种共同经历:需求文档里写着“额定电流 10A 以内,精度尽量高”,面前却是电流传感器型号数据库导出的几百行参数表。同一行表格里量程写法五花八门,有的是“0~5A”,有的是“±10A”,后面还跟着“300mV/A”“±0.5%”这些关键信息。早年间我习惯把型号维护在 Excel 里,靠筛选器一列一列看,数据量到两千多行以后,筛选开始卡,更麻烦的是“量程”和“排序基准”这些概念在不同人维护的表格里各有各的理解,经常出现同一款传感器两个人查询出不同结果的情况。
后来我把这套数据搬进数据库表,做成了一个“型号查询+排序输出到网页”的小系统。本文就把这套方法完整盘一遍:从字段怎么拆、建表要注意什么,到 SQL 怎么写才算符合选型逻辑,再到后端如何把查询结果安全送回网页、前端怎么实现点击表头切换排序。这套流程不挑具体语言的数据库,MySQL、PostgreSQL 或者达梦这类国产库都能按相同思路实现,非常适合做内部选型工具、替代料查找页面或者物料管理的型号列表模块。
1. 为什么要单独做一个网页查询,而不是继续用 Excel 或数据库客户端
1.1 “你会排序,不代表同事也会排序”的协作问题
只给自己一个人用的话,Excel 和数据库客户端确实都够用。Excel 筛选器点几下能出结果,数据库桌面客户端更是连 SQL 都能直接跑,功能强大得很。问题出在这是“团队工具”的场景:硬件工程师、采购工程师、质量工程师、甚至刚入职的实习生都需要查型号,不可能指望每个人都懂怎么写 SQL、维护筛选条件。
网页查询最核心的价值,是把“怎么查、怎么排序”这件事固定下来。用户在界面上输入目标电流下限和上限,选择“按精度升序”还是“按最大量程降序”,看到的永远是同一套标准化的执行逻辑。哪怕有人填了奇怪的输入,后端也要按既定规则过滤、排序、分页,不会出现“A 同事用字符串排序把 10A 排到 2A 前面,B 同事用数值排序结果不同”这种低级分歧。
1.2 网页层天然能解决权限和可见范围控制
在用桌面数据库工具直接连生产库的时候,最大的隐患是权限边界不好控制。库里存了型号参数、参考单价、供应商渠道、样品状态这些字段,选型工具只需要给用户看其中一部分。如果把整个数据库暴露给业务端,相当于把“技术选型需要用到的公开参数”和“内部成本信息”摆在了同一个平面上。
而网页后端作为中间层,可以强制指定返回哪些字段,隐藏成本字段不参与输出,甚至对不同的 URL 路径提供不同的查看范围。这样既有数据库的查询能力,又可以主动控制数据可见性,比让所有人都拿到数据库账号要稳妥得多。做内部工具时我一般就开一个只读账号,后端服务持有它,用户只跟网页对话,不直接跟数据库对话。
1.3 围绕“选型动作”设计页面,而不是围绕“数据表”设计页面
Excel 和数据表客户端里的数据是把全部字段平平地躺着放出来的,用户需要自己识别哪些列是真实的排序字段。但网页工具可以做得更贴合选型动作:用户脑子里想的是“我这边母线电流最大 5A,需要精度 1% 以内的开环霍尔”,页面就应该是两个输入框加一个排序下拉框,点击后直接给出拓扑匹配的型号。这种“需求参数驱动”的模式,比任何一张原始数据表都更适合日常选型。
所以这个系统不只是在做「数据库查询和排序输出」,它本质上是在搭建一个更友好的“选型决策入口”,而底层数据库、SQL 排序、分页技术所解决的问题,是保证这个入口在任何数据量下都能又快又准地返回结果。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 给电流传感器建表,最关键的几个字段设计决策
2.1 “量程列”必须拆开存数值,不要用“0~5A”这种字符串做筛选
我从第一版表结构里踩过的最大的坑,就是把量程原样存成字符串。当时图方便,range_text 字段写的是“0~5A”“±10A”,前端展示倒是简单,但一写 SQL 就发现没法做范围查询。想找“能测量 8A 的型号”,字符串里面根本没法可靠比较大小,除非写正则或者字符串截取,先在 MySQL 里做数据清洗再转换,性能差、写法绕,还没法用索引。
正确做法是拆成两个数值字段:current_min_A 和 current_max_A。为什么要拆成两个,而不是只存一个“额定电流”?因为传感器的量程可能不对称,比如常见的“0~5A”单极性传感器,最小是 0 最大是 5;而“±10A”那种双极性传感器,最小是 -10 最大是 10。查询的时候需要判断用户目标电流是否落在量程覆盖区间内,就必须同时保留最大值和最小值。
建表参考如下,我以 MySQL 为例,但字段思想对所有关系型数据库通用:
sql复制CREATE TABLE sensor_catalog (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
model_code VARCHAR(64) NOT NULL COMMENT '型号',
manufacturer VARCHAR(64) NULL COMMENT '厂商',
current_min_A DECIMAL(8,4) NULL COMMENT '最小可测电流(A)',
current_max_A DECIMAL(8,4) NULL COMMENT '最大可测电流(A)',
accuracy_pct DECIMAL(6,3) NULL COMMENT '精度百分比',
output_type VARCHAR(32) NULL COMMENT '输出类型',
output_sensitivity_mV_A DECIMAL(10,2) NULL COMMENT '灵敏度(mV/A)',
supply_voltage_min_V DECIMAL(5,2) NULL,
supply_voltage_max_V DECIMAL(5,2) NULL,
isolation_voltage_kV DECIMAL(6,3) NULL COMMENT '隔离耐压(kV)',
package_type VARCHAR(64) NULL COMMENT '封装形式',
temp_min_C
