PMFlow/scripts/pmflow_schema.sql

215 lines
7.5 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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)
);