Phase 1 #18: PostgreSQL + TDengine 完整 DDL 建表脚本

- 15+张核心表: sys_*(部门/用户/角色/菜单/日志/字典/通知/文件)
- iot_*: 设备模型/设备实例/设备影子/设备事件/站点(PostGIS空间坐标)
- rev_*: 用水户/水价阶梯/水表档案/水表操作日志/抄表/账单/缴费/报装
- production: alert_rule(报警规则)/alert_event(报警事件)/dispatch_command(调度)/duty(值班)/patrol(巡检)/water_quality(水质)
- TDengine: iot_telemetry超级表(6类设备子表)+事件表+小时聚合
- 种子数据: admin管理员/5个角色/6个片区/基础字典
This commit is contained in:
bot_pm
2026-06-14 13:15:38 +08:00
parent e929f65948
commit f337ebedfd
6 changed files with 811 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
-- =============================================
-- 智慧水务管理系统 - TDengine 建表脚本
-- 用于物联网设备遥测数据存储
-- =============================================
-- 创建数据库
CREATE DATABASE IF NOT EXISTS water_iot
KEEP 365
DURATION 30
BUFFER 256
PAGES 256
PAGESIZE 4
WAL_LEVEL 1;
USE water_iot;
-- 遥测数据超级表
CREATE STABLE IF NOT EXISTS iot_telemetry (
ts TIMESTAMP,
device_sn NCHAR(100),
metric_key NCHAR(50),
metric_value DOUBLE,
quality TINYINT
) TAGS (
device_type NCHAR(30),
area NCHAR(50),
station NCHAR(100)
);
-- 按设备类型创建子表(模板,实际运行时动态创建)
CREATE TABLE IF NOT EXISTS telemetry_flow_meter USING iot_telemetry TAGS('flow_meter', 'default', 'default');
CREATE TABLE IF NOT EXISTS telemetry_pressure USING iot_telemetry TAGS('pressure_sensor', 'default', 'default');
CREATE TABLE IF NOT EXISTS telemetry_valve USING iot_telemetry TAGS('valve', 'default', 'default');
CREATE TABLE IF NOT EXISTS telemetry_water_quality USING iot_telemetry TAGS('water_quality', 'default', 'default');
CREATE TABLE IF NOT EXISTS telemetry_level USING iot_telemetry TAGS('level_sensor', 'default', 'default');
CREATE TABLE IF NOT EXISTS telemetry_pump USING iot_telemetry TAGS('pump', 'default', 'default');
-- 设备事件超级表
CREATE STABLE IF NOT EXISTS iot_device_event (
ts TIMESTAMP,
device_sn NCHAR(100),
event_type NCHAR(30),
event_data NCHAR(2000)
) TAGS (
device_type NCHAR(30),
area NCHAR(50)
);
-- 小时聚合超级表(自动聚合)
CREATE STABLE IF NOT EXISTS iot_telemetry_hourly (
ts TIMESTAMP,
device_sn NCHAR(100),
metric_key NCHAR(50),
min_value DOUBLE,
max_value DOUBLE,
avg_value DOUBLE,
count_value INT
) TAGS (
device_type NCHAR(30),
area NCHAR(50)
);
-- 日聚合视图(示例)
-- CREATE STREAM IF NOT EXISTS hourly_stream INTO iot_telemetry_hourly AS
-- SELECT _wstart as ts, device_sn, metric_key,
-- MIN(metric_value), MAX(metric_value), AVG(metric_value), COUNT(*)
-- FROM iot_telemetry
-- INTERVAL(1h);