muse-agent-example/db/ddl/V5__init_knowledge_schema.sql

207 lines
9.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.

-- Muse Knowledge 模块初始 SchemaPostgreSQL 16
-- 影响范围:用户/全局知识库、资料版本、实体关系、草稿、作品绑定。
CREATE TABLE muse_knowledge_base (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(200) NOT NULL,
description VARCHAR(500),
kb_type VARCHAR(20) NOT NULL DEFAULT 'user',
owner_user_id BIGINT,
source_market_asset_id BIGINT,
status VARCHAR(20) NOT NULL DEFAULT 'active',
active_version INT NOT NULL DEFAULT 1,
visibility_policy JSONB,
license_snapshot_id BIGINT,
command_id VARCHAR(120),
revision INT NOT NULL DEFAULT 1,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0
);
CREATE INDEX idx_muse_kb_owner_status ON muse_knowledge_base(tenant_id, owner_user_id, status);
CREATE INDEX idx_muse_kb_type ON muse_knowledge_base(tenant_id, kb_type);
CREATE UNIQUE INDEX uk_muse_kb_command ON muse_knowledge_base(tenant_id, command_id) WHERE command_id IS NOT NULL;
CREATE TRIGGER trg_muse_knowledge_base_updated_at BEFORE UPDATE ON muse_knowledge_base FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_knowledge_document (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
kb_id BIGINT NOT NULL,
title VARCHAR(200) NOT NULL,
file_name VARCHAR(500),
file_size BIGINT,
mime_type VARCHAR(100),
file_hash VARCHAR(100),
storage_ref VARCHAR(500),
scan_status VARCHAR(20) NOT NULL DEFAULT 'pending',
parse_status VARCHAR(20),
index_status VARCHAR(20),
retention_policy JSONB,
author VARCHAR(200),
source_url VARCHAR(1000),
tags JSONB,
command_id VARCHAR(120),
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0
);
CREATE INDEX idx_muse_kb_doc_kb ON muse_knowledge_document(tenant_id, kb_id, scan_status);
CREATE INDEX idx_muse_kb_doc_hash ON muse_knowledge_document(tenant_id, file_hash);
CREATE UNIQUE INDEX uk_muse_kb_doc_command ON muse_knowledge_document(tenant_id, command_id) WHERE command_id IS NOT NULL;
CREATE TRIGGER trg_muse_knowledge_document_updated_at BEFORE UPDATE ON muse_knowledge_document FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_knowledge_document_version (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
document_id BIGINT NOT NULL,
version INT NOT NULL,
file_hash VARCHAR(100) NOT NULL,
storage_ref VARCHAR(500),
content_hash VARCHAR(100),
source_snapshot_id BIGINT,
scan_status VARCHAR(20) NOT NULL DEFAULT 'pending',
parse_status VARCHAR(20) NOT NULL DEFAULT 'pending',
processing_status VARCHAR(20) NOT NULL DEFAULT 'pending',
previous_version_id BIGINT,
change_summary JSONB,
change_reason VARCHAR(500),
command_id VARCHAR(120),
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_kb_doc_ver UNIQUE (tenant_id, document_id, version)
);
CREATE INDEX idx_muse_kb_doc_ver_doc ON muse_knowledge_document_version(tenant_id, document_id);
CREATE TRIGGER trg_muse_kb_doc_ver_updated_at BEFORE UPDATE ON muse_knowledge_document_version FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_knowledge_entity (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
work_id BIGINT NOT NULL,
kb_id BIGINT,
entity_type VARCHAR(50) NOT NULL,
normalized_name VARCHAR(200) NOT NULL,
scope VARCHAR(50) NOT NULL DEFAULT 'global',
description TEXT,
attributes JSONB,
source_snapshot_id BIGINT,
authorization_snapshot_id BIGINT,
source_status VARCHAR(30) NOT NULL DEFAULT 'active',
source_action_policy VARCHAR(30) NOT NULL DEFAULT 'allowed',
source_event_version INT,
lineage_payload JSONB,
status VARCHAR(20) NOT NULL DEFAULT 'active',
confidence DOUBLE PRECISION DEFAULT 1.0,
source_type VARCHAR(50),
source_id BIGINT,
command_id VARCHAR(120),
revision INT NOT NULL DEFAULT 1,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_knowledge_entity UNIQUE (tenant_id, work_id, entity_type, normalized_name, scope)
);
CREATE INDEX idx_muse_knowledge_entity_work_type ON muse_knowledge_entity(tenant_id, work_id, entity_type);
CREATE INDEX idx_muse_knowledge_entity_kb ON muse_knowledge_entity(tenant_id, kb_id);
CREATE UNIQUE INDEX uk_muse_knowledge_entity_command ON muse_knowledge_entity(tenant_id, command_id) WHERE command_id IS NOT NULL;
CREATE TRIGGER trg_muse_knowledge_entity_updated_at BEFORE UPDATE ON muse_knowledge_entity FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_knowledge_relation (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
work_id BIGINT NOT NULL,
source_entity_id BIGINT NOT NULL,
target_entity_id BIGINT NOT NULL,
relation_type VARCHAR(50) NOT NULL,
description VARCHAR(500),
attributes JSONB,
source_status VARCHAR(30) NOT NULL DEFAULT 'active',
source_action_policy VARCHAR(30) NOT NULL DEFAULT 'allowed',
command_id VARCHAR(120),
revision INT NOT NULL DEFAULT 1,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0
);
CREATE INDEX idx_muse_knowledge_rel_work ON muse_knowledge_relation(tenant_id, work_id);
CREATE INDEX idx_muse_knowledge_rel_src ON muse_knowledge_relation(tenant_id, source_entity_id);
CREATE INDEX idx_muse_knowledge_rel_tgt ON muse_knowledge_relation(tenant_id, target_entity_id);
CREATE UNIQUE INDEX uk_muse_knowledge_rel_command ON muse_knowledge_relation(tenant_id, command_id) WHERE command_id IS NOT NULL;
CREATE TRIGGER trg_muse_knowledge_relation_updated_at BEFORE UPDATE ON muse_knowledge_relation FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_knowledge_draft (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
work_id BIGINT NOT NULL,
entity_id BIGINT,
draft_type VARCHAR(30) NOT NULL DEFAULT 'entity',
target_object_id BIGINT,
proposed_changes JSONB,
draft_payload JSONB,
current_canonical_snapshot JSONB,
source_snapshot_id BIGINT,
authorization_snapshot_id BIGINT,
risk_marker_snapshot JSONB,
source_status VARCHAR(30),
source_action_policy VARCHAR(30),
status VARCHAR(20) NOT NULL DEFAULT 'pending',
confidence DOUBLE PRECISION,
source_type VARCHAR(50),
source_id BIGINT,
command_id VARCHAR(120),
revision INT NOT NULL DEFAULT 1,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0
);
CREATE INDEX idx_muse_knowledge_draft_work_status ON muse_knowledge_draft(tenant_id, work_id, status, create_time);
CREATE INDEX idx_muse_knowledge_draft_entity ON muse_knowledge_draft(tenant_id, entity_id);
CREATE UNIQUE INDEX uk_muse_knowledge_draft_command ON muse_knowledge_draft(tenant_id, command_id) WHERE command_id IS NOT NULL;
CREATE TRIGGER trg_muse_knowledge_draft_updated_at BEFORE UPDATE ON muse_knowledge_draft FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_knowledge_binding (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
work_id BIGINT NOT NULL,
kb_id BIGINT NOT NULL,
binding_type VARCHAR(50) NOT NULL DEFAULT 'read',
binding_scope VARCHAR(50) NOT NULL DEFAULT 'read',
binding_status VARCHAR(30) NOT NULL DEFAULT 'active',
source_snapshot_id BIGINT,
authorization_snapshot_id BIGINT,
source_version INT,
target_version INT,
command_id VARCHAR(120),
revision INT NOT NULL DEFAULT 1,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_knowledge_binding_work_kb UNIQUE (tenant_id, work_id, kb_id)
);
CREATE INDEX idx_muse_knowledge_binding_work ON muse_knowledge_binding(tenant_id, work_id);
CREATE INDEX idx_muse_knowledge_binding_kb ON muse_knowledge_binding(tenant_id, kb_id);
CREATE UNIQUE INDEX uk_muse_knowledge_binding_command ON muse_knowledge_binding(tenant_id, command_id) WHERE command_id IS NOT NULL;
CREATE TRIGGER trg_muse_knowledge_binding_updated_at BEFORE UPDATE ON muse_knowledge_binding FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();