跳转至

数据字典

概述

本文档详细描述当前 GORM 自动迁移涉及的核心表结构、字段定义和索引信息。

以 internal/gormdb/models.go 及其仓储代码为最终事实来源;历史数据库可能还存在 已停用列,只有显式执行 -auto-migrate 才会按迁移策略清理这些遗留结构。

数据库类型:MySQL 5.7+ / MariaDB 10.3+

字符集:utf8mb4

排序规则:utf8mb4_unicode_ci


用户表 (users)

用户表存储所有注册用户的信息。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
name VARCHAR(255) NO - 用户名(唯一)
email VARCHAR(255) NO - 邮箱地址(唯一)
email_verified TINYINT(1) NO 0 邮箱是否已验证
callsign VARCHAR(32) YES NULL 业余电台呼号(唯一)
gird VARCHAR(255) YES - 网格定位(遗留字段)
phone VARCHAR(32) YES - 手机号
password VARCHAR(255) NO - 密码(bcrypt哈希)
birthday VARCHAR(32) YES - 生日
sex TINYINT NO 0 性别(0=未知, 1=男, 2=女)
avatar VARCHAR(512) YES - 头像URL
address VARCHAR(512) YES - 地址
roles VARCHAR(32) NO 'user' 角色(user/admin)
introduction TEXT YES - 个人简介
alarm_msg TINYINT(1) NO 0 是否接收告警消息
status TINYINT NO 1 账号状态
approval_status TINYINT NO 0 审核状态(0=待审核, 1=已通过, 2=已拒绝)
reviewer_id INT YES NULL 审核人ID
review_note TEXT YES - 审核备注
review_time DATETIME YES NULL 审核时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间(自动)
last_login_time DATETIME YES NULL 最后登录时间
login_err_times INT NO 0 登录错误次数
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间(自动)
openid VARCHAR(255) YES - 微信OpenID
nickname VARCHAR(255) YES - 昵称
pid VARCHAR(255) YES - PID标识
last_login_ip VARCHAR(64) YES - 最后登录IP
dmrid INT NO 0 DMR ID
mdcid VARCHAR(255) NO '' MDC ID
device_password VARCHAR(255) YES - 设备准入密码(AES可逆密文)

索引

索引名 类型 字段 说明
PRIMARY 主键 id 主键索引
uk_name 唯一 name 用户名唯一
uk_email 唯一 email 邮箱唯一
uk_callsign 唯一 callsign 呼号唯一
idx_phone 普通 phone 手机号索引
idx_openid 普通 openid 微信OpenID索引

外键关系

被以下表引用(级联删除): - devices.owner_id - group_members.user_id - operator_certs.user_id - logbooks.user_id - user_radio_presets.user_id - user_device_preferences.user_id


设备表 (devices)

设备表存储所有注册设备的信息。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
name VARCHAR(255) YES - 设备名称
dmrid BIGINT YES - DMR ID
ssid TINYINT UNSIGNED NO - 设备子号
owner_id INT NO - 所有者用户ID
qth VARCHAR(255) YES - 位置信息
last_online_ip VARCHAR(64) YES - 最近上线IP
dev_model INT NO 0 设备型号
group_id INT YES NULL 所属群组ID
status TINYINT NO 1 设备状态
is_certed TINYINT(1) NO 0 是否已认证
priority INT NO 100 优先级
disable_send TINYINT(1) NO 0 设备级禁发
disable_recv TINYINT(1) NO 0 设备级禁收
is_online TINYINT(1) NO 0 是否在线
online_time DATETIME YES - 上线时间
note TEXT YES - 备注
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间

索引

索引名 类型 字段 说明
PRIMARY 主键 id 主键索引
idx_owner_ssid 唯一 owner_id, ssid 用户下SSID唯一
idx_dmrid 普通 dmrid DMR ID索引
idx_group_id 普通 group_id 群组ID索引
idx_group_online 普通 group_id, is_online 群组在线设备索引

外键关系

  • owner_id → users.id (CASCADE)
  • group_id → public_groups.id (SET NULL)

设备型号枚举

值 说明
0 未知设备
1 ESP32 链路盒子(1W 射频版)
2 ESP32 链路盒子(无射频版)
100 微信小程序
101 Android 客户端
102 iOS 客户端
103 Windows 客户端
104 macOS 客户端
105 浏览器客户端
106 互联设备(历史)
107 ESP32 链路台/手咪(历史)
236 南山对讲软件桥接器
237 涛涛对讲软件桥接器
238 本视对讲(HT)软件桥接器
239 NRL2 系统软件桥接器

群组表 (public_groups)

群组表存储所有群组的信息。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
name VARCHAR(255) NO - 群组名称
type INT NO 0 类型(0=普通, 1=公开, 2=私有)
call_sign VARCHAR(255) YES - 旧库兼容列;应用已停用,执行 -auto-migrate 后删除
password VARCHAR(255) YES - 私有群组密码
ower_id INT YES - 所有者用户ID
master_server INT YES - 主服务器ID
slave_server INT YES - 从服务器ID
status INT NO 1 状态(1=启用)
is_virtual TINYINT(1) NO 0 是否为虚拟互联组
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间
note TEXT YES - 备注

旧库可能保留 allow_callsign_ssid 列。应用已停用并忽略该设备准入白名单; 显式执行 -auto-migrate 时,空历史列会被删除。若仍存在非空配置,迁移会中止并要求先人工确认清理,避免静默丢失数据。

索引

索引名 类型 字段 说明
PRIMARY 主键 id 主键索引
idx_ower_id 普通 ower_id 所有者索引

群组类型枚举

值 说明
0 普通群组
1 公开群组
2 私有群组

群组互联表存储虚拟互联组与目标群组的关联关系。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
link_group_id INT NO - 互联组ID
target_group_id INT NO - 目标群组ID
created_at DATETIME NO CURRENT_TIMESTAMP 创建时间
updated_at DATETIME NO CURRENT_TIMESTAMP 更新时间

索引

索引名 类型 字段 说明
PRIMARY 主键 id 主键索引
uk_link_target 唯一 link_group_id, target_group_id 互联关系唯一

外键关系

  • link_group_id → public_groups.id (CASCADE)
  • target_group_id → public_groups.id (CASCADE)

群组成员表 (group_members)

群组成员表存储用户与群组的关联关系。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
group_id INT NO - 群组ID
user_id INT NO - 用户ID
is_verified TINYINT(1) NO 0 是否已验证密码
join_time DATETIME YES - 加入时间
last_verify DATETIME YES - 最后验证时间
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间

索引

索引名 类型 字段 说明
PRIMARY 主键 id 主键索引
uk_group_user 唯一 group_id, user_id 群组用户唯一

外键关系

  • group_id → public_groups.id (CASCADE)
  • user_id → users.id (CASCADE)

通信记录表 (comm_records)

通信记录表存储语音和文本通信事实,同时作为频道消息历史的数据源。

字段定义

字段名 类型 可空 默认值 说明
id UINT NO AUTO_INCREMENT 主键
device_id UINT NO 0 发送设备ID(0=幽灵设备)
device_ssid TINYINT UNSIGNED NO 0 设备SSID
group_id UINT YES NULL 群组ID
user_id UINT YES NULL 用户ID
start_time DATETIME NO - 通信开始时间
end_time DATETIME YES - 通信结束时间
duration_ms INT NO 0 通信时长(毫秒)
audio_path VARCHAR(255) YES - MinIO音频文件路径
audio_size BIGINT NO 0 音频文件大小(字节)
status INT NO 0 状态(0=录制中, 1=待上传, 2=已完成, 3=上传失败)
message_type TINYINT UNSIGNED NO 0 消息类型(0=语音, 1=文本)
text_content TEXT YES - 文本消息内容
sender_username VARCHAR(255) YES - 发送时用户名快照
sender_callsign VARCHAR(32) YES - 发送时呼号快照
sender_nickname VARCHAR(255) YES - 发送时昵称快照
sender_dev_model INT NO 0 发送时设备型号快照
is_auto_broadcast TINYINT(1) NO 0 是否为系统自动播报;自动播报不生成通信录音副本
created_at DATETIME NO CURRENT_TIMESTAMP 创建时间

索引

索引名 类型 字段 说明
PRIMARY 主键 id 主键索引
idx_device_id 普通 device_id 设备ID索引
idx_group_id 普通 group_id 群组ID索引
idx_user_id 普通 user_id 用户ID索引
idx_comm_records_is_auto_broadcast 普通 is_auto_broadcast 自动播报记录筛选索引
idx_group_start 普通 group_id, start_time 群组时间索引
idx_user_start 普通 user_id, start_time 用户时间索引
idx_status 普通 status 状态索引
idx_comm_records_group_status_start_id 普通 group_id, status, start_time, id 无类型过滤的频道消息游标索引
idx_comm_records_group_status_type_start_id 普通 group_id, status, message_type, start_time, id 带类型过滤的频道消息游标索引
idx_comm_records_status_start_id 普通 status, start_time, id 管理员全局发信记录分页索引
idx_comm_records_user_status_start_id 普通 user_id, status, start_time, id 按发送用户筛选发信记录的分页索引

通信记录投递快照表 (comm_record_delivery_groups)

该表记录消息发送时实际投递到的群组。频道历史按该快照授权,不按当前虚拟互联拓扑回算。旧通信记录迁移时只补录仍存在的来源组;来源组已删除的孤儿通信记录继续保留,但不创建无效快照。

字段定义

字段名 类型 可空 默认值 说明
record_id UINT NO - 通信记录ID,删除记录时级联删除
group_id UINT NO - 发送时实际接收该消息的群组ID
start_time DATETIME(3) YES NULL 消息发送时间的不可变查询快照;迁移会从通信记录补齐
message_type TINYINT UNSIGNED YES NULL 消息类型的不可变查询快照;迁移会从通信记录补齐

索引

索引名 类型 字段 说明
PRIMARY 主键 record_id, group_id 防止同一记录重复写入相同投递群组
idx_delivery_group_record 普通 group_id, record_id 按频道查找投递记录
idx_delivery_group_cursor 普通 group_id, start_time, record_id 按频道和时间游标查询消息
idx_delivery_group_type_cursor 普通 group_id, message_type, start_time, record_id 按频道、消息类型和时间游标查询消息

自动播报音频表 (broadcast_audios)

实体组的原始音频和预处理播放文件元数据。记录软删除;对象文件在删除事务提交后清理。

字段名 类型 可空 默认值 说明
id UINT NO AUTO_INCREMENT 主键
group_id INT NO - 所属实体组,删除群组时级联清理
name VARCHAR(255) NO - 管理端显示名称
original_object_key VARCHAR(512) NO - 原始私有对象键
playback_object_key VARCHAR(512) YES NULL 已验证的协议播放对象键
record_object_key VARCHAR(512) YES NULL 完整播报日志共享的 Raw Opus 对象键
original_mime_type VARCHAR(100) YES NULL 原始文件 MIME
original_size / playback_size BIGINT NO 0 原始/播放文件大小
record_size BIGINT NO 0 共享 Raw Opus 文件大小
duration_ms / packet_count INT NO 0 已处理音频时长和 60ms Opus 包数
sha256 CHAR(64) NO - 原始文件 SHA-256
status VARCHAR(20) NO processing processing、ready、failed
error_message VARCHAR(500) YES NULL 转码或校验失败原因
created_by INT NO - 创建者审计引用;用户删除时转交给存活群组所有者
created_at / updated_at / deleted_at DATETIME - - 生命周期时间

索引:group_id、status、deleted_at、(group_id, sha256)。

删除素材时,若 record_object_key 仍被通信记录引用则延迟删除;最后一个日志引用释放后再回收对象。


自动播报计划表 (broadcast_schedules)

计划允许同一个音频在不同时间重复使用,也允许每个计划引用不同音频。计划软删除,执行 历史保留对其和音频的外键快照。

字段名 类型 可空 默认值 说明
id UINT NO AUTO_INCREMENT 主键
group_id / audio_id INT / UINT NO - 来源实体组与音频
name VARCHAR(255) NO - 计划名称
schedule_type VARCHAR(16) NO - once、daily、weekly、interval
timezone VARCHAR(64) NO - IANA 时区
scheduled_at DATETIME(3) YES NULL 一次计划的 UTC 时刻
local_time / weekday_mask CHAR(8) / TINYINT YES NULL 日/周计划本地时刻和星期掩码
interval_seconds INT UNSIGNED NO 0 间隔计划的周期秒数,取整分钟且范围为 60 秒到 30 天
interval_start_at DATETIME(3) YES NULL 间隔计划的计时 0 点(UTC)
blackout_start_time / blackout_end_time CHAR(8) YES NULL 按计划时区解释的可选禁播时段,支持跨午夜
next_run_at DATETIME(3) YES NULL 下一次未来执行时间
enabled TINYINT(1) NO 0 管理员启用状态
suspended_reason / suspended_by_virtual_group_id / suspended_at - YES NULL 活动虚拟组策略造成的运行态挂起信息
created_by / updated_by INT NO - 创建和最后编辑审计引用;用户删除时转交给存活群组所有者
created_at / updated_at / deleted_at DATETIME - - 生命周期时间

索引:audio_id、group_id、deleted_at、(enabled, next_run_at)。


虚拟组自动播报策略表 (virtual_group_broadcast_policies)

每个虚拟组一条持久化策略。虚拟组关闭时策略保留但不挂起成员计划。

字段名 类型 可空 默认值 说明
virtual_group_id INT NO - 主键,虚拟组删除时级联删除
mode VARCHAR(32) NO suspend_all suspend_all 或 allow_single_source
allowed_source_group_id INT YES NULL 唯一允许的成员实体组;其他来源删除时策略降为 suspend_all
updated_by INT NO - 最后编辑审计引用;用户删除时转交给虚拟组所有者
created_at / updated_at DATETIME NO - 创建与更新时刻

自动播报执行表 (broadcast_runs)

每个计划的每次理论时刻最多一条执行记录,独立保存跳过、取消、成功和故障原因。

字段名 类型 可空 默认值 说明
id UINT NO AUTO_INCREMENT 主键
schedule_id / audio_id / source_group_id UINT / UINT / INT NO - 计划、音频和来源组快照
scheduled_for DATETIME(3) NO - 本轮理论执行时刻;与 schedule_id 唯一
domain_key / domain_group_ids VARCHAR(255) / JSON YES NULL 话权域和发送时成员快照
status VARCHAR(48) NO - 执行、跳过、取消、失败或成功状态
last_voice_at DATETIME(3) YES NULL 静默门禁观察到的最近语音
started_at / ended_at DATETIME(3) YES NULL 实际播放起止
played_duration_ms / sent_packets / dropped_packets INT NO 0 进度和实时丢帧计数
claimed_by / lease_until VARCHAR(128) / DATETIME(3) YES NULL 分布式认领与租约信息
error_code / error_message VARCHAR(64) / VARCHAR(500) YES NULL 可审计的终止或跳过原因
created_at / updated_at DATETIME NO - 创建与更新时刻

索引:schedule_id、audio_id、source_group_id、lease_until、status,以及 唯一键 (schedule_id, scheduled_for)。


服务器表 (servers)

服务器表存储服务器管理信息。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
name VARCHAR(255) NO - 服务器名称
server_type INT NO 0 服务器类型
join_key VARCHAR(255) YES - 加入密钥
ip_addr VARCHAR(64) YES - IP地址
udp_port INT YES - UDP端口
ower_id INT YES - 所有者用户ID
is_online TINYINT(1) NO 0 是否在线
status INT NO 1 状态
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间
note TEXT YES - 备注
node_id VARCHAR(64) YES - 边缘节点内部唯一标识
display_name VARCHAR(255) NO - 管理后台显示昵称
public_access_id VARCHAR(64) YES - 对设备公开的稳定入口标识
public_access_enabled TINYINT(1) NO 0 是否加入设备可发现入口列表
public_udp_host VARCHAR(255) NO - 设备接入 UDP 主机
public_udp_port INT NO 0 设备接入 UDP 端口
public_region VARCHAR(100) NO - 公开地域标签
public_network VARCHAR(100) NO - 公开网络标签
public_priority INT NO 100 客户端选择时的展示优先级
node_token_hash CHAR(64) NO - 当前长期凭据 SHA-256,不保存明文
node_previous_token_hash CHAR(64) NO - 轮换宽限期内的旧凭据 SHA-256
node_previous_token_expires_at DATETIME YES - 旧凭据宽限截止时间
node_registration_token_hash CHAR(64) NO - 一次性注册凭据 SHA-256
node_registration_expires_at DATETIME YES - 注册凭据过期时间
node_registered_at DATETIME YES - 首次注册完成时间
node_credential_epoch INT UNSIGNED NO 0 凭据变更世代
node_instance_id VARCHAR(128) NO - 当前边缘进程实例标识
node_remote_addr VARCHAR(255) NO - 最近控制连接地址
node_control_session_id BIGINT UNSIGNED NO 0 当前控制会话标识
node_projection_version BIGINT UNSIGNED NO 0 中心已发布的节点投影版本
node_acked_projection_version BIGINT UNSIGNED NO 0 边缘已确认的投影版本
node_last_seen_at DATETIME YES - 最近心跳时间
node_connection_count INT NO 0 最近上报的设备连接数
node_device_in_packets BIGINT UNSIGNED NO 0 设备侧入站累计包数
node_device_in_bytes BIGINT UNSIGNED NO 0 设备侧入站累计字节数
node_device_out_packets BIGINT UNSIGNED NO 0 设备侧出站累计包数
node_device_out_bytes BIGINT UNSIGNED NO 0 设备侧出站累计字节数
node_interconnect_in_packets BIGINT UNSIGNED NO 0 互联侧入站累计包数
node_interconnect_in_bytes BIGINT UNSIGNED NO 0 互联侧入站累计字节数
node_interconnect_out_packets BIGINT UNSIGNED NO 0 互联侧出站累计包数
node_interconnect_out_bytes BIGINT UNSIGNED NO 0 互联侧出站累计字节数
node_metrics_sampled_at DATETIME YES - 最近指标采样时间

中继台表 (relay)

中继台表存储中继台信息。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
name VARCHAR(255) NO - 中继台名称
up_freq VARCHAR(32) YES - 上行频率
down_freq VARCHAR(32) YES - 下行频率
send_ctss VARCHAR(32) YES - 发射亚音
recive_ctss VARCHAR(32) YES - 接收亚音
ower_callsign VARCHAR(32) YES - 所有者呼号
location VARCHAR(255) YES - 位置
latitude DOUBLE YES - 纬度
longitude DOUBLE YES - 经度
status INT NO 1 状态
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间
note TEXT YES - 备注

操作日志表 (operator_log)

操作日志表记录系统操作日志。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
timestamp DATETIME NO CURRENT_TIMESTAMP 时间戳
content TEXT NO - 日志内容
event_type VARCHAR(64) NO - 事件类型
operator VARCHAR(255) YES - 操作者
operator_id INT YES - 操作者ID
ip_address VARCHAR(64) YES - 操作或节点认证请求的来源 IP

索引

索引名 类型 字段 说明
PRIMARY 主键 id 主键索引
idx_event_type 普通 event_type 事件类型索引
idx_operator_id 普通 operator_id 操作者索引

操作证表 (operator_certs)

操作证表存储用户提交的操作证信息。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
user_id INT NO - 用户ID
callsign VARCHAR(32) NO - 申请呼号
file_name VARCHAR(255) YES - 文件名
minio_path VARCHAR(512) YES - MinIO路径
status INT NO 0 状态(0=待审, 1=通过, 2=拒绝)
reviewer_id INT YES NULL 审核人ID
review_note TEXT YES - 审核备注
review_time DATETIME YES NULL 审核时间
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间

外键关系

  • user_id → users.id (CASCADE)
  • reviewer_id → users.id (SET NULL)

站点配置表 (site_configs)

站点配置表存储系统配置项。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
config_key VARCHAR(255) NO - 配置键(唯一)
config_value TEXT YES - 配置值
category VARCHAR(64) NO - 分类(icp/system/aprs/smtp)
description VARCHAR(512) YES - 描述

索引

索引名 类型 字段 说明
PRIMARY 主键 id 主键索引
uk_config_key 唯一 config_key 配置键唯一
idx_category 普通 category 分类索引

配置分类

分类 说明 示例键
icp ICP备案 icp_number
system 系统信息 site_name, site_logo, site_favicon
aprs APRS配置 aprs_enabled, aprs_server, aprs_port
smtp 邮件配置 smtp_host, smtp_port, smtp_password
registration 注册配置 require_email_verification
comm 通信设置 comm_record_enabled, comm_record_days

资源文件表 (assets)

资源文件表存储资源中心的文件和文件夹。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
parent_id INT YES NULL 父文件夹ID
name VARCHAR(255) NO - 名称
type VARCHAR(32) NO - 类型(folder/file)
path VARCHAR(512) YES - MinIO路径
size BIGINT NO 0 文件大小
mime_type VARCHAR(128) YES - MIME类型
remark TEXT YES - 备注
sort_order INT NO 0 排序顺序
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间

外键关系

  • parent_id → assets.id (CASCADE)

设备配置表 (device_configs)

设备配置表存储设备的TLV配置数据。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
device_id INT NO - 设备ID
config_key VARCHAR(64) NO - 配置键
config_value VARCHAR(255) NO - 配置值
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间

外键关系

  • device_id → devices.id (CASCADE)

配置键说明

键 说明 示例值
rx_freq 接收频率(Hz) 439500000
tx_freq 发射频率(Hz) 431500000
rx_ctcss 接收亚音(Hz) 88.5
tx_ctcss 发射亚音(Hz) 88.5
sql_level 静噪等级(0-8) 5
power_level 功率等级 3
tx_bandwidth 发射带宽 2
rx_tone_mode 接收亚音类型 CTCSS
rx_tone_value 接收亚音值 88.5
tx_tone_mode 发射亚音类型 CTCSS
tx_tone_value 发射亚音值 88.5
rf_guard_enabled 射频保护开关 1
rf_guard_single_tx_limit_s 单次发射上限(秒) 30
rf_guard_window_s 统计窗口(秒) 300
rf_guard_max_tx_in_window_s 窗口内累计发射上限(秒) 60

通联日志表 (logbooks)

通联日志表存储业余无线电QSO记录。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
user_id INT NO - 用户ID
my_callsign VARCHAR(32) NO - 我方呼号
time_utc DATETIME NO - UTC时间
tx_frequency VARCHAR(32) YES - 发射频率
rx_frequency VARCHAR(32) YES - 接收频率
cq_zone INT YES - CQ分区
itu_zone INT YES - ITU分区
mode VARCHAR(32) YES - 通信模式
callsign VARCHAR(32) NO - 对方呼号
their_rst VARCHAR(16) YES - 对方信号报告
my_rst VARCHAR(16) YES - 我方信号报告
their_power VARCHAR(16) YES - 对方功率
my_power VARCHAR(16) YES - 我方功率
their_qth VARCHAR(255) YES - 对方QTH
my_qth VARCHAR(255) YES - 我方QTH
their_radio VARCHAR(128) YES - 对方电台
my_radio VARCHAR(128) YES - 我方电台
their_antenna VARCHAR(128) YES - 对方天线
my_antenna VARCHAR(128) YES - 我方天线
notes TEXT YES - 备注
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间

外键关系

  • user_id → users.id (CASCADE)

电台预设表 (user_radio_presets)

电台预设表存储用户常用的电台配置。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
user_id INT NO - 用户ID
name VARCHAR(128) NO - 预设名称
radio VARCHAR(128) YES - 电台型号
antenna VARCHAR(128) YES - 天线型号
power VARCHAR(32) YES - 功率
qth VARCHAR(255) YES - QTH
sort_order INT NO 0 排序顺序
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间

外键关系

  • user_id → users.id (CASCADE)

设备偏好表 (user_device_preferences)

设备偏好表存储用户的设备偏好设置。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
user_id INT NO - 用户ID
dev_model INT NO - 偏好类型:0=新普通设备默认群组,101-105=客户端平台
last_group_id INT YES - 上次使用的群组ID
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间

外键关系

  • user_id → users.id (CASCADE)

幽灵客户端偏好表 (ghost_client_preferences)

按用户、平台和安装实例保存幽灵客户端最后一次单发/多收路由。该表只保存偏好, 不表示实例当前在线;在线状态和临时 session_id 只存在于运行时注册表。

字段定义

字段名 类型 可空 默认值 说明
id BIGINT UNSIGNED NO AUTO_INCREMENT 主键
user_id INT NO - 所属用户 ID
dev_model TINYINT UNSIGNED NO - 幽灵客户端平台型号(101-105)
client_instance_id CHAR(36) NO - 安装范围持久化的随机 UUID
tx_group_id INT YES NULL 最后一次发送频道;群组删除时置空
created_at DATETIME NO CURRENT_TIMESTAMP 创建时间
updated_at DATETIME NO CURRENT_TIMESTAMP 更新时间

索引与关系

索引名 类型 字段 说明
uk_ghost_client_instance 唯一 user_id, dev_model, client_instance_id 每个安装实例一条偏好
idx_ghost_client_preferences_user_id 普通 user_id 用户偏好查询
idx_ghost_client_preferences_tx_group_id 普通 tx_group_id 发送频道引用
  • user_id → users.id (CASCADE)
  • tx_group_id → public_groups.id (SET NULL)

幽灵客户端订阅表 (ghost_client_subscriptions)

把每个安装实例的接收频道拆成独立行,避免使用逗号分隔字段,并允许群组权限 撤销时精确删除订阅。

字段定义

字段名 类型 可空 默认值 说明
id BIGINT UNSIGNED NO AUTO_INCREMENT 主键
preference_id BIGINT UNSIGNED NO - 幽灵客户端偏好 ID
group_id INT NO - 接收频道 ID
created_at DATETIME NO CURRENT_TIMESTAMP 创建时间

索引与关系

索引名 类型 字段 说明
uk_ghost_client_subscription 唯一 preference_id, group_id 同一安装实例不重复订阅频道
idx_ghost_client_subscriptions_preference_id 普通 preference_id 偏好订阅查询
idx_ghost_client_subscriptions_group_id 普通 group_id 按频道撤销/清理
  • preference_id → ghost_client_preferences.id (CASCADE)
  • group_id → public_groups.id (CASCADE)

固件发布表 (firmware_releases)

固件发布表存储设备固件版本信息。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
dev_model INT NO - 设备型号
version VARCHAR(32) NO - 版本号(semver)
changelog TEXT YES - 更新日志
file_name VARCHAR(255) NO - 文件名
minio_path VARCHAR(512) NO - MinIO路径
file_size BIGINT NO 0 文件大小
file_hash VARCHAR(128) NO - SHA-256哈希
is_latest TINYINT(1) NO 0 是否最新版本
created_by INT YES - 上传者ID
created_at DATETIME NO CURRENT_TIMESTAMP 创建时间

客户端资源表 (client_resources)

客户端资源表保存安装包、模型、字库和词典等资源的稳定身份。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
resource_key VARCHAR(191) NO - 客户端使用的稳定资源键(唯一)
name VARCHAR(255) NO - 后台显示名称
category VARCHAR(64) YES - application/model/font/dictionary/data 等分类
description MEDIUMTEXT YES - 资源说明
required TINYINT(1) NO 0 客户端缺失时是否视为必需资源
enabled TINYINT(1) NO - 是否允许进入 manifest 和下载流程
created_by INT YES - 创建管理员 ID
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间

索引

索引名 类型 字段 说明
PRIMARY 主键 id 主键索引
uk_client_resource_key 唯一 resource_key 稳定资源键唯一
idx_client_resource_enabled 普通 enabled manifest 启用状态筛选

客户端资源版本表 (client_resource_releases)

客户端资源版本表保存不可变版本身份、生命周期和客户端/服务端兼容契约。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
resource_id INT NO - 所属客户端资源 ID
version VARCHAR(64) NO - 不带 v 前缀的 SemVer 2.0.0
channel VARCHAR(32) NO stable stable/beta 发布频道
title VARCHAR(255) YES - 版本标题
changelog MEDIUMTEXT YES - 更新日志
status VARCHAR(32) NO draft draft/published/withdrawn
force_update TINYINT(1) NO 0 是否要求客户端强制更新
min_client_version VARCHAR(64) YES - 最低客户端 SemVer
min_server_version VARCHAR(64) YES - 最低服务端 SemVer
required_protocol_version SMALLINT UNSIGNED NO 0 所需幽灵 Session 协议版本,0 表示未声明
required_capabilities JSON YES NULL 排序去重后的所需服务端能力数组;未声明时必须为 NULL
published_at DATETIME YES NULL 发布时间
created_by INT YES - 创建管理员 ID
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
update_time DATETIME NO CURRENT_TIMESTAMP 更新时间

索引与关系

索引名 类型 字段 说明
PRIMARY 主键 id 主键索引
uk_client_resource_release 唯一 resource_id, channel, version 同一资源和频道版本唯一
idx_client_resource_release_lookup 普通 resource_id, channel, version, status 管理和 manifest 候选查询
  • resource_id → client_resources.id (RESTRICT)

客户端资源文件表 (client_resource_artifacts)

客户端资源文件表保存已完成校验的不可变对象或受控应用商店地址。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
release_id INT NO - 所属资源版本 ID
format VARCHAR(64) NO - apk/onnx/font 等文件格式
runtime VARCHAR(64) NO default 运行时选择维度
variant VARCHAR(64) NO default 变体选择维度
build_number VARCHAR(64) YES - 可选客户端构建号
file_name VARCHAR(255) NO - 下载展示文件名
storage_key VARCHAR(512) YES - 私有对象存储不可变 key
external_url VARCHAR(1024) YES - 受控应用商店 HTTPS 地址
file_size BIGINT NO 0 文件字节数
sha256 CHAR(64) YES - 内容 SHA-256
content_signature TEXT YES - 可选长期内容签名
signature_algorithm VARCHAR(64) YES - 内容签名算法
metadata JSON YES - 资源类型自定义元数据
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
  • release_id → client_resource_releases.id (CASCADE)

客户端资源目标表 (client_resource_artifact_targets)

目标表显式绑定 artifact 的平台和架构,不使用 universal 通配。

字段定义

字段名 类型 可空 默认值 说明
id INT NO AUTO_INCREMENT 主键
artifact_id INT NO - 所属 artifact ID
platform VARCHAR(32) NO - android/windows/macos/ios/linux 等平台
arch VARCHAR(32) NO - arm64/x86_64/armv7 等架构
min_os_version VARCHAR(64) YES - 最低系统 SemVer
min_android_api INT YES 0 Android 最低 API 级别,0 表示未声明
create_time DATETIME NO CURRENT_TIMESTAMP 创建时间
索引名 类型 字段 说明
uk_client_resource_artifact_target 唯一 artifact_id, platform, arch 同一文件目标唯一
idx_client_resource_target_lookup 普通 artifact_id, platform, arch manifest 目标筛选
  • artifact_id → client_resource_artifacts.id (CASCADE)

ER 关系图

ER关系图