-- AI 知识库（RAG）建表脚本（MySQL）
-- 说明：本项目使用 MyBatis-Plus 默认命名规则（AiKbDocument -> ai_kb_document）。

CREATE TABLE IF NOT EXISTS `ai_kb_document` (
  `document_id` INT NOT NULL AUTO_INCREMENT COMMENT '文档ID',
  `title` VARCHAR(255) NULL COMMENT '标题',
  `source_type` VARCHAR(32) NULL COMMENT '来源类型：upload/cms',
  `source_id` INT NULL COMMENT '来源ID（如 cms.article_id）',
  `source_ref` VARCHAR(255) NULL COMMENT '来源引用（如文件名、文章 code）',
  `content_hash` CHAR(64) NULL COMMENT '内容hash(SHA-256)，用于增量同步',
  `status` TINYINT NULL DEFAULT 0 COMMENT '状态',
  `deleted` TINYINT NULL DEFAULT 0 COMMENT '逻辑删除：0否1是',
  `tenant_id` INT NOT NULL COMMENT '租户ID',
  `update_time` DATETIME NULL COMMENT '更新时间',
  `create_time` DATETIME NULL COMMENT '创建时间',
  PRIMARY KEY (`document_id`),
  KEY `idx_ai_kb_document_tenant` (`tenant_id`),
  KEY `idx_ai_kb_document_source` (`tenant_id`, `source_type`, `source_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI 知识库文档';

CREATE TABLE IF NOT EXISTS `ai_kb_chunk` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `document_id` INT NOT NULL COMMENT '文档ID',
  `chunk_id` VARCHAR(64) NOT NULL COMMENT 'chunk 唯一ID（用于引用）',
  `chunk_index` INT NULL COMMENT 'chunk 序号',
  `title` VARCHAR(255) NULL COMMENT '标题（冗余，便于展示）',
  `content` LONGTEXT NULL COMMENT 'chunk 文本',
  `content_hash` CHAR(64) NULL COMMENT 'chunk 内容hash',
  `embedding` LONGTEXT NULL COMMENT 'embedding(JSON数组)',
  `embedding_norm` DOUBLE NULL COMMENT 'embedding L2 范数',
  `deleted` TINYINT NULL DEFAULT 0 COMMENT '逻辑删除：0否1是',
  `tenant_id` INT NOT NULL COMMENT '租户ID',
  `create_time` DATETIME NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_ai_kb_chunk_chunk_id` (`chunk_id`),
  KEY `idx_ai_kb_chunk_tenant` (`tenant_id`),
  KEY `idx_ai_kb_chunk_document` (`document_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI 知识库 chunk';

