工业物联网设备数据采集与监控系统 | 数据库课程设计项目
本项目是一个生产级别的工业物联网监控系统,严格按照数据库课程要求设计,展示了完整的数据库设计能力和现代 Go 后端开发实践。
- ✅ 完整的数据库设计: 13张表 + 2视图 + 1触发器 + 1存储过程
- ✅ 现代后端架构: Go (Gin + GORM) 分层设计
- ✅ 复杂查询展示: 多表联查、模糊搜索、聚合统计、存储过程调用
- ✅ 大数据量支持: 10,000+ 条时序数据记录
- ✅ Web 可视化: Bootstrap 5 + ECharts 数据展示
- ✅ 配置管理: Viper + YAML 配置文件
| 类别 | 技术 | 版本 |
|---|---|---|
| 语言 | Go | 1.21+ |
| Web框架 | Gin | v1.9.1 |
| ORM | GORM | v2 |
| 数据库 | MySQL | 8.0+ |
| 配置 | Viper | v1.18.2 |
| 前端 | Bootstrap + ECharts | 5.3 + 5.4 |
industrial-iot-go/
├── cmd/
│ ├── server/main.go # 主服务器入口
│ └── seeder/main.go # 数据生成器(10,000+条记录)
├── internal/
│ ├── model/ # GORM 数据模型 (8个文件)
│ │ ├── user.go
│ │ ├── role.go
│ │ ├── device.go
│ │ ├── realtime_data.go
│ │ ├── alert.go
│ │ ├── maintenance.go
│ │ ├── warehouse.go
│ │ └── types.go # 类型别名
│ ├── dao/ # 数据访问层 (4个文件)
│ │ ├── user_dao.go
│ │ ├── device_dao.go
│ │ ├── realtime_dao.go
│ │ └── statistics_dao.go # 统计查询
│ ├── service/ # 业务逻辑层 (2个文件)
│ │ ├── device_service.go
│ │ └── statistics_service.go
│ ├── controller/ # 控制器层
│ │ └── controller.go
│ └── dto/ # 数据传输对象
│ └── response.go
├── router/
│ └── router.go # Gin 路由配置
├── pkg/
│ ├── config/
│ │ └── config.go # Viper 配置加载
│ └── utils/
│ └── database.go # 数据库连接工具
├── web/
│ └── index.html # 前端单页应用
├── scripts/
│ └── init.sql # 数据库初始化脚本
├── config.yaml # 配置文件
├── API_TESTING.md # API 测试指南
├── DEPLOYMENT.md # 完整部署指南
├── go.mod
└── README.md
| 表名 | 说明 | 关系类型 |
|---|---|---|
users |
用户表 | - |
roles |
角色表 | - |
user_roles |
用户角色关联 | N:M |
device_types |
设备类型 | - |
workshops |
车间 | - |
devices |
设备 | 1:N (关联类型/车间) |
metrics |
指标定义 | - |
realtime_data |
实时数据(核心大表) | 1:N (关联设备/指标) |
alert_rules |
报警规则 | 1:N (关联指标) |
alert_logs |
报警日志 | 1:N (关联设备/规则) |
maintenance_orders |
维修工单 | 1:N (关联设备/用户) |
warehouses |
仓库 | - |
materials |
物料 | 1:N (关联仓库) |
v_device_status: 设备状态联合视图(设备+类型+车间)v_alert_summary: 报警汇总视图(报警+设备+规则+处理人)
trg_check_alert: 实时数据插入时自动检测阈值,超阈值自动生成报警记录
sp_daily_statistics(date, device_id): 按日期和设备统计所有指标的平均值、最大值、最小值
- ✅ 外键约束: 所有关联表均定义
FOREIGN KEY - ✅ 级联操作:
ON DELETE CASCADE/ON DELETE RESTRICT/ON DELETE SET NULL - ✅ 索引优化: 复合索引、唯一索引、状态索引
- Go 1.21+
- MySQL 8.0+
- Git
# 登录 MySQL
mysql -u root -p
# 执行初始化脚本
source scripts/init.sql编辑 config.yaml:
database:
host: localhost
port: 3306
user: root
password: your_password # 修改为实际密码
dbname: iiot_monitor
charset: utf8mb4
server:
port: 8080
mode: debug# 安装依赖
go mod tidy
# 运行数据生成器
go run cmd/seeder/main.go生成数据:
- 5 个车间
- 10 个设备类型
- 50 个设备
- 10,000+ 条实时数据(过去7天)
- 若干报警日志(基于超阈值数据)
go run cmd/server/main.go服务将在 http://localhost:8080 启动。
前端界面: http://localhost:8080
API 接口:
- Dashboard:
GET /api/v1/devices/dashboard - Search:
GET /api/v1/devices/search?q=keyword - Statistics:
GET /api/v1/stats/type-distribution - Daily Check:
POST /api/v1/maintenance/daily-check
详细 API 文档见: API_TESTING.md
API: GET /api/v1/devices/dashboard
SQL 能力:
- 3表 INNER JOIN:
devices⋈device_types⋈workshops - 相关子查询获取最新数据
- CASE 语句状态转换
SELECT d.id, d.device_name, dt.type_name, w.name,
(SELECT rd.value FROM realtime_data rd WHERE rd.device_id = d.id ...) AS latest_temp
FROM devices d
INNER JOIN device_types dt ON d.device_type_id = dt.id
INNER JOIN workshops w ON d.workshop_id = w.idAPI: GET /api/v1/devices/search?q=keyword
SQL 能力:
- LIKE 模糊匹配
- 跨多个字段和表的 OR 查询
- 参数化查询防注入
WHERE d.device_name LIKE '%keyword%'
OR d.device_code LIKE '%keyword%'
OR w.name LIKE '%keyword%'
OR w.location LIKE '%keyword%'API: GET /api/v1/stats/type-distribution
SQL 能力:
- GROUP BY 分组统计
- COUNT(*) + AVG() 聚合函数
- 时间窗口过滤 (DATE_SUB)
SELECT dt.type_name, COUNT(d.id), AVG(rd.value)
FROM device_types dt
LEFT JOIN devices d ON dt.id = d.device_type_id
GROUP BY dt.idAPI: POST /api/v1/maintenance/daily-check
SQL 能力:
- CALL 调用存储过程
- 展示数据库层计算能力
db.Raw("CALL sp_daily_statistics(?, ?)", date, deviceID).Scan(&results)基于 Bootstrap 5 和 ECharts 开发的现代化 Web 界面:
- 📊 实时图表: 设备类型分布和平均温度双轴图
- 🔍 智能搜索: 跨设备、车间、位置的模糊搜索
- 📋 仪表盘: 完整的设备列表,包含实时数据
- 🎨 响应式设计: 美观的渐变背景和卡片布局
-- 查看所有表
SHOW TABLES;
-- 查看视图
SHOW FULL TABLES WHERE Table_type = 'VIEW';
SELECT * FROM v_device_status LIMIT 5;
-- 查看触发器
SHOW TRIGGERS;
-- 查看存储过程
SHOW PROCEDURE STATUS WHERE Db = 'iiot_monitor';
-- 测试存储过程
CALL sp_daily_statistics('2024-12-21', 1);
-- 验证数据量
SELECT COUNT(*) FROM realtime_data;# 设备仪表盘
curl http://localhost:8080/api/v1/devices/dashboard | jq
# 模糊搜索
curl "http://localhost:8080/api/v1/devices/search?q=机床" | jq
# 统计报表
curl http://localhost:8080/api/v1/stats/type-distribution | jq
# 存储过程调用
curl -X POST http://localhost:8080/api/v1/maintenance/daily-check \
-H "Content-Type: application/json" \
-d '{"date": "2024-12-21", "device_id": 1}' | jq- 📖 DEPLOYMENT.md - 完整部署指南(包含故障排查)
- 🧪 API_TESTING.md - API 测试命令集
- 📝 walkthrough.md - 实现详解
- 表数量 ≥ 10 ✅ (13张)
- 视图 ≥ 2 ✅ (2个)
- 触发器 ≥ 1 ✅ (1个,自动报警)
- 存储过程 ≥ 1 ✅ (1个,日统计)
- 外键约束 ✅ (全部定义)
- 关系类型 ✅ (1:1, 1:N, N:M 全覆盖)
- 架构清晰 ✅ (标准三层架构)
- 代码规范 ✅ (中文注释)
- 复杂查询 ✅ (4种SQL能力展示)
- 数据量充足 ✅ (10,000+条)
- 界面友好 ✅ (Bootstrap响应式)
- ✨ 配置管理: Viper + YAML
- ✨ 数据生成器: 自动生成大量测试数据
- ✨ 数据可视化: ECharts 图表展示
- ✨ RESTful API: 标准 REST 接口设计
- ✨ 连接池: 数据库连接优化
- Phase 1: 数据库设计与初始化
- Phase 2: Go 后端骨架搭建
- Phase 3: 核心业务逻辑(4个特性)
- Phase 4: 数据生成器 + 前端界面
欢迎提交 Issue 和 Pull Request!
MIT License
- 项目: Industrial IoT Monitor
- 用途: 数据库课程设计
- 技术: Go + MySQL + Bootstrap + ECharts
🎉 祝你课程设计答辩成功!