关联用户与多传感器测量的多CSV入库表结构设计
数据库表结构设计方案
1. 基础核心表
用户表 (users)
存储用户主体信息,作为所有测量数据的归属载体:
| 字段名 | 类型 | 说明 |
|---|---|---|
| user_id | INT(主键) | 用户唯一标识 |
| username | VARCHAR(50) | 用户名 |
| ... | ... | 其他用户属性字段(如注册邮箱) |
传感器表 (sensors)
预先定义3个传感器的基础信息,统一管理测量类型与传感器对应关系:
| 字段名 | 类型 | 说明 |
|---|---|---|
| sensor_id | INT(主键) | 传感器唯一标识 |
| sensor_type | VARCHAR(50) | 传感器对应的测量类型 |
| sensor_name | VARCHAR(50) | 传感器名称(如"温度传感器A") |
2. 测量任务关联表 (measurement_tasks)
记录单次测量的元数据,把同一次测量的3个传感器数据绑定为一个整体:
| 字段名 | 类型 | 说明 |
|---|---|---|
| task_id | INT(主键) | 测量任务唯一标识 |
| user_id | INT(外键) | 关联用户表user_id |
| start_time | DATETIME | 测量开始时间 |
| end_time | DATETIME | 测量结束时间(固定10分钟周期) |
| create_time | DATETIME | 任务数据入库时间 |
3. 测量数据表 (measurement_data)
存储所有传感器的原始测量数据,无需为每次测量新建表:
| 字段名 | 类型 | 说明 |
|---|---|---|
| data_id | INT(主键) | 单条测量数据唯一标识 |
| task_id | INT(外键) | 关联测量任务表task_id |
| sensor_id | INT(外键) | 关联传感器表sensor_id |
| timestamp | BIGINT | CSV中的测量时间戳 |
| column_b | DECIMAL(10,4) | CSV中Column B的测量值 |
| column_c | DECIMAL(10,4) | CSV中Column C的测量值 |
| ... | ... | 传感器其他测量字段(按需扩展) |
设计逻辑说明
- 数据关联逻辑:每次测量生成3个CSV后,先在
measurement_tasks新增一条记录获取task_id;再分别读取每个CSV的数据,给每条记录打上对应的task_id和sensor_id,批量插入measurement_data表。 - 查询逻辑:
- 要获取某用户某次测量的全量数据:通过
user_id找到对应task_id,再用task_id筛选measurement_data即可拿到该次3个传感器的所有数据。 - 要查看某传感器的历史数据:用
sensor_id+user_id组合筛选即可。
- 要获取某用户某次测量的全量数据:通过
- 可选优化:如果不同传感器的测量字段差异极大,可以拆分为多个传感器专属数据表(如
sensor_a_data、sensor_b_data),但每个表仍保留task_id和user_id用于关联,避免字段冗余。同时可给measurement_data建立(task_id, sensor_id)联合索引,提升查询效率。
内容的提问来源于stack exchange,提问作者J.Coe
相关产品推荐
相关产品推荐

