WangDL 1e7e4268ab
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 57s
feat: 知识库新表 migration SQL
2026-05-19 22:14:55 +08:00

172 lines
8.1 KiB
SQL

-- AlterTable: UploadedFile
ALTER TABLE `UploadedFile` ADD COLUMN `sha256` VARCHAR(64) NULL,
ADD COLUMN `purpose` VARCHAR(32) NULL;
CREATE INDEX `UploadedFile_sha256_idx` ON `UploadedFile`(`sha256`);
-- AlterTable: DocumentImport
ALTER TABLE `DocumentImport` ADD COLUMN `sourceId` VARCHAR(191) NULL,
ADD COLUMN `step` VARCHAR(32) NULL,
ADD COLUMN `workerId` VARCHAR(255) NULL,
ADD COLUMN `retryCount` INT NOT NULL DEFAULT 0,
ADD COLUMN `maxRetries` INT NOT NULL DEFAULT 3,
ADD COLUMN `heartbeatAt` DATETIME(3) NULL,
ADD COLUMN `errorCode` VARCHAR(32) NULL,
MODIFY `status` VARCHAR(32) NOT NULL DEFAULT 'QUEUED';
CREATE INDEX `DocumentImport_sourceId_idx` ON `DocumentImport`(`sourceId`);
CREATE INDEX `DocumentImport_workerId_idx` ON `DocumentImport`(`workerId`);
-- AlterTable: KnowledgeItem
ALTER TABLE `KnowledgeItem` ADD COLUMN `sourceDeleted` BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN `sourceTitleSnapshot` VARCHAR(255) NULL,
ADD COLUMN `sourceSnippetSnapshot` TEXT NULL;
-- CreateTable: KnowledgeSource
CREATE TABLE `KnowledgeSource` (
`id` VARCHAR(191) NOT NULL,
`userId` VARCHAR(191) NOT NULL,
`knowledgeBaseId` VARCHAR(191) NOT NULL,
`fileId` VARCHAR(191) NULL,
`type` VARCHAR(32) NOT NULL DEFAULT 'file',
`title` VARCHAR(255) NULL,
`originalFilename` VARCHAR(255) NULL,
`mimeType` VARCHAR(100) NULL,
`sizeBytes` BIGINT NOT NULL DEFAULT 0,
`textLength` INT NOT NULL DEFAULT 0,
`parseStatus` VARCHAR(32) NOT NULL DEFAULT 'pending',
`indexStatus` VARCHAR(32) NOT NULL DEFAULT 'pending',
`learningStatus` VARCHAR(32) NOT NULL DEFAULT 'pending',
`parsedObjectKey` VARCHAR(500) NULL,
`metadataObjectKey` VARCHAR(500) NULL,
`originalObjectKey` VARCHAR(500) NULL,
`version` INT NOT NULL DEFAULT 1,
`parentSourceId` VARCHAR(191) NULL,
`replacedBySourceId` VARCHAR(191) NULL,
`errorCode` VARCHAR(32) NULL,
`errorMessage` TEXT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
`deletedAt` DATETIME(3) NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE INDEX `KnowledgeSource_userId_idx` ON `KnowledgeSource`(`userId`);
CREATE INDEX `KnowledgeSource_knowledgeBaseId_idx` ON `KnowledgeSource`(`knowledgeBaseId`);
CREATE INDEX `KnowledgeSource_fileId_idx` ON `KnowledgeSource`(`fileId`);
CREATE INDEX `KnowledgeSource_parseStatus_idx` ON `KnowledgeSource`(`parseStatus`);
CREATE INDEX `KnowledgeSource_indexStatus_idx` ON `KnowledgeSource`(`indexStatus`);
-- CreateTable: KnowledgeChunk
CREATE TABLE `KnowledgeChunk` (
`id` VARCHAR(191) NOT NULL,
`userId` VARCHAR(191) NOT NULL,
`knowledgeBaseId` VARCHAR(191) NOT NULL,
`sourceId` VARCHAR(191) NOT NULL,
`content` LONGTEXT NOT NULL,
`chunkIndex` INT NOT NULL,
`pageNumber` INT NULL,
`sectionTitle` VARCHAR(500) NULL,
`tokenCount` INT NOT NULL DEFAULT 0,
`externalVectorId` VARCHAR(255) NULL,
`embeddingModel` VARCHAR(100) NULL,
`embeddingStatus` VARCHAR(32) NOT NULL DEFAULT 'pending',
`metadataJson` JSON NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
`deletedAt` DATETIME(3) NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE INDEX `KnowledgeChunk_userId_idx` ON `KnowledgeChunk`(`userId`);
CREATE INDEX `KnowledgeChunk_sourceId_idx` ON `KnowledgeChunk`(`sourceId`);
CREATE INDEX `KnowledgeChunk_knowledgeBaseId_idx` ON `KnowledgeChunk`(`knowledgeBaseId`);
CREATE INDEX `KnowledgeChunk_externalVectorId_idx` ON `KnowledgeChunk`(`externalVectorId`);
-- CreateTable: ImportCandidate
CREATE TABLE `ImportCandidate` (
`id` VARCHAR(191) NOT NULL,
`userId` VARCHAR(191) NOT NULL,
`knowledgeBaseId` VARCHAR(191) NOT NULL,
`sourceId` VARCHAR(191) NOT NULL,
`importId` VARCHAR(191) NOT NULL,
`title` VARCHAR(255) NOT NULL,
`summary` TEXT NULL,
`content` LONGTEXT NULL,
`tagsJson` JSON NULL,
`recallQuestionsJson` JSON NULL,
`sourceTextSnippet` TEXT NULL,
`sourceChunkIds` JSON NULL,
`confidence` DECIMAL(4, 3) NOT NULL DEFAULT 0,
`difficulty` VARCHAR(16) NULL,
`orderIndex` INT NOT NULL DEFAULT 0,
`status` VARCHAR(16) NOT NULL DEFAULT 'PENDING',
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE INDEX `ImportCandidate_userId_idx` ON `ImportCandidate`(`userId`);
CREATE INDEX `ImportCandidate_sourceId_idx` ON `ImportCandidate`(`sourceId`);
CREATE INDEX `ImportCandidate_importId_idx` ON `ImportCandidate`(`importId`);
CREATE INDEX `ImportCandidate_status_idx` ON `ImportCandidate`(`status`);
-- CreateTable: BackupJob
CREATE TABLE `BackupJob` (
`id` VARCHAR(191) NOT NULL,
`type` VARCHAR(16) NOT NULL,
`status` VARCHAR(16) NOT NULL DEFAULT 'RUNNING',
`localPath` VARCHAR(500) NULL,
`cosObjectKey` VARCHAR(500) NULL,
`fileSizeBytes` BIGINT NOT NULL DEFAULT 0,
`startedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`completedAt` DATETIME(3) NULL,
`errorMessage` TEXT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable: MembershipPlan
CREATE TABLE `MembershipPlan` (
`id` VARCHAR(191) NOT NULL,
`code` VARCHAR(32) NOT NULL,
`name` VARCHAR(100) NOT NULL,
`priceMonthly` INT NOT NULL DEFAULT 0,
`priceYearly` INT NOT NULL DEFAULT 0,
`maxKnowledgeBases` INT NOT NULL DEFAULT 1,
`maxStorageBytes` BIGINT NOT NULL DEFAULT 0,
`maxFileSizeBytes` BIGINT NOT NULL DEFAULT 0,
`monthlyOcrPages` INT NOT NULL DEFAULT 0,
`monthlyVisionPages` INT NOT NULL DEFAULT 0,
`monthlyChatCount` INT NOT NULL DEFAULT 0,
`monthlyAiAnalysisCount` INT NOT NULL DEFAULT 0,
`monthlyRecallCount` INT NOT NULL DEFAULT 0,
`monthlyCardGenCount` INT NOT NULL DEFAULT 0,
`isActive` BOOLEAN NOT NULL DEFAULT true,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `MembershipPlan_code_key`(`code`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- AddForeignKey
ALTER TABLE `KnowledgeSource` ADD CONSTRAINT `KnowledgeSource_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `KnowledgeSource` ADD CONSTRAINT `KnowledgeSource_knowledgeBaseId_fkey` FOREIGN KEY (`knowledgeBaseId`) REFERENCES `KnowledgeBase`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `KnowledgeSource` ADD CONSTRAINT `KnowledgeSource_fileId_fkey` FOREIGN KEY (`fileId`) REFERENCES `UploadedFile`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
ALTER TABLE `KnowledgeChunk` ADD CONSTRAINT `KnowledgeChunk_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `KnowledgeChunk` ADD CONSTRAINT `KnowledgeChunk_knowledgeBaseId_fkey` FOREIGN KEY (`knowledgeBaseId`) REFERENCES `KnowledgeBase`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `KnowledgeChunk` ADD CONSTRAINT `KnowledgeChunk_sourceId_fkey` FOREIGN KEY (`sourceId`) REFERENCES `KnowledgeSource`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `ImportCandidate` ADD CONSTRAINT `ImportCandidate_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `ImportCandidate` ADD CONSTRAINT `ImportCandidate_knowledgeBaseId_fkey` FOREIGN KEY (`knowledgeBaseId`) REFERENCES `KnowledgeBase`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `ImportCandidate` ADD CONSTRAINT `ImportCandidate_sourceId_fkey` FOREIGN KEY (`sourceId`) REFERENCES `KnowledgeSource`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `ImportCandidate` ADD CONSTRAINT `ImportCandidate_importId_fkey` FOREIGN KEY (`importId`) REFERENCES `DocumentImport`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `DocumentImport` ADD CONSTRAINT `DocumentImport_sourceId_fkey` FOREIGN KEY (`sourceId`) REFERENCES `KnowledgeSource`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;