数据库设计补

pull/48/head
echo 4 months ago
parent b1448fdc35
commit 5e15849114

@ -18,56 +18,53 @@
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | IDENTITY | 主键ID | |
| 2 | role_name | VARCHAR | 50 | - | - | NOT NULL | - | 角色名称 | |
| 3 | role_key | VARCHAR | 50 | - | - | NOT NULL | - | 角色唯一标识 | |
| 4 | description | VARCHAR | 255 | - | - | NULL | - | 角色描述 | |
| 5 | is_system_role | BOOLEAN | - | - | - | NOT NULL | FALSE | 是否为系统内置角色 | |
| 6 | created_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 创建时间 | |
| 7 | updated_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 更新时间 | |
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | - | 主键ID | |
| 2 | role_name | CHARACTER | - | - | - | NOT NULL | - | 角色名称 | |
| 3 | role_key | CHARACTER | - | - | - | NOT NULL | - | 角色唯一标识 | |
| 4 | description | CHARACTER | - | - | - | NULL | - | 角色描述 | |
| 5 | is_system_role | BOOLEAN | - | - | - | NOT NULL | false | 是否为系统内置角色 | |
| 6 | created_at | TIMESTAMP | - | - | - | NOT NULL | now() | 创建时间 | |
| 7 | updated_at | TIMESTAMP | - | - | - | NOT NULL | now() | 更新时间 | |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_role_key (role_key)
- PRIMARY KEY: (id)
#### 表名: permissions (权限表)
**表说明**: 系统权限定义
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | IDENTITY | 主键ID | |
| 2 | permission_name | VARCHAR | 100 | - | - | NOT NULL | - | 权限名称 | |
| 3 | permission_key | VARCHAR | 100 | - | - | NOT NULL | - | 权限唯一标识 | |
| 4 | description | VARCHAR | 255 | - | - | NULL | - | 权限描述 | |
| 5 | created_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 创建时间 | |
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | - | 主键ID | |
| 2 | permission_name | CHARACTER | - | - | - | NOT NULL | - | 权限名称 | |
| 3 | permission_key | CHARACTER | - | - | - | NOT NULL | - | 权限唯一标识 | |
| 4 | description | CHARACTER | - | - | - | NULL | - | 权限描述 | |
| 5 | created_at | TIMESTAMP | - | - | - | NOT NULL | now() | 创建时间 | |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_permission_key (permission_key)
- PRIMARY KEY: (id)
#### 表名: role_permission_mapping (角色-权限映射表)
**表说明**: 角色与权限的多对多关系
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | role_id | BIGINT | - | - | ✓ | NOT NULL | - | 角色ID | 外键关联roles |
| 2 | permission_id | BIGINT | - | - | ✓ | NOT NULL | - | 权限ID | 外键关联permissions |
| 1 | role_id | BIGINT | - | - | ✓ | NOT NULL | - | 角色ID | |
| 2 | permission_id | BIGINT | - | - | ✓ | NOT NULL | - | 权限ID | |
**索引信息**:
- PRIMARY KEY: (role_id, permission_id)
- FOREIGN KEY: FK(permission_id) -> public.permissions(id)
- FOREIGN KEY: FK(role_id) -> public.roles(id)
#### 表名: user_role_mapping (用户-角色映射表)
**表说明**: 用户与角色的多对多关系
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | user_id | BIGINT | - | - | ✓ | NOT NULL | - | 用户ID | 外键关联users |
| 2 | role_id | BIGINT | - | - | ✓ | NOT NULL | - | 角色ID | 外键关联roles |
| 1 | user_id | BIGINT | - | - | ✓ | NOT NULL | - | 用户ID | |
| 2 | role_id | BIGINT | - | - | ✓ | NOT NULL | - | 角色ID | |
**索引信息**:
- PRIMARY KEY: (user_id, role_id)
### 2.1 核心业务表
- FOREIGN KEY: FK(role_id) -> public.roles(id)
- FOREIGN KEY: FK(user_id) -> public.users(id)
#### 表名: fault_records (故障记录表)
**表说明**: 存储系统检测到的所有故障信息,是系统的核心业务表
@ -106,444 +103,199 @@
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | IDENTITY | 主键ID | |
| 2 | exec_id | VARCHAR | 32 | - | - | NOT NULL | - | 执行唯一标识 | 格式: EXE-YYYYMMDD-XXXX |
| 3 | fault_id | VARCHAR | 32 | - | - | NOT NULL | - | 关联故障ID | 外键关联fault_records |
| 4 | command_type | VARCHAR | 50 | - | - | NOT NULL | - | 命令类型 | restart/repair/check等 |
| 5 | script_path | VARCHAR | 255 | - | - | NULL | - | 脚本路径 | 执行脚本的文件路径 |
| 6 | command_content | TEXT | - | - | - | NOT NULL | - | 执行的命令内容 | 完整的命令或脚本内容 |
| 7 | target_nodes | JSONB | - | - | - | NULL | - | 目标执行节点 | JSONB数组 |
| 8 | risk_level | VARCHAR | 20 | - | - | - | NOT NULL | 'medium' | 风险级别 | low/medium/high |
| 9 | execution_status | VARCHAR | 20 | - | - | - | NOT NULL | 'pending' | 执行状态 | pending/running/success/failed/timeout |
| 10 | start_time | TIMESTAMPTZ | - | - | - | NULL | - | 开始执行时间 | |
| 11 | end_time | TIMESTAMPTZ | - | - | - | NULL | - | 结束执行时间 | |
| 12 | duration | INT | - | - | - | NULL | - | 执行时长(秒) | 计算得出的执行时长 |
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | - | 主键ID | |
| 2 | exec_id | CHARACTER | - | - | - | NOT NULL | - | 执行唯一标识 | |
| 3 | fault_id | CHARACTER | - | - | - | NOT NULL | - | 关联故障标识(无外键) | |
| 4 | command_type | CHARACTER | - | - | - | NOT NULL | - | 命令类型 | |
| 5 | script_path | CHARACTER | - | - | - | NULL | - | 脚本路径 | |
| 6 | command_content | TEXT | - | - | - | NOT NULL | - | 执行的命令内容 | |
| 7 | target_nodes | JSONB | - | - | - | NULL | - | 目标执行节点(JSONB) | |
| 8 | risk_level | CHARACTER | - | - | - | NOT NULL | 'medium'::character | 风险级别(low/medium/high) | |
| 9 | execution_status | CHARACTER | - | - | - | NOT NULL | 'pending'::character | 执行状态(pending/running/success/failed/timeout) | |
| 10 | start_time | TIMESTAMP | - | - | - | NULL | - | 开始执行时间 | |
| 11 | end_time | TIMESTAMP | - | - | - | NULL | - | 结束执行时间 | |
| 12 | duration | INTEGER | - | - | - | NULL | - | 执行时长(秒) | |
| 13 | stdout_log | TEXT | - | - | - | NULL | - | 标准输出日志 | |
| 14 | stderr_log | TEXT | - | - | - | NULL | - | 错误输出日志 | |
| 15 | exit_code | INT | - | - | - | NULL | - | 退出码 | 命令执行的退出码 |
| 16 | operator | VARCHAR | 50 | - | - | NOT NULL | 'system' | 操作人 | 执行操作的用户 |
| 17 | created_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 创建时间 | |
| 18 | updated_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 更新时间 | |
| 15 | exit_code | INTEGER | - | - | - | NULL | - | 退出码 | |
| 16 | operator | CHARACTER | - | - | - | NOT NULL | 'system'::character | 操作人 | |
| 17 | created_at | TIMESTAMP | - | - | - | NOT NULL | now() | 创建时间 | |
| 18 | updated_at | TIMESTAMP | - | - | - | NOT NULL | now() | 更新时间 | |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_exec_id (exec_id)
- INDEX: idx_fault_id (fault_id)
- INDEX: idx_execution_status (execution_status)
**外键约束**:
- fk_exec_logs_fault_id: fault_id → fault_records.fault_id
- PRIMARY KEY: (id)
- INDEX: idx_exec_logs_end_time (end_time)
- INDEX: idx_exec_logs_fault_id (fault_id)
- INDEX: idx_exec_logs_start_time (start_time)
- INDEX: idx_exec_logs_status (execution_status)
#### 表名: nodes (节点信息表)
**表说明**: 记录集群内各节点的状态信息
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | IDENTITY | 主键ID | |
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | - | 主键ID | |
| 2 | uuid | UUID | - | - | - | NOT NULL | - | 节点唯一标识(UUID) | |
| 3 | cluster_id | BIGINT | - | - | - | NOT NULL | - | 集群ID | 外键关联clusters表 |
| 4 | hostname | VARCHAR | 100 | - | - | NOT NULL | - | 节点主机名 | |
| 5 | ip_address | INET | - | - | - | NOT NULL | - | 节点IP地址 | 兼容IPv4/IPv6 |
| 6 | status | VARCHAR | 20 | - | - | - | NOT NULL | 'unknown' | 节点状态 | healthy/unhealthy/warning/unknown |
| 7 | cpu_usage | NUMERIC | 5 | 2 | - | NULL | - | CPU使用率(%) | 0.00-100.00 |
| 8 | memory_usage | NUMERIC | 5 | 2 | - | NULL | - | 内存使用率(%) | 0.00-100.00 |
| 9 | disk_usage | NUMERIC | 5 | 2 | - | NULL | - | 磁盘使用率(%) | 0.00-100.00 |
| 10 | last_heartbeat | TIMESTAMPTZ | - | - | - | NULL | - | 最后心跳时间 | |
| 11 | created_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 创建时间 | |
| 12 | updated_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 更新时间 | |
| 3 | cluster_id | BIGINT | - | - | - | NOT NULL | - | 所属集群ID | |
| 4 | hostname | CHARACTER | - | - | - | NOT NULL | - | 节点主机名 | |
| 5 | ip_address | INET | - | - | - | NOT NULL | - | 节点IP地址(INET, 兼容IPv4/IPv6) | |
| 6 | status | CHARACTER | - | - | - | NOT NULL | 'unknown'::character | 节点健康状态(healthy/unhealthy/warning/unknown) | |
| 7 | last_heartbeat | TIMESTAMP | - | - | - | NULL | - | 最后心跳时间 | |
| 8 | created_at | TIMESTAMP | - | - | - | NOT NULL | now() | 创建时间 | |
| 9 | updated_at | TIMESTAMP | - | - | - | NOT NULL | now() | 更新时间 | |
| 10 | ssh_user | CHARACTER | - | - | - | NULL | - | | |
| 11 | ssh_password | CHARACTER | - | - | - | NULL | - | | |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_cluster_hostname (cluster_id, hostname)
- PRIMARY KEY: (id)
- INDEX: idx_nodes_cluster_id (cluster_id)
- INDEX: idx_nodes_status (status)
- INDEX: idx_nodes_last_heartbeat (last_heartbeat)
- INDEX: idx_nodes_ip_address (ip_address)
**外键约束**:
- fk_nodes_cluster_id: cluster_id → clusters.id
- INDEX: idx_nodes_last_heartbeat (last_heartbeat)
- INDEX: idx_nodes_status (status)
- INDEX: uk_cluster_hostname (cluster_id, hostname)
- FOREIGN KEY: FK(cluster_id) -> public.clusters(id)
#### 表名: system_logs (系统日志表)
**表说明**: 存储从Flume采集的原始日志数据
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | IDENTITY | 主键ID | |
| 2 | log_id | VARCHAR | 32 | - | - | NOT NULL | - | 日志唯一标识 | |
| 3 | fault_id | VARCHAR | 32 | - | - | NULL | - | 关联故障ID | 外键关联fault_records |
| 4 | cluster_id | BIGINT | - | - | - | NULL | - | 关联集群ID | 外键关联clusters表 |
| 5 | timestamp | TIMESTAMPTZ | - | - | - | NOT NULL | - | 日志时间戳 | |
| 6 | host | VARCHAR | 100 | - | - | NOT NULL | - | 主机名 | 产生日志的主机 |
| 7 | service | VARCHAR | 50 | - | - | NOT NULL | - | 服务名 | HDFS/YARN/MapReduce等 |
| 8 | log_level | VARCHAR | 10 | - | - | - | NOT NULL | - | 日志级别 | DEBUG/INFO/WARN/ERROR/FATAL |
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | - | 主键ID | |
| 2 | log_id | CHARACTER | - | - | - | NOT NULL | - | 日志唯一标识 | |
| 3 | fault_id | CHARACTER | - | - | - | NULL | - | 关联故障标识(无外键) | |
| 4 | cluster_id | BIGINT | - | - | - | NULL | - | 关联集群ID | |
| 5 | host | CHARACTER | - | - | - | NOT NULL | - | 主机名 | |
| 6 | service | CHARACTER | - | - | - | NOT NULL | - | 服务名 | |
| 7 | source | CHARACTER | - | - | - | NULL | - | 来源 | |
| 8 | log_level | CHARACTER | - | - | - | NOT NULL | - | 日志级别(DEBUG/INFO/WARN/ERROR/FATAL) | |
| 9 | message | TEXT | - | - | - | NOT NULL | - | 日志消息 | |
| 10 | exception | TEXT | - | - | - | NULL | - | 异常堆栈 | |
| 11 | raw_log | TEXT | - | - | - | NULL | - | 原始日志内容 | |
| 12 | processed | BOOLEAN | - | - | - | NOT NULL | FALSE | 是否已处理 | 标记是否已被分析处理 |
| 13 | created_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 创建时间 | |
| 12 | processed | BOOLEAN | - | - | - | NOT NULL | false | 是否已处理 | |
| 13 | created_at | TIMESTAMP | - | - | - | NOT NULL | now() | 创建时间 | |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_log_id (log_id)
- INDEX: idx_system_logs_fault_id (fault_id)
- PRIMARY KEY: (id)
- INDEX: idx_system_logs_cluster_id (cluster_id)
- INDEX: idx_system_logs_timestamp (timestamp)
- INDEX: idx_system_logs_fault_id (fault_id)
- INDEX: idx_system_logs_level (log_level)
- INDEX: idx_system_logs_processed (processed)
**外键约束**:
- fk_system_logs_fault_id: fault_id → fault_records.fault_id
- fk_system_logs_cluster_id: cluster_id → clusters.id
### 2.2 配置管理与用户表
- INDEX: idx_system_logs_timestamp ("timestamp")
- FOREIGN KEY: FK(cluster_id) -> public.clusters(id)
#### 表名: clusters (集群信息表)
**表说明**: 存储用户管理的集群信息
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | IDENTITY | 主键ID | |
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | - | 主键ID | |
| 2 | uuid | UUID | - | - | - | NOT NULL | - | 集群唯一标识(UUID) | |
| 3 | name | VARCHAR | 100 | - | - | NOT NULL | - | 集群名称 | 唯一名称 |
| 4 | type | VARCHAR | 50 | - | - | NOT NULL | - | 集群类型 | Hadoop/Kubernetes等 |
| 5 | node_count | INT | - | - | - | NOT NULL | 0 | 节点数量 | |
| 6 | health_status | VARCHAR | 20 | - | - | - | NOT NULL | 'unknown' | 健康状态 | healthy/warning/error/unknown |
| 3 | name | CHARACTER | - | - | - | NOT NULL | - | 集群名称 | |
| 4 | type | CHARACTER | - | - | - | NOT NULL | - | 集群类型 | |
| 5 | node_count | INTEGER | - | - | - | NOT NULL | 0 | 集群节点数量 | |
| 6 | health_status | CHARACTER | - | - | - | NOT NULL | 'unknown'::character | 集群健康状态(healthy/warning/error/unknown) | |
| 7 | description | TEXT | - | - | - | NULL | - | 集群描述 | |
| 8 | config_info | JSONB | - | - | - | NULL | - | 集群配置信息 | JSONB |
| 9 | created_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 创建时间 | |
| 10 | updated_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 更新时间 | |
| 8 | config_info | JSONB | - | - | - | NULL | - | 集群配置信息(JSONB) | |
| 9 | created_at | TIMESTAMP | - | - | - | NOT NULL | now() | 创建时间 | |
| 10 | updated_at | TIMESTAMP | - | - | - | NOT NULL | now() | 更新时间 | |
| 11 | namenode_ip | INET | - | - | - | NULL | - | | |
| 12 | namenode_psw | CHARACTER | - | - | - | NULL | - | | |
| 13 | rm_ip | INET | - | - | - | NULL | - | | |
| 14 | rm_psw | CHARACTER | - | - | - | NULL | - | | |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uuid
- UNIQUE KEY: name
- INDEX: 可根据查询需要扩展
- PRIMARY KEY: (id)
#### 表名: user_cluster_mapping (用户与集群映射表)
**表说明**: 管理用户和集群的多对多关系
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | IDENTITY | 主键ID | |
| 2 | user_id | BIGINT | - | - | - | NOT NULL | - | 用户ID | 外键关联users表 |
| 3 | cluster_id | BIGINT | - | - | - | NOT NULL | - | 集群ID | 外键关联clusters表 |
| 4 | role_id | BIGINT | - | - | - | NOT NULL | - | 角色ID | 外键关联roles表 |
| 5 | created_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 创建时间 | |
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | - | 主键ID | |
| 2 | user_id | BIGINT | - | - | - | NOT NULL | - | 用户ID | |
| 3 | cluster_id | BIGINT | - | - | - | NOT NULL | - | 集群ID | |
| 4 | role_id | BIGINT | - | - | - | NOT NULL | - | 角色ID | |
| 5 | created_at | TIMESTAMP | - | - | - | NOT NULL | now() | 创建时间 | |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_user_cluster (user_id, cluster_id)
**外键约束**:
- fk_mapping_user_id: user_id → users.id
- fk_mapping_cluster_id: cluster_id → clusters.id
- fk_mapping_role_id: role_id → roles.id
- PRIMARY KEY: (id)
- FOREIGN KEY: FK(cluster_id) -> public.clusters(id)
- FOREIGN KEY: FK(role_id) -> public.roles(id)
- FOREIGN KEY: FK(user_id) -> public.users(id)
#### 表名: app_configurations (应用配置表)
**表说明**: 存储系统各类配置信息,包括系统参数、告警规则和通知设置
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | IDENTITY | 主键ID | |
| 2 | config_type | VARCHAR | 20 | - | - | - | NOT NULL | - | 配置类型 | system/alert_rule/notification/llm |
| 3 | config_key | VARCHAR | 100 | - | - | NOT NULL | - | 配置键 | 配置的唯一标识 |
| 4 | config_value | JSONB | - | - | - | NOT NULL | - | 配置值 | JSONB格式的配置内容 |
| 5 | description | VARCHAR | 500 | - | - | NULL | - | 配置描述 | 配置项的说明 |
| 6 | is_enabled | BOOLEAN | - | - | - | NOT NULL | TRUE | 是否启用 | 配置是否生效 |
| 7 | created_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 创建时间 | |
| 8 | updated_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 更新时间 | |
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | - | 主键ID | |
| 2 | config_type | CHARACTER | - | - | - | NOT NULL | - | 配置类型(system/alert_rule/notification/llm) | |
| 3 | config_key | CHARACTER | - | - | - | NOT NULL | - | 配置键 | |
| 4 | config_value | JSONB | - | - | - | NOT NULL | - | 配置值(JSONB) | |
| 5 | description | CHARACTER | - | - | - | NULL | - | 配置描述 | |
| 6 | is_enabled | BOOLEAN | - | - | - | NOT NULL | true | 是否启用 | |
| 7 | created_at | TIMESTAMP | - | - | - | NOT NULL | now() | 创建时间 | |
| 8 | updated_at | TIMESTAMP | - | - | - | NOT NULL | now() | 更新时间 | |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_app_config (config_type, config_key)
- PRIMARY KEY: (id)
- INDEX: idx_app_config_enabled (is_enabled)
#### 表名: users (用户表)
**表说明**: 系统用户信息
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | IDENTITY | 主键ID | |
| 2 | username | VARCHAR | 50 | - | - | NOT NULL | - | 用户名 | 登录用户名 |
| 3 | email | VARCHAR | 100 | - | - | NOT NULL | - | 邮箱 | 用户邮箱地址 |
| 4 | password_hash | VARCHAR | 255 | - | - | NOT NULL | - | 密码哈希 | 加密后的密码 |
| 5 | full_name | VARCHAR | 100 | - | - | NOT NULL | - | 姓名 | 用户真实姓名 |
| 6 | is_active | BOOLEAN | - | - | - | NOT NULL | TRUE | 是否激活 | 账号是否可用 |
| 7 | last_login | TIMESTAMPTZ | - | - | - | NULL | - | 最后登录时间 | 最后一次登录时间 |
| 8 | created_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 创建时间 | 账号创建时间 |
| 9 | updated_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 更新时间 | 账号更新时间 |
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | - | 主键ID | |
| 2 | username | CHARACTER | - | - | - | NOT NULL | - | 用户名 | |
| 3 | email | CHARACTER | - | - | - | NOT NULL | - | 邮箱 | |
| 4 | password_hash | CHARACTER | - | - | - | NOT NULL | - | 密码哈希 | |
| 5 | full_name | CHARACTER | - | - | - | NOT NULL | - | 姓名 | |
| 6 | is_active | BOOLEAN | - | - | - | NOT NULL | true | 是否激活 | |
| 7 | last_login | TIMESTAMP | - | - | - | NULL | - | 最后登录时间 | |
| 8 | created_at | TIMESTAMP | - | - | - | NOT NULL | now() | 创建时间 | |
| 9 | updated_at | TIMESTAMP | - | - | - | NOT NULL | now() | 更新时间 | |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_username (username)
- UNIQUE KEY: uk_email (email)
- PRIMARY KEY: (id)
#### 表名: audit_logs (操作审计表)
**表说明**: 记录用户操作审计日志
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | IDENTITY | 主键ID | |
| 2 | user_id | BIGINT | - | - | - | NULL | - | 用户ID | 关联users表 |
| 3 | cluster_id | BIGINT | - | - | - | NULL | - | 集群ID | 关联clusters表 |
| 4 | role_id | BIGINT | - | - | - | NULL | - | 角色ID | 关联roles表 |
| 4 | username | VARCHAR | 50 | - | - | NOT NULL | - | 用户名 | 操作用户名 |
| 5 | action | VARCHAR | 100 | - | - | NOT NULL | - | 操作动作 | 具体的操作类型 |
| 6 | resource_type | VARCHAR | 50 | - | - | NOT NULL | - | 资源类型 | 操作的资源类型 |
| 7 | resource_id | VARCHAR | 100 | - | - | NULL | - | 资源ID | 操作的资源标识 |
| 8 | ip_address | INET | - | - | - | NOT NULL | - | IP地址 | 操作来源IP |
| 9 | request_data | JSONB | - | - | - | NULL | - | 请求数据 | 请求的详细数据 |
| 10 | response_status | INT | - | - | - | NULL | - | 响应状态码 | HTTP响应状态 |
| 11 | created_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 操作发生时间 | |
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | - | 主键ID | |
| 2 | user_id | BIGINT | - | - | - | NULL | - | 用户ID | |
| 3 | cluster_id | BIGINT | - | - | - | NULL | - | 集群ID | |
| 4 | role_id | BIGINT | - | - | - | NULL | - | 角色ID | |
| 5 | username | CHARACTER | - | - | - | NOT NULL | - | 用户名 | |
| 6 | action | CHARACTER | - | - | - | NOT NULL | - | 操作动作 | |
| 7 | resource_type | CHARACTER | - | - | - | NOT NULL | - | 资源类型 | |
| 8 | resource_id | CHARACTER | - | - | - | NULL | - | 资源ID | |
| 9 | ip_address | INET | - | - | - | NOT NULL | - | 请求来源IP(INET, 兼容IPv4/IPv6) | |
| 10 | request_data | JSONB | - | - | - | NULL | - | 请求数据(JSONB) | |
| 11 | response_status | INTEGER | - | - | - | NULL | - | 响应状态码 | |
| 12 | created_at | TIMESTAMP | - | - | - | NOT NULL | now() | 创建时间 | |
**索引信息**:
- PRIMARY KEY: id
- INDEX: idx_audit_logs_user_id (user_id)
- INDEX: idx_audit_logs_cluster_id (cluster_id)
- INDEX: idx_audit_logs_role_id (role_id)
- PRIMARY KEY: (id)
- INDEX: idx_audit_logs_action (action)
- INDEX: idx_audit_logs_cluster_id (cluster_id)
- INDEX: idx_audit_logs_created_at (created_at)
**外键约束**:
- fk_audit_logs_user_id: user_id → users.id
- fk_audit_logs_cluster_id: cluster_id → clusters.id
- fk_audit_logs_role_id: role_id → roles.id
### 2.3 扩展表
- INDEX: idx_audit_logs_role_id (role_id)
- INDEX: idx_audit_logs_user_id (user_id)
- FOREIGN KEY: FK(cluster_id) -> public.clusters(id)
- FOREIGN KEY: FK(role_id) -> public.roles(id)
- FOREIGN KEY: FK(user_id) -> public.users(id)
#### 表名: repair_templates (修复模板表)
**表说明**: 存储常见故障的修复模板
| 序号 | 字段名 | 数据类型 | 长度 | 精度 | 是否主键 | 是否为空 | 默认值 | 字段说明 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | IDENTITY | 主键ID | |
| 2 | template_name | VARCHAR | 100 | - | - | NOT NULL | - | 模板名称 | 模板的唯一名称 |
| 3 | fault_type | VARCHAR | 50 | - | - | NOT NULL | - | 适用故障类型 | 模板适用的故障类型 |
| 4 | script_content | TEXT | - | - | - | NOT NULL | - | 脚本内容 | 修复脚本或命令 |
| 5 | risk_level | VARCHAR | 20 | - | - | - | NOT NULL | 'medium' | 风险级别 | low/medium/high |
| 6 | description | TEXT | - | - | - | NULL | - | 模板描述 | 模板的功能说明 |
| 7 | parameters | JSONB | - | - | - | NULL | - | 参数定义 | 脚本所需参数的定义 |
| 8 | created_by | VARCHAR | 50 | - | - | NULL | - | 创建者 | 模板的创建者 |
| 9 | created_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 创建时间 | |
| 10 | updated_at | TIMESTAMPTZ | - | - | - | NOT NULL | NOW() | 更新时间 | |
| 1 | id | BIGINT | - | - | ✓ | NOT NULL | - | 主键ID | |
| 2 | template_name | CHARACTER | - | - | - | NOT NULL | - | 模板名称 | |
| 3 | fault_type | CHARACTER | - | - | - | NOT NULL | - | 适用故障类型 | |
| 4 | script_content | TEXT | - | - | - | NOT NULL | - | 脚本内容 | |
| 5 | risk_level | CHARACTER | - | - | - | NOT NULL | 'medium'::character | 风险级别(low/medium/high) | |
| 6 | description | TEXT | - | - | - | NULL | - | 模板描述 | |
| 7 | parameters | JSONB | - | - | - | NULL | - | 模板参数定义(JSONB) | |
| 8 | created_by | CHARACTER | - | - | - | NULL | - | 创建人 | |
| 9 | created_at | TIMESTAMP | - | - | - | NOT NULL | now() | 创建时间 | |
| 10 | updated_at | TIMESTAMP | - | - | - | NOT NULL | now() | 更新时间 | |
**索引信息**:
- PRIMARY KEY: id
- UNIQUE KEY: uk_template_name (template_name)
- INDEX: idx_fault_type (fault_type)
## 3. 枚举值定义
### 3.1 故障级别 (fault_level)
- `low`: 低级别故障,影响较小
- `medium`: 中等级别故障,需要关注
- `high`: 高级别故障,需要及时处理
- `critical`: 严重故障,需要立即处理
### 3.2 故障状态 (status)
- `detected`: 已检测到,等待分析
- `analyzing`: 正在分析中
- `repairing`: 正在修复中
- `resolved`: 已解决
- `failed`: 修复失败
### 3.3 节点角色 (node_role)
- `NameNode`: Hadoop NameNode节点
- `DataNode`: Hadoop DataNode节点
- `ResourceManager`: YARN ResourceManager节点
- `NodeManager`: YARN NodeManager节点
### 3.4 节点状态 (node_status)
- `healthy`: 健康
- `unhealthy`: 不健康
- `warning`: 警告
- `unknown`: 状态未知
### 3.5 日志级别 (log_level)
- `DEBUG`: 调试信息
- `INFO`: 一般信息
- `WARN`: 警告信息
- `ERROR`: 错误信息
- `FATAL`: 致命错误
### 3.6 执行状态 (execution_status)
- `pending`: 等待执行
- `running`: 正在执行
- `success`: 执行成功
- `failed`: 执行失败
- `timeout`: 执行超时
### 3.7 角色标识 (role_key)
- `admin`: 系统管理员,拥有所有权限
- `operator`: 运维工程师,可以执行修复操作
- `viewer`: 查看者,只能查看信息
- `cluster_admin`: 集群管理员(用于集群范围权限)
## 4. JSON字段结构说明
### 4.1 affected_nodes (受影响节点)
```json
[
{
"node_uuid": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
"hostname": "hadoop-master",
"impact_level": "high"
}
]
```
### 4.2 target_nodes (目标节点)
```json
[
{
"node_uuid": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
"hostname": "hadoop-master",
"execution_order": 1
}
]
```
### 4.3 parameters (模板参数)
```json
[
{
"name": "target_directory",
"type": "string",
"description": "The target directory for the cleanup script.",
"required": true
}
]
```
### 4.4 config_info (集群配置信息)
```json
{
"namenode_rpc_address": "hdfs://namenode:8020",
"resourcemanager_address": "yarn-rm:8032",
"zookeeper_quorum": "zk1:2181,zk2:2181"
}
```
### 4.5 app_configurations.config_value (配置值)
**config_type: 'system'**
```json
{
"max_concurrent_repairs": 5,
"log_retention_days": 30
}
```
**config_type: 'alert_rule'**
```json
{
"metric": "cpu_usage",
"threshold": 90,
"operator": ">",
"duration_sec": 300,
"severity": "high"
}
```
**config_type: 'notification'**
```json
{
"channel": "email",
"recipients": ["admin@example.com"],
"template_id": "fault_notification_template"
}
```
**config_type: 'llm'**
```json
{
"provider": "openai",
"api_key": "sk-xxxxxxxx",
"model": "gpt-4"
}
```
(敏感信息需通过安全配置管理,避免明文保存)
## 5. 数据完整性约束
### 5.1 主键约束
所有表都有主键约束;多数表采用`IDENTITY`自增主键PostgreSQL GENERATED ALWAYS AS IDENTITY
### 5.2 唯一性约束
- fault_records.fault_id
- exec_logs.exec_id
- nodes.(cluster_id, hostname)
- system_logs.log_id
- clusters.uuid
- clusters.name
- user_cluster_mapping.(user_id, cluster_id)
- user_role_mapping.(user_id, role_id)
- role_permission_mapping.(role_id, permission_id)
- app_configurations.(config_type, config_key)
- roles.role_key
- permissions.permission_key
- users.username
- users.email
- repair_templates.template_name
### 5.3 外键约束
- nodes.cluster_id → clusters.id
- fault_records.cluster_id → clusters.id
- exec_logs.fault_id → fault_records.fault_id
- system_logs.fault_id → fault_records.fault_id
- system_logs.cluster_id → clusters.id
- user_cluster_mapping.user_id → users.id
- user_cluster_mapping.cluster_id → clusters.id
- user_cluster_mapping.role_id → roles.id
- user_role_mapping.user_id → users.id
- user_role_mapping.role_id → roles.id
- role_permission_mapping.role_id → roles.id
- role_permission_mapping.permission_id → permissions.id
- audit_logs.user_id → users.id
- audit_logs.cluster_id → clusters.id
- audit_logs.role_id → roles.id
### 5.4 检查约束
- nodes.cpu_usage: 0.00 <= cpu_usage <= 100.00
- nodes.memory_usage: 0.00 <= memory_usage <= 100.00
- nodes.disk_usage: 0.00 <= disk_usage <= 100.00
- fault_records.fault_level ∈ {low, medium, high, critical}
- fault_records.status ∈ {detected, analyzing, repairing, resolved, failed}
- exec_logs.risk_level ∈ {low, medium, high}
- exec_logs.execution_status ∈ {pending, running, success, failed, timeout}
## 9. PowerDesigner建模建议
### 9.1 物理数据模型(PDM)
1. 导入SQL脚本创建基础结构
2. 设置表和字段的注释
3. 配置索引和约束
4. 生成数据库文档
### 9.2 概念数据模型(CDM)
1. 定义实体和属性
2. 建立实体间关系
3. 设置业务规则
4. 生成概念模型图
### 9.3 逻辑数据模型(LDM)
1. 从CDM生成LDM
2. 优化表结构设计
3. 设置数据类型和约束
4. 验证模型完整性
## 10. 维护建议
### 10.1 定期维护
- 每周分析表统计信息
- 每月检查索引使用情况
- 每季度进行表空间整理
### 10.2 性能监控
- 监控慢查询日志
- 跟踪表增长趋势
- 优化高频查询索引
### 10.3 数据归档
- system_logs表按月分区
- 历史数据定期归档
- 保持表大小合理
- PRIMARY KEY: (id)
- INDEX: idx_repair_templates_fault_type (fault_type)

File diff suppressed because it is too large Load Diff

@ -57,345 +57,251 @@ table th:nth-child(6), table td:nth-child(6) { width: 36%; }
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | IDENTITY | 主键ID |
| exec_id | VARCHAR | 32 | NOT NULL | - | 执行唯一标识 |
| fault_id | VARCHAR | 32 | NOT NULL | - | 关联故障标识(无外键) |
| command_type | VARCHAR | 50 | NOT NULL | - | 命令类型 |
| script_path | VARCHAR | 255 | NULL | - | 脚本路径 |
| id | BIGINT | - | NOT NULL | - | (PK) 主键ID |
| exec_id | CHARACTER | - | NOT NULL | - | 执行唯一标识 |
| fault_id | CHARACTER | - | NOT NULL | - | 关联故障标识(无外键) |
| command_type | CHARACTER | - | NOT NULL | - | 命令类型 |
| script_path | CHARACTER | - | NULL | - | 脚本路径 |
| command_content | TEXT | - | NOT NULL | - | 执行的命令内容 |
| target_nodes | JSONB | - | NULL | - | 目标执行节点 |
| risk_level | VARCHAR | 20 | NOT NULL | 'medium' | 风险级别(low/medium/high) |
| execution_status | VARCHAR | 20 | NOT NULL | 'pending' | 执行状态(pending/running/success/failed/timeout) |
| start_time | TIMESTAMPTZ | - | NULL | - | 开始执行时间 |
| end_time | TIMESTAMPTZ | - | NULL | - | 结束执行时间 |
| duration | INT | - | NULL | - | 执行时长(秒) |
| target_nodes | JSONB | - | NULL | - | 目标执行节点(JSONB) |
| risk_level | CHARACTER | - | NOT NULL | 'medium'::character | 风险级别(low/medium/high) |
| execution_status | CHARACTER | - | NOT NULL | 'pending'::character | 执行状态(pending/running/success/failed/timeout) |
| start_time | TIMESTAMP | - | NULL | - | 开始执行时间 |
| end_time | TIMESTAMP | - | NULL | - | 结束执行时间 |
| duration | INTEGER | - | NULL | - | 执行时长(秒) |
| stdout_log | TEXT | - | NULL | - | 标准输出日志 |
| stderr_log | TEXT | - | NULL | - | 错误输出日志 |
| exit_code | INT | - | NULL | - | 退出码 |
| operator | VARCHAR | 50 | NOT NULL | 'system' | 操作人 |
| created_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 创建时间 |
| updated_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 更新时间 |
**索引设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_exec_id (exec_id)
- KEY idx_fault_id (fault_id)
- KEY idx_execution_status (execution_status)
| exit_code | INTEGER | - | NULL | - | 退出码 |
| operator | CHARACTER | - | NOT NULL | 'system'::character | 操作人 |
| created_at | TIMESTAMP | - | NOT NULL | now() | 创建时间 |
| updated_at | TIMESTAMP | - | NOT NULL | now() | 更新时间 |
**索引/约束设计:**
- PRIMARY KEY: (id)
- INDEX: idx_exec_logs_end_time (end_time)
- INDEX: idx_exec_logs_fault_id (fault_id)
- INDEX: idx_exec_logs_start_time (start_time)
- INDEX: idx_exec_logs_status (execution_status)
#### 2.1.2 节点信息表 (nodes)
记录集群内各节点的状态信息
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | IDENTITY | 主键ID |
| id | BIGINT | - | NOT NULL | - | (PK) 主键ID |
| uuid | UUID | - | NOT NULL | - | 节点唯一标识(UUID) |
| cluster_id | BIGINT | - | NOT NULL | - | 所属集群ID |
| hostname | VARCHAR | 100 | NOT NULL | - | 节点主机名 |
| ip_address | INET | - | NOT NULL | - | 节点IP地址(IPv4/IPv6) |
| status | VARCHAR | 20 | NOT NULL | 'unknown' | 节点健康状态(healthy/unhealthy/warning/unknown) |
| cpu_usage | NUMERIC | 5,2 | NULL | - | CPU使用率(%) |
| memory_usage | NUMERIC | 5,2 | NULL | - | 内存使用率(%) |
| disk_usage | NUMERIC | 5,2 | NULL | - | 磁盘使用率(%) |
| last_heartbeat | TIMESTAMPTZ | - | NULL | - | 最后心跳时间 |
| created_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 创建时间 |
| updated_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 更新时间 |
**索引设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_cluster_hostname (cluster_id, hostname)
| hostname | CHARACTER | - | NOT NULL | - | 节点主机名 |
| ip_address | INET | - | NOT NULL | - | 节点IP地址(INET, 兼容IPv4/IPv6) |
| status | CHARACTER | - | NOT NULL | 'unknown'::character | 节点健康状态(healthy/unhealthy/warning/unknown) |
| last_heartbeat | TIMESTAMP | - | NULL | - | 最后心跳时间 |
| created_at | TIMESTAMP | - | NOT NULL | now() | 创建时间 |
| updated_at | TIMESTAMP | - | NOT NULL | now() | 更新时间 |
| ssh_user | CHARACTER | - | NULL | - | |
| ssh_password | CHARACTER | - | NULL | - | |
**索引/约束设计:**
- PRIMARY KEY: (id)
- INDEX: idx_nodes_cluster_id (cluster_id)
- INDEX: idx_nodes_status (status)
- INDEX: idx_nodes_last_heartbeat (last_heartbeat)
- INDEX: idx_nodes_ip_address (ip_address)
- INDEX: idx_nodes_last_heartbeat (last_heartbeat)
- INDEX: idx_nodes_status (status)
- INDEX: uk_cluster_hostname (cluster_id, hostname)
- FOREIGN KEY: FK(cluster_id) -> public.clusters(id)
#### 2.1.3 系统日志表 (system_logs)
存储从Flume采集的原始日志数据
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | IDENTITY | 主键ID |
| log_id | VARCHAR | 32 | NOT NULL | - | 日志唯一标识 |
| fault_id | VARCHAR | 32 | NULL | - | 关联故障标识(无外键) |
| id | BIGINT | - | NOT NULL | - | (PK) 主键ID |
| log_id | CHARACTER | - | NOT NULL | - | 日志唯一标识 |
| fault_id | CHARACTER | - | NULL | - | 关联故障标识(无外键) |
| cluster_id | BIGINT | - | NULL | - | 关联集群ID |
| timestamp | TIMESTAMPTZ | - | NOT NULL | - | 日志时间戳 |
| host | VARCHAR | 100 | NOT NULL | - | 主机名 |
| service | VARCHAR | 50 | NOT NULL | - | 服务名 |
| log_level | VARCHAR | 10 | NOT NULL | - | 日志级别(DEBUG/INFO/WARN/ERROR/FATAL) |
| host | CHARACTER | - | NOT NULL | - | 主机名 |
| service | CHARACTER | - | NOT NULL | - | 服务名 |
| source | CHARACTER | - | NULL | - | 来源 |
| log_level | CHARACTER | - | NOT NULL | - | 日志级别(DEBUG/INFO/WARN/ERROR/FATAL) |
| message | TEXT | - | NOT NULL | - | 日志消息 |
| exception | TEXT | - | NULL | - | 异常堆栈 |
| raw_log | TEXT | - | NULL | - | 原始日志内容 |
| processed | BOOLEAN | - | NOT NULL | FALSE | 是否已处理 |
| created_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 创建时间 |
**索引设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_log_id (log_id)
- KEY idx_system_logs_fault_id (fault_id)
- KEY idx_system_logs_cluster_id (cluster_id)
- KEY idx_system_logs_timestamp (timestamp)
- KEY idx_system_logs_level (log_level)
- KEY idx_system_logs_processed (processed)
### 2.2 配置管理与用户表
| processed | BOOLEAN | - | NOT NULL | false | 是否已处理 |
| created_at | TIMESTAMP | - | NOT NULL | now() | 创建时间 |
**索引/约束设计:**
- PRIMARY KEY: (id)
- INDEX: idx_system_logs_cluster_id (cluster_id)
- INDEX: idx_system_logs_fault_id (fault_id)
- INDEX: idx_system_logs_level (log_level)
- INDEX: idx_system_logs_processed (processed)
- INDEX: idx_system_logs_timestamp ("timestamp")
- FOREIGN KEY: FK(cluster_id) -> public.clusters(id)
#### 2.2.0 角色表 (roles)
系统角色定义
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | IDENTITY | 主键ID |
| role_name | VARCHAR | 50 | NOT NULL | - | 角色名称 |
| role_key | VARCHAR | 50 | NOT NULL | - | 角色唯一标识 |
| description | VARCHAR | 255 | NULL | - | 角色描述 |
| is_system_role | BOOLEAN | - | NOT NULL | FALSE | 是否为系统内置角色 |
| created_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 创建时间 |
| updated_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 更新时间 |
| id | BIGINT | - | NOT NULL | - | (PK) 主键ID |
| role_name | CHARACTER | - | NOT NULL | - | 角色名称 |
| role_key | CHARACTER | - | NOT NULL | - | 角色唯一标识 |
| description | CHARACTER | - | NULL | - | 角色描述 |
| is_system_role | BOOLEAN | - | NOT NULL | false | 是否为系统内置角色 |
| created_at | TIMESTAMP | - | NOT NULL | now() | 创建时间 |
| updated_at | TIMESTAMP | - | NOT NULL | now() | 更新时间 |
**索引/约束设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_role_key (role_key)
- PRIMARY KEY: (id)
#### 2.2.1 权限表 (permissions)
系统权限定义
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | IDENTITY | 主键ID |
| permission_name | VARCHAR | 100 | NOT NULL | - | 权限名称 |
| permission_key | VARCHAR | 100 | NOT NULL | - | 权限唯一标识 |
| description | VARCHAR | 255 | NULL | - | 权限描述 |
| created_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 创建时间 |
| id | BIGINT | - | NOT NULL | - | (PK) 主键ID |
| permission_name | CHARACTER | - | NOT NULL | - | 权限名称 |
| permission_key | CHARACTER | - | NOT NULL | - | 权限唯一标识 |
| description | CHARACTER | - | NULL | - | 权限描述 |
| created_at | TIMESTAMP | - | NOT NULL | now() | 创建时间 |
**索引/约束设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_permission_key (permission_key)
- PRIMARY KEY: (id)
#### 2.2.2 角色-权限映射表 (role_permission_mapping)
多对多关系的中间表
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| role_id | BIGINT | - | NOT NULL | - | 角色ID |
| permission_id | BIGINT | - | NOT NULL | - | 权限ID |
| role_id | BIGINT | - | NOT NULL | - | (PK) 角色ID |
| permission_id | BIGINT | - | NOT NULL | - | (PK) 权限ID |
**索引/约束设计:**
- PRIMARY KEY (role_id, permission_id)
- 外键: `role_id → roles.id (CASCADE)`
- 外键: `permission_id → permissions.id (CASCADE)`
- PRIMARY KEY: (role_id, permission_id)
- FOREIGN KEY: FK(permission_id) -> public.permissions(id)
- FOREIGN KEY: FK(role_id) -> public.roles(id)
#### 2.2.1 集群信息表 (clusters)
存储用户管理的集群信息
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | IDENTITY | 主键ID |
| id | BIGINT | - | NOT NULL | - | (PK) 主键ID |
| uuid | UUID | - | NOT NULL | - | 集群唯一标识(UUID) |
| name | VARCHAR | 100 | NOT NULL | - | 集群名称 |
| type | VARCHAR | 50 | NOT NULL | - | 集群类型 |
| node_count | INT | - | NOT NULL | 0 | 集群节点数量 |
| health_status | VARCHAR | 20 | NOT NULL | 'unknown' | 集群健康状态(healthy/warning/error/unknown) |
| name | CHARACTER | - | NOT NULL | - | 集群名称 |
| type | CHARACTER | - | NOT NULL | - | 集群类型 |
| node_count | INTEGER | - | NOT NULL | 0 | 集群节点数量 |
| health_status | CHARACTER | - | NOT NULL | 'unknown'::character | 集群健康状态(healthy/warning/error/unknown) |
| description | TEXT | - | NULL | - | 集群描述 |
| config_info | JSONB | - | NULL | - | 集群配置信息(JSONB) |
| created_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 创建时间 |
| updated_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 更新时间 |
| created_at | TIMESTAMP | - | NOT NULL | now() | 创建时间 |
| updated_at | TIMESTAMP | - | NOT NULL | now() | 更新时间 |
| namenode_ip | INET | - | NULL | - | |
| namenode_psw | CHARACTER | - | NULL | - | |
| rm_ip | INET | - | NULL | - | |
| rm_psw | CHARACTER | - | NULL | - | |
**索引/约束设计:**
- PRIMARY KEY (id)
- UNIQUE (uuid)
- UNIQUE (name)
- CHECK: `health_status ∈ {healthy, warning, error, unknown}`
- PRIMARY KEY: (id)
#### 2.2.2 用户与集群映射表 (user_cluster_mapping)
管理用户和集群的多对多关系
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | IDENTITY | 主键ID |
| id | BIGINT | - | NOT NULL | - | (PK) 主键ID |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| cluster_id | BIGINT | - | NOT NULL | - | 集群ID |
| role_id | BIGINT | - | NOT NULL | - | 角色ID |
| created_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 创建时间 |
| created_at | TIMESTAMP | - | NOT NULL | now() | 创建时间 |
**索引/约束设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_user_cluster (user_id, cluster_id)
- 外键: `user_id → users.id (CASCADE)`
- 外键: `cluster_id → clusters.id (CASCADE)`
- 外键: `role_id → roles.id (CASCADE)`
- PRIMARY KEY: (id)
- FOREIGN KEY: FK(cluster_id) -> public.clusters(id)
- FOREIGN KEY: FK(role_id) -> public.roles(id)
- FOREIGN KEY: FK(user_id) -> public.users(id)
#### 2.2.3 应用统一配置表 (app_configurations)
统一管理系统配置、告警规则和通知设置
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | IDENTITY | 主键ID |
| config_type | VARCHAR | 20 | NOT NULL | - | 配置类型(system/alert_rule/notification/llm) |
| config_key | VARCHAR | 100 | NOT NULL | - | 配置键 |
| id | BIGINT | - | NOT NULL | - | (PK) 主键ID |
| config_type | CHARACTER | - | NOT NULL | - | 配置类型(system/alert_rule/notification/llm) |
| config_key | CHARACTER | - | NOT NULL | - | 配置键 |
| config_value | JSONB | - | NOT NULL | - | 配置值(JSONB) |
| description | VARCHAR | 500 | NULL | - | 配置描述 |
| is_enabled | BOOLEAN | - | NOT NULL | TRUE | 是否启用 |
| created_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 创建时间 |
| updated_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 更新时间 |
| description | CHARACTER | - | NULL | - | 配置描述 |
| is_enabled | BOOLEAN | - | NOT NULL | true | 是否启用 |
| created_at | TIMESTAMP | - | NOT NULL | now() | 创建时间 |
| updated_at | TIMESTAMP | - | NOT NULL | now() | 更新时间 |
**索引/约束设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_app_config (config_type, config_key)
- KEY idx_app_config_enabled (is_enabled)
- CHECK: `config_type ∈ {system, alert_rule, notification, llm}`
- PRIMARY KEY: (id)
- INDEX: idx_app_config_enabled (is_enabled)
#### 2.2.4 用户表 (users)
系统用户信息
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | IDENTITY | 主键ID |
| username | VARCHAR | 50 | NOT NULL | - | 用户名 |
| email | VARCHAR | 100 | NOT NULL | - | 邮箱 |
| password_hash | VARCHAR | 255 | NOT NULL | - | 密码哈希 |
| full_name | VARCHAR | 100 | NOT NULL | - | 姓名 |
| is_active | BOOLEAN | - | NOT NULL | TRUE | 是否激活 |
| last_login | TIMESTAMPTZ | - | NULL | - | 最后登录时间 |
| created_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 创建时间 |
| updated_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 更新时间 |
**索引设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_username (username)
- UNIQUE KEY uk_email (email)
| id | BIGINT | - | NOT NULL | - | (PK) 主键ID |
| username | CHARACTER | - | NOT NULL | - | 用户名 |
| email | CHARACTER | - | NOT NULL | - | 邮箱 |
| password_hash | CHARACTER | - | NOT NULL | - | 密码哈希 |
| full_name | CHARACTER | - | NOT NULL | - | 姓名 |
| is_active | BOOLEAN | - | NOT NULL | true | 是否激活 |
| last_login | TIMESTAMP | - | NULL | - | 最后登录时间 |
| created_at | TIMESTAMP | - | NOT NULL | now() | 创建时间 |
| updated_at | TIMESTAMP | - | NOT NULL | now() | 更新时间 |
**索引/约束设计:**
- PRIMARY KEY: (id)
#### 2.2.5 用户-角色映射表 (user_role_mapping)
用户与角色的多对多关系
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| role_id | BIGINT | - | NOT NULL | - | 角色ID |
| user_id | BIGINT | - | NOT NULL | - | (PK) 用户ID |
| role_id | BIGINT | - | NOT NULL | - | (PK) 角色ID |
**索引/约束设计:**
- PRIMARY KEY (user_id, role_id)
- 外键: `user_id → users.id (CASCADE)`
- 外键: `role_id → roles.id (CASCADE)`
- PRIMARY KEY: (user_id, role_id)
- FOREIGN KEY: FK(role_id) -> public.roles(id)
- FOREIGN KEY: FK(user_id) -> public.users(id)
#### 2.2.6 操作审计表 (audit_logs)
记录用户操作审计日志
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | IDENTITY | 主键ID |
| id | BIGINT | - | NOT NULL | - | (PK) 主键ID |
| user_id | BIGINT | - | NULL | - | 用户ID |
| cluster_id | BIGINT | - | NULL | - | 集群ID |
| role_id | BIGINT | - | NULL | - | 角色ID |
| username | VARCHAR | 50 | NOT NULL | - | 用户名 |
| action | VARCHAR | 100 | NOT NULL | - | 操作动作 |
| resource_type | VARCHAR | 50 | NOT NULL | - | 资源类型 |
| resource_id | VARCHAR | 100 | NULL | - | 资源ID |
| ip_address | INET | - | NOT NULL | - | 请求来源IP(IPv4/IPv6) |
| username | CHARACTER | - | NOT NULL | - | 用户名 |
| action | CHARACTER | - | NOT NULL | - | 操作动作 |
| resource_type | CHARACTER | - | NOT NULL | - | 资源类型 |
| resource_id | CHARACTER | - | NULL | - | 资源ID |
| ip_address | INET | - | NOT NULL | - | 请求来源IP(INET, 兼容IPv4/IPv6) |
| request_data | JSONB | - | NULL | - | 请求数据(JSONB) |
| response_status | INT | - | NULL | - | 响应状态码 |
| created_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 创建时间 |
**索引设计:**
- PRIMARY KEY (id)
- KEY idx_audit_logs_user_id (user_id)
- KEY idx_audit_logs_cluster_id (cluster_id)
- KEY idx_audit_logs_role_id (role_id)
- KEY idx_audit_logs_action (action)
- KEY idx_audit_logs_created_at (created_at)
### 2.3 扩展表
| response_status | INTEGER | - | NULL | - | 响应状态码 |
| created_at | TIMESTAMP | - | NOT NULL | now() | 创建时间 |
**索引/约束设计:**
- PRIMARY KEY: (id)
- INDEX: idx_audit_logs_action (action)
- INDEX: idx_audit_logs_cluster_id (cluster_id)
- INDEX: idx_audit_logs_created_at (created_at)
- INDEX: idx_audit_logs_role_id (role_id)
- INDEX: idx_audit_logs_user_id (user_id)
- FOREIGN KEY: FK(cluster_id) -> public.clusters(id)
- FOREIGN KEY: FK(role_id) -> public.roles(id)
- FOREIGN KEY: FK(user_id) -> public.users(id)
#### 2.3.1 修复脚本模板表 (repair_templates)
存储用于自动修复的脚本模板
| 字段名 | 数据类型 | 长度 | 是否为空 | 默认值 | 说明 |
| :----- | :------- | :--- | :------ | :----- | :--- |
| id | BIGINT | - | NOT NULL | IDENTITY | 主键ID |
| template_name | VARCHAR | 100 | NOT NULL | - | 模板名称 |
| fault_type | VARCHAR | 50 | NOT NULL | - | 适用故障类型 |
| id | BIGINT | - | NOT NULL | - | (PK) 主键ID |
| template_name | CHARACTER | - | NOT NULL | - | 模板名称 |
| fault_type | CHARACTER | - | NOT NULL | - | 适用故障类型 |
| script_content | TEXT | - | NOT NULL | - | 脚本内容 |
| risk_level | VARCHAR | 20 | NOT NULL | 'medium' | 风险级别(low/medium/high) |
| risk_level | CHARACTER | - | NOT NULL | 'medium'::character | 风险级别(low/medium/high) |
| description | TEXT | - | NULL | - | 模板描述 |
| parameters | JSONB | - | NULL | - | 参数定义 |
| created_by | VARCHAR | 50 | NULL | - | 创建人 |
| created_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 创建时间 |
| updated_at | TIMESTAMPTZ | - | NOT NULL | NOW() | 更新时间 |
**索引设计:**
- PRIMARY KEY (id)
- UNIQUE KEY uk_template_name (template_name)
- KEY idx_fault_type (fault_type)
## 3. 表关系设计
### 3.1 外键关系
```sql
-- system_logs.cluster_id → clusters.id (SET NULL, CASCADE)
-- nodes.cluster_id → clusters.id (CASCADE, CASCADE)
-- user_cluster_mapping.user_id → users.id (CASCADE, CASCADE)
-- user_cluster_mapping.cluster_id → clusters.id (CASCADE, CASCADE)
-- user_cluster_mapping.role_id → roles.id (CASCADE, CASCADE)
-- user_role_mapping.user_id → users.id (CASCADE, CASCADE)
-- user_role_mapping.role_id → roles.id (CASCADE, CASCADE)
-- role_permission_mapping.role_id → roles.id (CASCADE, CASCADE)
-- role_permission_mapping.permission_id → permissions.id (CASCADE, CASCADE)
-- audit_logs.user_id → users.id (SET NULL, CASCADE)
-- audit_logs.cluster_id → clusters.id (SET NULL, CASCADE)
-- audit_logs.role_id → roles.id (SET NULL, CASCADE)
```
### 3.2 关系说明
- **users****clusters**: 多对多,通过 `user_cluster_mapping(user_id, cluster_id, role_id)` 连接。
- **users****roles**: 多对多,通过 `user_role_mapping(user_id, role_id)` 连接。
- **roles****permissions**: 多对多,通过 `role_permission_mapping(role_id, permission_id)` 连接。
- **clusters****nodes**: 一对多,一个集群包含多个节点。
- **users****audit_logs**: 一对多,一个用户可能有多条操作审计记录。
- **clusters****audit_logs**: 一对多(可选),一个集群上的操作会产生审计日志。
- **roles****audit_logs**: 一对多(可选),审计记录可附带当时的角色。
- **app_configurations**: 独立表,统一管理所有配置。
- **repair_templates**: 独立表,存储修复脚本模板。
## 4. 数据库初始化脚本
### 4.1 执行脚本
- 请直接在目标 PostgreSQL 数据库中执行 `doc/project/数据库建表脚本_postgres.sql`,该脚本包含所有表、索引、约束与注释。
## 5. 性能优化建议
### 5.1 分区策略
- **system_logs**: 按时间分区,每月一个分区。
- **audit_logs**: 按时间分区,每季度一个分区。
### 5.2 索引优化
- 为高频查询字段创建复合索引。
- 定期分析索引使用情况,删除无用索引。
- 对大表考虑使用分区索引。
### 5.3 数据归档
- `system_logs` 表数据保留3个月超期数据归档到历史表。
- `audit_logs` 表数据保留1年。
- 定期清理临时数据和过期缓存。
## 6. 备份与恢复策略
### 6.1 备份策略
- 每日全量备份。
- 每小时增量备份。
- 重要操作前手动备份。
### 6.2 恢复测试
- 每月进行备份恢复测试。
- 制定灾难恢复预案。
- 建立数据恢复SOP。
## 7. 监控与维护
### 7.1 性能监控
- 监控慢查询日志。
- 跟踪表空间使用情况。
- 监控连接数和锁等待。
### 7.2 定期维护
- 每周执行表优化。
- 定期更新表统计信息。
- 监控磁盘空间使用情况。
| parameters | JSONB | - | NULL | - | 模板参数定义(JSONB) |
| created_by | CHARACTER | - | NULL | - | 创建人 |
| created_at | TIMESTAMP | - | NOT NULL | now() | 创建时间 |
| updated_at | TIMESTAMP | - | NOT NULL | now() | 更新时间 |
**索引/约束设计:**
- PRIMARY KEY: (id)
- INDEX: idx_repair_templates_fault_type (fault_type)

Loading…
Cancel
Save