数据库与表关系
数据库来源
主初始化脚本:sql/yack-init.sql。
补充脚本:
sql/iot_device_deferred_command.sql
sql/iot_things_model_push.sql
yack-init.sql 中包含约 100+ 张核心表,并带有大量初始化数据。业务表普遍不使用数据库外键;关系主要由字段命名、联合主键、索引和业务代码保证。Quartz 表保留真实外键。
通用字段约定
| 字段 |
含义 |
tenant_id, tenant_name |
多租户归属,IoT/通知/可视化等表常见。 |
user_id, user_name |
用户归属或操作者。 |
create_by, create_time, update_by, update_time |
若依通用审计字段。 |
del_flag |
软删除标记,常见取值 0 正常、2 删除。 |
status |
业务状态,不同表含义不同,需结合枚举/字典。 |
serial_number |
设备唯一编号,是设备日志、Topic、指令和网关关系中的高频关联键。 |
核心业务 ER 概览
erDiagram
SYS_USER ||--o{ IOT_DEVICE_USER : owns
SYS_USER ||--o{ IOT_GROUP : creates
SYS_USER ||--o{ IOT_DEVICE_SHARE : shared_to
IOT_CATEGORY ||--o{ IOT_PRODUCT : classifies
IOT_PRODUCT ||--o{ IOT_DEVICE : has
IOT_PRODUCT ||--o{ IOT_THINGS_MODEL : defines
IOT_DEVICE ||--o{ IOT_THINGS_MODEL : overrides
IOT_DEVICE ||--o{ IOT_DEVICE_LOG : reports
IOT_DEVICE ||--o{ IOT_EVENT_LOG : emits
IOT_DEVICE ||--o{ IOT_FUNCTION_LOG : receives
IOT_PRODUCT ||--o{ IOT_FIRMWARE : owns
IOT_FIRMWARE ||--o{ IOT_FIRMWARE_TASK : upgrades
IOT_FIRMWARE_TASK ||--o{ IOT_FIRMWARE_TASK_DETAIL : tracks
IOT_SCENE ||--o{ IOT_SCENE_DEVICE : triggers
IOT_SCENE ||--o{ IOT_SCENE_SCRIPT : actions
IOT_SCRIPT ||--o{ IOT_SCRIPT_BRIDGE : uses
BRIDGE ||--o{ IOT_SCRIPT_BRIDGE : bound
上图是业务约定关系,不代表 SQL 外键。
产品、设备、物模型
| 表 |
主键 |
说明 |
关键关系 |
iot_category |
category_id |
产品分类,支持 parent_id 层级。 |
iot_product.category_id 关联分类。 |
iot_product |
product_id |
产品定义,包含分类、租户、协议、设备类型等。 |
一对多关联设备、物模型、固件、Modbus 配置。 |
iot_protocol |
id |
协议定义,protocol_code 唯一。 |
产品通过协议编码/配置选择编解码实现。 |
iot_device |
device_id |
设备注册表,serial_number 唯一。 |
关联产品、租户、用户、日志、网关、物模型覆盖。 |
iot_things_model |
model_id |
产品级/设备级物模型。 |
product_id 关联产品;device_id=0 通常表示产品级,device_id>0 表示设备级覆盖或计算物模型。 |
iot_things_model_template |
template_id |
物模型模板。 |
可用于产品物模型复用。 |
iot_device_template |
id |
产品和采集点模板关系。 |
product_id + template_id。 |
iot_things_model_translate |
id |
物模型翻译。 |
通过 product_id、标识符等业务字段关联。 |
iot_things_model_template_translate |
id |
物模型模板翻译。 |
通过模板标识业务关联。 |
关键约束/索引:
iot_device.serial_number 是唯一索引。
iot_product.category_id、iot_product.tenant_id 有普通索引。
iot_things_model.product_id、tenant_id、model_order 有普通索引。
iot_things_model 还有 idx_calculated_serial(is_calculated, serial_number),用于计算物模型按设备检索。
设备归属、共享和分组
| 表 |
主键 |
说明 |
关键关系 |
iot_device_user |
device_id, user_id |
设备与用户归属关系。 |
关联 iot_device 和 sys_user。 |
iot_device_share |
device_id, user_id |
设备共享关系和权限。 |
关联设备与被共享用户。 |
iot_device_group |
device_id, group_id |
设备加入分组。 |
关联 iot_device 和 iot_group。 |
iot_group |
group_id |
用户创建的设备分组。 |
user_id 关联 sys_user。 |
iot_device_alert_user |
device_id, user_id |
设备告警接收用户。 |
关联设备与告警接收用户。 |
order_control |
id |
指令权限控制。 |
user_id + device_id 限制控制权限。 |
command_preferences |
id |
指令偏好模板。 |
product_id 和 serial_number 关联设备/产品。 |
网关、子设备和 Modbus
| 表 |
主键 |
说明 |
关键关系 |
iot_sub_gateway |
id |
网关设备与子设备关系。 |
gw_device_id、sub_device_id 均约定关联 iot_device.device_id。 |
iot_product_sub_gateway |
id |
网关产品与子产品关系。 |
gw_product_id、sub_product_id 约定关联 iot_product.product_id。 |
iot_modbus_config |
id |
产品物模型的 Modbus 点位配置。 |
product_id 关联产品。 |
iot_modbus_params |
id |
产品级 Modbus 默认参数。 |
product_id 关联产品,slave_id 表示默认从机。 |
iot_modbus_job |
task_id |
设备轮询任务。 |
sub_device_id、job_id 是业务关联字段。 |
iot_product_modbus_job |
task_id |
产品轮询任务模板。 |
product_id 关联产品。 |
iot_var_temp |
template_id |
采集变量模板。 |
user_id 关联模板所属用户。 |
iot_var_temp_salve |
id |
模板下从机/点位配置。 |
device_temp_id 关联 iot_var_temp.template_id。 |
数据日志
| 表 |
主键 |
说明 |
关键关系 |
iot_device_log |
log_id |
设备属性/监测日志。 |
device_id、serial_number、tenant_id、user_id。 |
iot_event_log |
log_id |
设备事件日志。 |
关联设备、租户和用户。 |
iot_function_log |
id |
服务/指令下发日志。 |
serial_number、message_id、user_id。 |
iot_alert_log |
alert_log_id |
告警历史。 |
serial_number、product_id、user_id。 |
iot_simulate_log |
log_id |
模拟设备日志。 |
device_id、serial_number。 |
iot_device_air_log |
id |
Air780 上报记录。 |
product_id、device_id。 |
高频查询索引:
iot_device_log(serial_number, create_time)
iot_device_log(serial_number, is_monitor, create_time)
iot_alert_log(serial_number)
iot_alert_log(product_id)
iot_device_log(device_id)
规则、场景、桥接和告警
| 表 |
主键 |
说明 |
关键关系 |
iot_scene |
scene_id |
场景联动/LiteFlow 规则链。 |
user_id,recover_id 可指向恢复场景。 |
iot_scene_device |
scene_device_id |
场景触发设备/产品。 |
scene_id、product_id、serial_number、script_id。 |
iot_scene_script |
script_id |
场景动作/条件脚本。 |
scene_id、product_id、job_id、parent_id。 |
iot_script |
script_id |
规则引擎脚本组件。 |
scene_id、product_id、user_id。 |
bridge |
id |
数据桥接端点配置。 |
HTTP/MQTT/数据库桥接配置主体。 |
iot_script_bridge |
script_id, bridge_id |
脚本与桥接端点关系。 |
多对多关联 iot_script 和 bridge。 |
iot_alert |
alert_id |
告警定义。 |
租户维度定义告警。 |
iot_alert_scene |
alert_id, scene_id |
告警与场景关系。 |
多对多关联告警和场景。 |
iot_alert_notify_template |
alert_id, notify_template_id |
告警与通知模板关系。 |
多对多关联告警和通知模板。 |
iot_device_job |
job_id, job_name, job_group |
设备定时任务。 |
可关联设备、产品、场景、告警。 |
LiteFlow SQL 源直接读取:
iot_scene.chain_name
iot_scene.el_data
iot_scene.enable
iot_script.script_id
iot_script.script_data
iot_script.script_language
iot_script.enable
场景模型、SCADA 和可视化
| 表 |
主键 |
说明 |
关键关系 |
scene_model |
scene_model_id |
业务场景管理。 |
租户维度。 |
scene_model_device |
id |
场景关联设备/虚拟数据源。 |
scene_model_id、cus_device_id。 |
scene_model_data |
id |
场景数据源绑定。 |
scene_model_id、scene_model_device_id、datasource_id。 |
scene_model_tag |
id |
场景录入型变量/计算变量。 |
scene_model_id。 |
scene_tag_points |
id |
运算型变量点。 |
tag_id 关联变量,scene_model_data_id 关联数据源。 |
iot_goview_project |
id |
GoView 项目。 |
租户维度。 |
iot_goview_project_data |
id |
GoView 项目数据。 |
project_id 关联项目。 |
scada |
id |
组态页面。 |
租户维度。 |
scada_component |
id |
组态组件。 |
tenant_id、user_id。 |
scada_device_bind |
id |
组态组件设备绑定。 |
serial_number 关联设备。 |
scada_echart |
id |
图表管理。 |
租户维度。 |
scada_gallery |
id |
组态图库。 |
租户维度。 |
scada_model |
id |
三维模型配置。 |
租户维度。 |
固件和 OTA
| 表 |
主键 |
说明 |
关键关系 |
iot_firmware |
firmware_id |
产品固件版本。 |
product_id 关联产品,tenant_id 关联租户。 |
iot_firmware_task |
id |
固件升级任务。 |
firmware_id 关联固件。 |
iot_firmware_task_detail |
id |
任务下设备升级状态。 |
task_id 关联任务,serial_number 关联设备。 |
视频监控和媒体
| 表 |
主键 |
说明 |
关键关系 |
sip_config |
id |
SIP 系统配置。 |
可关联 product_id。 |
sip_device |
device_id |
GB28181 监控设备/NVR。 |
product_id,device_sip_id。 |
sip_device_channel |
id, device_sip_id |
摄像头通道。 |
device_sip_id 关联 SIP 设备编号,channel_sip_id 是通道编号。 |
media_server |
id |
ZLMediaKit 流媒体服务器配置。 |
server_id 是媒体服务标识。 |
iot_sip_relation |
id |
IoT 设备/场景与 SIP 通道关系。 |
channel_id、re_device_id、re_scene_model_id。 |
通知和推送
| 表 |
主键 |
说明 |
关键关系 |
notify_channel |
id |
通知渠道账号。 |
租户维度。 |
notify_template |
id |
通知模板。 |
channel_id 关联通知渠道。 |
notify_log |
id |
通知发送日志。 |
channel_id、notify_template_id。 |
iot_things_model_push_config |
id |
物模型数据推送配置。 |
device_id、template_id、user_id。 |
iot_push_model_item |
id |
推送配置下的物模型项和阈值。 |
config_id 关联推送配置,model_id 关联物模型。 |
iot_push_user |
id |
推送接收用户。 |
config_id 关联推送配置,user_id 关联系统用户。 |
系统 RBAC 和基础表
erDiagram
SYS_DEPT ||--o{ SYS_USER : contains
SYS_USER ||--o{ SYS_USER_ROLE : has
SYS_ROLE ||--o{ SYS_USER_ROLE : assigned
SYS_ROLE ||--o{ SYS_ROLE_MENU : grants
SYS_MENU ||--o{ SYS_ROLE_MENU : included
SYS_ROLE ||--o{ SYS_ROLE_DEPT : scopes
SYS_DEPT ||--o{ SYS_ROLE_DEPT : scoped
SYS_USER ||--o{ SYS_USER_POST : holds
SYS_POST ||--o{ SYS_USER_POST : assigned
| 表 |
主键 |
说明 |
sys_user |
user_id |
用户。 |
sys_dept |
dept_id |
部门/机构,parent_id 形成树。 |
sys_role |
role_id |
角色。 |
sys_menu |
menu_id |
菜单和权限,parent_id 形成树。 |
sys_post |
post_id |
岗位。 |
sys_user_role |
user_id, role_id |
用户角色关系。 |
sys_role_menu |
role_id, menu_id |
角色菜单权限。 |
sys_role_dept |
role_id, dept_id |
角色数据权限。 |
sys_user_post |
user_id, post_id |
用户岗位关系。 |
sys_config |
config_id |
系统参数。 |
sys_dict_type |
dict_id |
字典类型,dict_type 唯一。 |
sys_dict_data |
dict_code |
字典数据,通过 dict_type 关联字典类型。 |
sys_notice |
notice_id |
通知公告。 |
sys_oper_log |
oper_id |
操作日志。 |
sys_logininfor |
info_id |
登录日志。 |
sys_client |
id |
系统授权客户端。 |
sys_auth_user |
auth_id |
第三方授权用户。 |
sys_user_relation |
root_id |
用户关系和层级深度缓存。 |
翻译表:
sys_menu_translate
sys_dict_type_translate
sys_dict_data_translate
OAuth、第三方登录和内容
| 表 |
说明 |
oauth_client_details |
OAuth 客户端配置。 |
oauth_access_token, oauth_refresh_token, oauth_client_token, oauth_code, oauth_approvals |
Spring OAuth Token/授权数据。 |
iot_social_platform |
第三方登录平台配置。 |
iot_social_user |
第三方用户和系统用户绑定。 |
app_language |
App 语言配置。 |
app_preferences |
用户 App 偏好,user_id + language 唯一。 |
news, news_category |
新闻资讯和分类。 |
OSS、代码生成和任务
| 表 |
说明 |
oss_config |
对象存储配置。 |
oss_detail |
上传文件记录。 |
gen_table, gen_table_column |
代码生成器元数据。 |
sys_job, sys_job_log |
若依定时任务配置和日志。 |
Quartz 强约束关系
这些是 SQL 中真实存在的外键:
qrtz_triggers(sched_name, job_name, job_group)
-> qrtz_job_details(sched_name, job_name, job_group)
qrtz_blob_triggers(sched_name, trigger_name, trigger_group)
-> qrtz_triggers(sched_name, trigger_name, trigger_group)
qrtz_cron_triggers(sched_name, trigger_name, trigger_group)
-> qrtz_triggers(sched_name, trigger_name, trigger_group)
qrtz_simple_triggers(sched_name, trigger_name, trigger_group)
-> qrtz_triggers(sched_name, trigger_name, trigger_group)
qrtz_simprop_triggers(sched_name, trigger_name, trigger_group)
-> qrtz_triggers(sched_name, trigger_name, trigger_group)
其他 Quartz 表如 qrtz_calendars、qrtz_fired_triggers、qrtz_locks、qrtz_scheduler_state 由 Quartz 框架维护。
关系梳理原则
- 优先看 SQL 主键、联合主键、唯一索引和普通索引。
- 再看 Java Domain、Mapper XML、Service 查询条件。
- 对无外键的业务表,文档只标记为“业务约定关联”。
serial_number 是很多运行时链路的核心关联键,但真正的设备主键仍是 iot_device.device_id。
product_id、device_id、user_id、tenant_id 等字段在不同表中含义一致,但删除/更新一致性由业务代码维护。