Skip to content

数据模型概览

YunStack-IoT 的数据模型围绕 产品 → 设备 → 遥测数据 构建,并包含用户、角色、权限、固件等支撑实体。

1. 核心实体关系


2. 核心实体说明

Product(产品)

字段类型说明
idstring (PK)产品标识,如 p_relay_4ch
namestring产品名称
descriptionstring产品描述
imagestring?产品图片 URL,通过文件服务上传
thingModeljsonb物模型 JSON(属性/事件/服务定义,见 05.物模型设计规范
createdAttimestamp创建时间

Device(设备)

字段类型说明
iduuid (PK)逻辑 ID,平台分配
physicalIdstring物理 ID(WiFi MAC),设备认证标识
productIdstring (FK)所属产品
namestring设备名称
secretstring设备密钥(加密存储)
shadowjsonb设备影子权威数据(desired + reported + version + updatedAt)
roomIdint? (FK)所属房间(可选,为空时属于组织根目录)
firmwareVersionstring当前固件版本号
isOnlineboolean在线状态(从 Redis 同步,非实时字段)
createdAttimestamp注册时间
lastOnlineAttimestamp最近上线时间

影子存储说明: PostgreSQL 中的 shadow 字段为权威数据,用于 API 查询和审计。运行时另有一份 Redis Hash 热缓存用于 WebSocket 实时推送。两级存储的设计原因和同步策略详见 12.缓存策略 第 3 节。

User(用户)

字段类型说明
idint (PK)用户 ID
usernamestring用户名
passwordstringbcrypt 加密
nicknamestring昵称
statusint状态:1 启用,0 禁用
createdAttimestamp注册时间

Role(角色)

字段类型说明
idint (PK)角色 ID
namestring角色名称
codestring角色编码(如 adminuser
sortint排序号

RBAC 权限模型

User ←(多对多)→ Role ←(多对多)→ Permission。权限分为两类:

类型说明示例
菜单权限控制前端路由可见性system:user:listdevice:detail
接口权限控制后端 API 访问NestJS Guard 根据角色 code 判断

Firmware(固件版本)

字段类型说明
idstring (PK)固件版本 ID
productIdstring (FK)适用产品
versionstring语义化版本号(如 1.1.0
urlstringOSS 下载 URL
sizeint文件大小(字节)
md5stringMD5 校验值
changelogtext更新日志
uploadedAttimestamp上传时间

DeviceLog(设备日志)

字段类型说明
iduuid (PK)日志 ID
deviceIduuid (FK)关联设备
typeenum事件类型:onlineofflinereportcontrolota
contentjsonb日志内容

保留 180 天,用于审计追溯。

OtaTask(升级任务)

字段类型说明
idstring (PK)任务 ID
firmwareIdstring (FK)目标固件版本
deviceIduuid (FK)目标设备
statusenum状态:pendingnotifieddownloadinginstallingsuccessfailed
progressint下载进度 0-100
createdAttimestamp创建时间
completedAttimestamp完成时间

Organization(组织)

字段类型说明
iduuid (PK)组织 ID
namestring组织名称(如"家"、"工厂A")
descriptionstring?组织描述
ownerIdstring (FK)创建者
createdAttimestamp创建时间

一个用户可创建多个组织,一个组织下包含多个房间。

命名说明: 实体命名为 Organization 而非 Family,使其同时适用于家居(组织="家")和工业(组织="工厂")场景。前端页面名称可面向不同用户群体调整,但后端数据模型保持通用。

Room(房间)

字段类型说明
idint (PK)房间 ID
namestring房间名称(如"客厅"、"生产线1")
organizationIduuid (FK)所属组织
sortint排序号
createdAttimestamp创建时间

设备通过 roomId 归属到某个房间,未分配房间的设备属于组织根目录。


3. 双 ID 体系

每个设备同时拥有两个标识:

ID来源用途
physicalId(物理ID)WiFi MAC 地址MQTT 通信认证、固件标识
id(逻辑ID)平台分配 UUID业务层引用、API 操作

物理 ID 在设备注册时上报,平台返回逻辑 ID。后续所有 MQTT 通信和 API 调用均使用逻辑 ID,避免暴露设备物理地址。


4. 存储分层

数据类型存储说明
业务数据PostgreSQL产品、设备、用户、角色、固件版本等关系型数据
设备影子(权威)PostgreSQL (JSONB)设备期望状态与上报状态的完整 JSON,用于 API 查询和审计
设备影子(缓存)Redis (Hash)最近一次属性值的实时缓存,用于 WebSocket 推送,30 分钟 TTL
在线状态Redis (String)实时在线/离线标记,120 秒 TTL
指令状态Redis (String)待响应指令的追踪,30 秒 TTL
遥测数据InfluxDB设备上报的时序数据(温度、湿度、开关状态等)
设备日志PostgreSQL上下线、控制、OTA 事件日志,保留 180 天

影子两级存储的设计原因和同步策略详见 12.缓存策略


5. 数据保留策略

数据类型保留时长存储
遥测原始数据90 天InfluxDB
遥测 1 分钟聚合1 年InfluxDB(降采样)
遥测 1 小时聚合永久InfluxDB(降采样)
设备日志180 天PostgreSQL
设备影子历史30 天PostgreSQL
操作审计日志永久PostgreSQL

完整的 DDL 和 Prisma Schema 详见 数据库设计