数据库模式
Open ACE 同时支持 SQLite(单机)和 PostgreSQL(生产环境)。模式包含 44 张表 + 1 个物化视图(完整列表见 schema-postgres.sql,以下为常用表)。
参考文件:schema/schema-postgres.sql
用户与认证
users
核心用户表,支持基于角色的访问控制。
| 列名 | 类型 | 说明 |
|---|---|---|
| id | integer PK | 自增 |
| username | varchar | UNIQUE, NOT NULL |
| password_hash | varchar | bcrypt(12 轮) |
| varchar | ||
| is_admin | boolean | DEFAULT false |
| is_active | boolean | DEFAULT true |
| role | varchar | CHECK IN ('admin','manager','user') |
| daily_token_quota | integer | |
| monthly_token_quota | integer | |
| daily_request_quota | integer | |
| monthly_request_quota | integer | |
| tenant_id | integer | FK → tenants(id) ON DELETE SET NULL |
| must_change_password | boolean | DEFAULT false |
| system_account | text | 多用户模式下的 OS 用户名 |
| deleted_at | timestamp | 软删除 |
| avatar_url | varchar(500) | 头像 URL |
索引:idx_users_active, idx_users_deleted, idx_users_email, idx_users_role, idx_users_tenant
sessions
基于 token 的认证会话。
| 列名 | 类型 | 说明 |
|---|---|---|
| id | integer PK | |
| token | varchar | UNIQUE, NOT NULL |
| user_id | integer | FK → users(id) ON DELETE CASCADE |
| created_at | timestamp | |
| expires_at | timestamp | NOT NULL |
| is_active | boolean | DEFAULT true |
索引:idx_sessions_active, idx_sessions_expires, idx_sessions_token, idx_sessions_user_id
web_user_auth_sessions
Web UI 认证会话。
| 列名 | 类型 | 说明 |
|---|---|---|
| id | integer PK | |
| user_id | integer | FK → users(id) |
| session_token | text | UNIQUE |
| created_at | timestamp | |
| expires_at | timestamp |
user_tool_accounts
将系统账户映射到不同 AI 工具的平台用户。
| 列名 | 类型 | 说明 |
|---|---|---|
| id | integer PK | |
| user_id | integer | FK → users(id) ON DELETE CASCADE |
| tool_account | varchar(255) | UNIQUE |
| tool_type | varchar(50) | |
| description | varchar(255) |
user_daily_stats
按用户预聚合的每日使用量,用于优化查询。
| 列名 | 类型 | 说明 |
|---|---|---|
| id | integer PK | |
| user_id | integer | FK → users(id) ON DELETE CASCADE |
| date | date | |
| requests | integer | DEFAULT 0 |
| tokens | integer | DEFAULT 0 |
| input_tokens | integer | DEFAULT 0 |
| output_tokens | integer | DEFAULT 0 |
| cache_tokens | integer | DEFAULT 0 |
唯一约束:(user_id, date)
消息与会话
daily_messages
核心消息表 — 所有 AI 交互的主数据存储。
| 列名 | 类型 | 说明 |
|---|---|---|
| id | integer PK | |
| date | varchar | NOT NULL |
| tool_name | varchar | NOT NULL |
| host_name | varchar | DEFAULT 'localhost' |
| message_id | varchar | NOT NULL |
| parent_id | varchar | |
| role | varchar | NOT NULL (user/assistant/system) |
| content | text | |
| full_entry | text | |
| tokens_used | integer | DEFAULT 0 |
| input_tokens | integer | DEFAULT 0 |
| output_tokens | integer | DEFAULT 0 |
| model | varchar | |
| timestamp | timestamp | |
| sender_id | varchar | |
| sender_name | varchar | |
| message_source | varchar | |
| conversation_id | varchar | |
| agent_session_id | varchar | |
| user_id | integer | |
| project_path | text |
唯一约束:(date, tool_name, message_id, host_name)。18 个索引覆盖各种查询模式。
agent_sessions
AI 代理会话追踪。
| 列名 | 类型 | 说明 |
|---|---|---|
| id | integer PK | |
| session_id | text | UNIQUE |
| tenant_id | integer | DEFAULT 1;用于按租户限定会话查找和写入边界 |
| session_type | text | DEFAULT 'chat' |
| title | text | |
| tool_name | text | NOT NULL |
| host_name | text | DEFAULT 'localhost' |
| user_id | integer | |
| status | text | DEFAULT 'active' |
| total_tokens | integer | DEFAULT 0 |
| total_input_tokens | integer | DEFAULT 0 |
| total_output_tokens | integer | DEFAULT 0 |
| message_count | integer | DEFAULT 0 |
| model | text | |
| project_id | integer | |
| project_path | varchar(500) | |
| context | text | 会话上下文 |
| settings | text | 会话设置 |
| tags | text | 标签 |
| created_at | timestamp | 创建时间 |
| updated_at | timestamp | 更新时间 |
| completed_at | timestamp | 完成时间 |
| expires_at | timestamp | 过期时间 |
| request_count | integer | DEFAULT 0,请求计数 |
| workspace_type | text | DEFAULT 'local',工作区类型 |
| remote_machine_id | text | 关联远程机器 ID |
| paused_at | timestamp | 暂停时间 |
session_messages
代理会话中的消息。
| 列名 | 类型 | 说明 |
|---|---|---|
| id | integer PK | |
| session_id | text | FK → agent_sessions(session_id) |
| tenant_id | integer | DEFAULT 1;用于按租户限定消息查找 |
| role | text | NOT NULL |
| content | text | |
| tokens_used | integer | DEFAULT 0 |
| model | text | |
| timestamp | timestamp | |
| metadata | text |
会话索引包括 idx_agent_sessions_tenant_user、idx_agent_sessions_tenant_updated、idx_session_messages_tenant_session 和 idx_session_messages_tenant_session_timestamp。
统计
daily_stats
按工具/主机/发送者聚合的每日统计。
| 列名 | 类型 | 说明 |
|---|---|---|
| date | varchar(10) | NOT NULL |
| tool_name | varchar(50) | NOT NULL |
| host_name | varchar(100) | DEFAULT 'localhost' |
| sender_name | varchar(100) | |
| total_tokens | bigint | NOT NULL |
| total_input_tokens | bigint | NOT NULL |
| total_output_tokens | bigint | NOT NULL |
| message_count | integer | NOT NULL |
| project_id | integer | |
| project_path | varchar(500) |
唯一约束:(date, tool_name, host_name, sender_name)