数据库表结构
SQLite 数据库,路径
data/safe_upload.db,共 28 张表。数据库是整个平台的"记忆中心",所有隐患、用户、台账数据都存在这里。
核心表关系图
erDiagram
ORGANIZATIONS ||--o{ USERS : "拥有"
ORGANIZATIONS ||--o{ EQUIPMENT : "拥有"
ORGANIZATIONS ||--o{ HAZARDS : "发生"
ORGANIZATIONS ||--o{ RISK_POINTS : "分布"
ORGANIZATIONS ||--o{ TASKS : "派发"
USERS ||--o{ HAZARDS : "上报"
USERS ||--o{ TASKS : "负责"
USERS ||--o{ LOGS : "操作"
HAZARDS ||--o{ HAZARD_FLOW : "流转"
HAZARDS ||--o{ HAZARD_PHOTOS : "附件"
RISK_POINTS ||--o{ RISK_MEASURES : "措施"
TRAINING_COURSES ||--o{ TRAINING_RECORDS : "学习"
EMERGENCY_PLANS ||--o{ EMERGENCY_DRILLS : "演练"
WORK_PERMITS ||--o{ PERMIT_FLOW : "审批"
ORGANIZATIONS {
int id PK
string name
int parent_id
}
USERS {
int id PK
string username
string password_hash
string role
int org_id FK
}
HAZARDS {
int id PK
string title
string level
int org_id FK
int reporter_id FK
string status
}
TASKS {
int id PK
int hazard_id FK
int assignee_id FK
date deadline
string status
}
LOGS {
int id PK
int user_id FK
string action
string ip
datetime created_at
}
表分类总览
| 分类 | 主要表 | 作用 |
|---|---|---|
| 基础台账 | organizations equipment personnel related_parties materials |
录入组织、设备、人员、合作方、物资 |
| 隐患管理 | hazards hazard_flow hazard_photos tasks |
隐患上报、流转、整改、闭环 |
| 风险管控 | risk_points risk_measures |
双重预防机制 - 风险点与管控措施 |
| 培训管理 | training_courses training_records exam_papers |
课程、记录、考试 |
| 应急管理 | emergency_plans emergency_drills emergency_contacts |
预案、演练、通讯录 |
| 作业许可 | work_permits permit_flow |
动火/高处等高风险作业审批 |
| 巡查管理 | patrols patrol_records patrol_points |
巡查计划、记录、点位 |
| 统计/考核 | reports_cache assessments |
报表缓存、考核评分 |
| 系统表 | users roles logs settings |
账号、权限、日志、配置 |
通用字段约定
每张表都包含以下基础字段:
id—— 自增主键created_at—— 创建时间(ISO8601 字符串)updated_at—— 更新时间(部分表)org_id—— 经营主体关联(多租户隔离)
多租户隔离机制
平台采用经营主体(org_id)字段做多租户数据隔离:
- 公司管理员可以看到所有数据
- 子公司管理员只能看到本公司的数据
- 普通员工只能看到自己上报或被指派的数据
- 所有 SQL 查询自动追加
WHERE org_id IN (当前用户可见的 org 列表)过滤
备份与维护
- 自动备份:每日凌晨 2:00 自动备份到内网 Gitea
- 保留策略:本地保留 7 天,Gitea 长期保留
- 数据导出:管理员可在「导入导出」页面导出全量数据为 Excel