215 lines
7.5 KiB
SQL
215 lines
7.5 KiB
SQL
-- PMFlow 完整数据库 Schema
|
||
-- 适用于 PostgreSQL,可作为独立初始化脚本或参考
|
||
-- 注意:若与现有库(UUID 主键等)并存,需调整表名或迁移策略
|
||
|
||
-- 1. 用户与租户核心表
|
||
CREATE TABLE IF NOT EXISTS tenants (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
name VARCHAR(255) NOT NULL,
|
||
domain VARCHAR(255),
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS users (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
username VARCHAR(100) NOT NULL UNIQUE,
|
||
email VARCHAR(255) NOT NULL UNIQUE,
|
||
password_hash VARCHAR(255) NOT NULL,
|
||
role VARCHAR(50) NOT NULL,
|
||
avatar_url VARCHAR(500),
|
||
bio TEXT,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (tenant_id) REFERENCES tenants(id)
|
||
);
|
||
|
||
-- 2. 人员能力图谱核心表(AI智能分配核心)
|
||
CREATE TABLE IF NOT EXISTS skill_tags (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
name VARCHAR(255) NOT NULL,
|
||
category VARCHAR(100) NOT NULL,
|
||
is_system BOOLEAN NOT NULL DEFAULT FALSE,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
||
UNIQUE(tenant_id, name)
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS user_skill_bindings (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
user_id BIGINT NOT NULL,
|
||
skill_tag_id BIGINT NOT NULL,
|
||
proficiency_level VARCHAR(50) NOT NULL,
|
||
last_used_at TIMESTAMP,
|
||
quality_score DECIMAL(3,1) NOT NULL DEFAULT 0.0,
|
||
efficiency_score DECIMAL(3,1) NOT NULL DEFAULT 0.0,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
||
FOREIGN KEY (user_id) REFERENCES users(id),
|
||
FOREIGN KEY (skill_tag_id) REFERENCES skill_tags(id),
|
||
UNIQUE(tenant_id, user_id, skill_tag_id)
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS user_workloads (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
user_id BIGINT NOT NULL,
|
||
current_assigned_hours DECIMAL(5,2) NOT NULL DEFAULT 0.0,
|
||
max_available_hours_per_week DECIMAL(5,2) NOT NULL DEFAULT 40.0,
|
||
workload_ratio DECIMAL(4,2) NOT NULL DEFAULT 0.0,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
||
FOREIGN KEY (user_id) REFERENCES users(id),
|
||
UNIQUE(tenant_id, user_id)
|
||
);
|
||
|
||
-- 3. SSTC 唯一事实链路核心表(系统地基)
|
||
CREATE TABLE IF NOT EXISTS truth_nodes (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
node_type VARCHAR(50) NOT NULL,
|
||
parent_id BIGINT,
|
||
project_id BIGINT,
|
||
created_by BIGINT NOT NULL,
|
||
title VARCHAR(500) NOT NULL,
|
||
content JSONB NOT NULL,
|
||
version INT NOT NULL DEFAULT 1,
|
||
status VARCHAR(50) NOT NULL,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
||
FOREIGN KEY (parent_id) REFERENCES truth_nodes(id),
|
||
FOREIGN KEY (created_by) REFERENCES users(id)
|
||
);
|
||
|
||
-- 4. 项目与任务表
|
||
CREATE TABLE IF NOT EXISTS projects (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
name VARCHAR(255) NOT NULL,
|
||
description TEXT,
|
||
owner_id BIGINT NOT NULL,
|
||
status VARCHAR(50) NOT NULL,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
||
FOREIGN KEY (owner_id) REFERENCES users(id)
|
||
);
|
||
|
||
-- project_id 在 truth_nodes 中暂不加 FK,因 projects 后创建
|
||
CREATE TABLE IF NOT EXISTS tasks (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
truth_node_id BIGINT NOT NULL,
|
||
project_id BIGINT NOT NULL,
|
||
assignee_id BIGINT,
|
||
ai_recommended_assignees JSONB,
|
||
title VARCHAR(500) NOT NULL,
|
||
description TEXT,
|
||
required_skill_tag_ids BIGINT[] NOT NULL,
|
||
status VARCHAR(50) NOT NULL,
|
||
priority VARCHAR(50) NOT NULL,
|
||
estimated_hours DECIMAL(5,2),
|
||
actual_hours DECIMAL(5,2),
|
||
quality_score DECIMAL(3,1),
|
||
due_date TIMESTAMP,
|
||
completed_at TIMESTAMP,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
||
FOREIGN KEY (truth_node_id) REFERENCES truth_nodes(id),
|
||
FOREIGN KEY (project_id) REFERENCES projects(id),
|
||
FOREIGN KEY (assignee_id) REFERENCES users(id)
|
||
);
|
||
|
||
-- 5. 认知对齐核心表
|
||
CREATE TABLE IF NOT EXISTS alignment_records (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
truth_node_id BIGINT NOT NULL,
|
||
user_id BIGINT NOT NULL,
|
||
alignment_score INT NOT NULL DEFAULT 0,
|
||
is_confirmed BOOLEAN NOT NULL DEFAULT FALSE,
|
||
comments TEXT,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
||
FOREIGN KEY (truth_node_id) REFERENCES truth_nodes(id),
|
||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS cognitive_conflicts (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
truth_node_id BIGINT NOT NULL,
|
||
conflict_type VARCHAR(100) NOT NULL,
|
||
description TEXT NOT NULL,
|
||
involved_user_ids BIGINT[] NOT NULL,
|
||
status VARCHAR(50) NOT NULL,
|
||
resolved_at TIMESTAMP,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
||
FOREIGN KEY (truth_node_id) REFERENCES truth_nodes(id)
|
||
);
|
||
|
||
-- 6. AI开发专属表
|
||
CREATE TABLE IF NOT EXISTS model_versions (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
name VARCHAR(255) NOT NULL,
|
||
provider VARCHAR(100) NOT NULL,
|
||
version VARCHAR(100) NOT NULL,
|
||
capability_boundaries JSONB NOT NULL,
|
||
cost_per_1k_tokens DECIMAL(10,6),
|
||
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (tenant_id) REFERENCES tenants(id)
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS model_requirement_bindings (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
truth_node_id BIGINT NOT NULL,
|
||
model_version_id BIGINT NOT NULL,
|
||
estimated_cost DECIMAL(10,2),
|
||
compatibility_score INT NOT NULL,
|
||
risk_notes TEXT,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
||
FOREIGN KEY (truth_node_id) REFERENCES truth_nodes(id),
|
||
FOREIGN KEY (model_version_id) REFERENCES model_versions(id)
|
||
);
|
||
|
||
-- 7. 集成与日志表
|
||
CREATE TABLE IF NOT EXISTS integrations (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
type VARCHAR(100) NOT NULL,
|
||
config JSONB NOT NULL,
|
||
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (tenant_id) REFERENCES tenants(id)
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS ai_call_logs (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
user_id BIGINT,
|
||
function_name VARCHAR(255) NOT NULL,
|
||
prompt TEXT NOT NULL,
|
||
response TEXT,
|
||
tokens_used INT,
|
||
cost DECIMAL(10,6),
|
||
status VARCHAR(50) NOT NULL,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||
);
|