207 lines
9.5 KiB
SQL
207 lines
9.5 KiB
SQL
-- Muse Knowledge 模块初始 Schema(PostgreSQL 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();
|