# 数据库设计 ## 数据库选择 - 本地开发和测试:SQLite - 生产环境:MySQL 8.0,字符集 `utf8mb4` - 高频时序数据:当前提供 `sensor_readings` 基础表,生产建议迁移到专用时序数据库 - 原始文件:数据库只保存元数据和路径,文件建议使用 MinIO 或对象存储 所有业务表使用 32 位字符串 UUID,通过 SQLAlchemy `Base.metadata` 统一生成。 ## 业务域 ### 矿井与空间对象 | 表 | 用途 | |---|---| | `mines` | 矿井主数据 | | `mine_areas` | 采区 | | `work_faces` | 采掘工作面 | | `roadways` | 巷道和通风网络对象 | 对象层级:矿井 → 采区 → 工作面/巷道。 ### 数据感知与监测 | 表 | 用途 | |---|---| | `data_sources` | 安全监控、视频、物联平台等数据源 | | `sensors` | 传感器主数据和最近值 | | `sensor_readings` | 时序监测读数 | | `ventilation_facilities` | 风门、风窗、密闭、风桥等设施 | 生产环境可将 `sensor_readings` 拆到 TDengine 等时序库,`sensors` 仍保留在关系库。 ### 业务资料 | 表 | 用途 | |---|---| | `business_documents` | 资料元数据、分类、解析状态和文件路径 | | `document_extractions` | OCR/版面解析后的结构化字段 | 资料分类固定为: `全部资料`、`通风专业`、`火灾防治`、`监测监控`、`粉尘防治`、`瓦斯防治`、`制度管理`。 ### 知识中心 | 表 | 用途 | |---|---| | `knowledge_items` | 规程、案例、专家经验和制度知识 | | `knowledge_chunks` | 知识切片和向量索引引用 | 当前检索使用数据库关键词匹配,后续可接向量库和知识图谱。 ### 缺陷诊断 | 表 | 用途 | |---|---| | `diagnosis_rules` | 规则库和阈值 | | `diagnosis_tasks` | 一次诊断任务 | | `diagnosis_results` | 缺陷、风险等级、置信度和建议 | | `diagnosis_evidence` | 监测、视频、知识、设施等证据链 | 场景建议值: `局部通风`、`通风设施`、`通风系统管理`、`风量分配`、`灾害防治`。 ### 综合评价 | 表 | 用途 | |---|---| | `evaluation_indicators` | 指标树、维度、权重和计算口径 | | `evaluation_runs` | 一次评价批次、总分、等级和建议 | | `evaluation_scores` | 每个指标的原始值、得分和权重 | 默认维度: `安全性`、`可靠性`、`经济性`、`管理合规`、`数据质量`。 ### 告警与闭环 | 表 | 用途 | |---|---| | `alarms` | 原始告警 | | `work_orders` | 整改任务 | | `work_order_events` | 创建、指派、整改、复核、关闭轨迹 | 建议状态:`pending`、`processing`、`review`、`completed`、`closed`。 ### Agent 运行 | 表 | 用途 | |---|---| | `agent_sessions` | DeepAgent 会话 | | `agent_runs` | 工作流执行记录、输入、输出和模型信息 | ## 关键关系 ```text mines 1 ── n mine_areas mines 1 ── n work_faces mines 1 ── n roadways mines 1 ── n data_sources mines 1 ── n sensors sensors 1 ── n sensor_readings mines 1 ── n ventilation_facilities mines 1 ── n business_documents business_documents 1 ── n document_extractions business_documents 1 ── n knowledge_items diagnosis_tasks 1 ── n diagnosis_results diagnosis_results 1 ── n diagnosis_evidence evaluation_runs 1 ── n evaluation_scores evaluation_indicators 1 ── n evaluation_scores alarms 1 ── n work_orders work_orders 1 ── n work_order_events agent_sessions 1 ── n agent_runs ``` ## 索引策略 - 所有关联外键建立索引 - 矿井编码、资料分类、解析状态、任务状态、缺陷等级和工单状态建立索引 - `sensor_readings(sensor_id, measured_at)` 是主要时序查询组合 - 生产 MySQL 可增加矿井维度的组合索引 ## 迁移 ```powershell alembic upgrade head alembic revision --autogenerate -m "add table" ``` 新表必须同时进入 `app/db/models/` 和 `app/db/models/__init__.py`,否则 Alembic 无法识别。