-- CreateTable CREATE TABLE `User` ( `id` VARCHAR(191) NOT NULL, `email` VARCHAR(255) NULL, `nickname` VARCHAR(100) NULL, `avatarUrl` VARCHAR(500) NULL, `role` VARCHAR(32) NOT NULL DEFAULT 'USER', `status` VARCHAR(32) NOT NULL DEFAULT 'active', `onboardingCompleted` BOOLEAN NOT NULL DEFAULT false, `lastLoginAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, `deletedAt` DATETIME(3) NULL, INDEX `User_email_idx`(`email`), INDEX `User_status_idx`(`status`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `AuthAccount` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `provider` VARCHAR(32) NOT NULL, `providerUserId` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NULL, `rawProfileJson` JSON NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `AuthAccount_userId_idx`(`userId`), UNIQUE INDEX `AuthAccount_provider_providerUserId_key`(`provider`, `providerUserId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `RefreshToken` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `tokenHash` VARCHAR(255) NOT NULL, `deviceId` VARCHAR(255) NULL, `deviceName` VARCHAR(255) NULL, `expiresAt` DATETIME(3) NOT NULL, `revokedAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `RefreshToken_userId_idx`(`userId`), INDEX `RefreshToken_tokenHash_idx`(`tokenHash`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `UserProfile` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `learningIdentity` VARCHAR(100) NULL, `learningDirection` VARCHAR(255) NULL, `bio` TEXT NULL, `currentGoal` VARCHAR(255) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `UserProfile_userId_key`(`userId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `UserPreference` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `preferredMethods` JSON NULL, `defaultFocusMinutes` INTEGER NOT NULL DEFAULT 25, `aiSuggestionLevel` VARCHAR(32) NOT NULL DEFAULT 'normal', `language` VARCHAR(32) NOT NULL DEFAULT 'zh-CN', `appearance` VARCHAR(32) NOT NULL DEFAULT 'system', `notificationEnabled` BOOLEAN NOT NULL DEFAULT true, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `UserPreference_userId_key`(`userId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `UserConsent` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `consentType` VARCHAR(32) NOT NULL, `version` VARCHAR(50) NOT NULL, `acceptedAt` DATETIME(3) NOT NULL, `ipAddress` VARCHAR(100) NULL, `userAgent` VARCHAR(500) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `UserConsent_userId_idx`(`userId`), INDEX `UserConsent_consentType_idx`(`consentType`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `KnowledgeBase` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `title` VARCHAR(255) NOT NULL, `description` TEXT NULL, `coverKey` VARCHAR(100) NULL, `status` VARCHAR(32) NOT NULL DEFAULT 'active', `itemCount` INTEGER NOT NULL DEFAULT 0, `lastStudiedAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, `deletedAt` DATETIME(3) NULL, INDEX `KnowledgeBase_userId_idx`(`userId`), INDEX `KnowledgeBase_status_idx`(`status`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `KnowledgeItem` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `knowledgeBaseId` VARCHAR(191) NOT NULL, `parentId` VARCHAR(191) NULL, `itemType` VARCHAR(32) NOT NULL, `title` VARCHAR(255) NOT NULL, `content` LONGTEXT NULL, `summary` TEXT NULL, `sourceType` VARCHAR(32) NULL, `sourceRef` VARCHAR(500) NULL, `orderIndex` INTEGER NOT NULL DEFAULT 0, `status` VARCHAR(32) NOT NULL DEFAULT 'active', `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, `deletedAt` DATETIME(3) NULL, INDEX `KnowledgeItem_userId_idx`(`userId`), INDEX `KnowledgeItem_knowledgeBaseId_idx`(`knowledgeBaseId`), INDEX `KnowledgeItem_parentId_idx`(`parentId`), INDEX `KnowledgeItem_itemType_idx`(`itemType`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `KnowledgeItemRelation` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `sourceItemId` VARCHAR(191) NOT NULL, `targetItemId` VARCHAR(191) NOT NULL, `relationType` VARCHAR(32) NOT NULL, `confidence` DECIMAL(5, 2) NULL, `reason` TEXT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `KnowledgeItemRelation_sourceItemId_idx`(`sourceItemId`), INDEX `KnowledgeItemRelation_targetItemId_idx`(`targetItemId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Tag` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `name` VARCHAR(100) NOT NULL, `color` VARCHAR(32) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `Tag_userId_name_key`(`userId`, `name`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `KnowledgeItemTag` ( `id` VARCHAR(191) NOT NULL, `knowledgeItemId` VARCHAR(191) NOT NULL, `tagId` VARCHAR(191) NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), UNIQUE INDEX `KnowledgeItemTag_knowledgeItemId_tagId_key`(`knowledgeItemId`, `tagId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `UploadedFile` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `filename` VARCHAR(255) NOT NULL, `mimeType` VARCHAR(100) NULL, `storagePath` VARCHAR(500) NOT NULL, `sizeBytes` BIGINT NOT NULL DEFAULT 0, `checksum` VARCHAR(255) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `UploadedFile_userId_idx`(`userId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `DocumentImport` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `knowledgeBaseId` VARCHAR(191) NULL, `fileId` VARCHAR(191) NULL, `sourceType` VARCHAR(32) NOT NULL, `sourceName` VARCHAR(255) NULL, `sourceUrl` VARCHAR(500) NULL, `rawText` LONGTEXT NULL, `status` VARCHAR(32) NOT NULL DEFAULT 'pending', `progress` INTEGER NOT NULL DEFAULT 0, `errorMessage` TEXT NULL, `resultJson` JSON NULL, `startedAt` DATETIME(3) NULL, `completedAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `DocumentImport_userId_idx`(`userId`), INDEX `DocumentImport_status_idx`(`status`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `LearningSession` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `knowledgeBaseId` VARCHAR(191) NULL, `knowledgeItemId` VARCHAR(191) NULL, `mode` VARCHAR(32) NOT NULL, `status` VARCHAR(32) NOT NULL DEFAULT 'active', `startedAt` DATETIME(3) NOT NULL, `endedAt` DATETIME(3) NULL, `durationSeconds` INTEGER NOT NULL DEFAULT 0, `focusMinutes` INTEGER NULL, `metadata` JSON NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `LearningSession_userId_idx`(`userId`), INDEX `LearningSession_knowledgeItemId_idx`(`knowledgeItemId`), INDEX `LearningSession_startedAt_idx`(`startedAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `LearningRecord` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `sessionId` VARCHAR(191) NULL, `recordType` VARCHAR(32) NOT NULL, `title` VARCHAR(255) NOT NULL, `description` TEXT NULL, `durationSeconds` INTEGER NOT NULL DEFAULT 0, `occurredAt` DATETIME(3) NOT NULL, `metadata` JSON NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `LearningRecord_userId_idx`(`userId`), INDEX `LearningRecord_occurredAt_idx`(`occurredAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `ActiveRecallQuestion` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `knowledgeItemId` VARCHAR(191) NULL, `questionText` TEXT NOT NULL, `difficulty` VARCHAR(32) NULL, `createdBy` VARCHAR(32) NOT NULL DEFAULT 'ai', `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `ActiveRecallQuestion_userId_idx`(`userId`), INDEX `ActiveRecallQuestion_knowledgeItemId_idx`(`knowledgeItemId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `ActiveRecallAnswer` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `questionId` VARCHAR(191) NULL, `sessionId` VARCHAR(191) NULL, `answerType` VARCHAR(32) NOT NULL DEFAULT 'text', `answerText` LONGTEXT NULL, `audioFileId` VARCHAR(191) NULL, `submittedAt` DATETIME(3) NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `ActiveRecallAnswer_userId_idx`(`userId`), INDEX `ActiveRecallAnswer_questionId_idx`(`questionId`), INDEX `ActiveRecallAnswer_sessionId_idx`(`sessionId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `AiAnalysisJob` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `sessionId` VARCHAR(191) NULL, `answerId` VARCHAR(191) NULL, `jobType` VARCHAR(32) NOT NULL, `status` VARCHAR(32) NOT NULL DEFAULT 'pending', `progress` INTEGER NOT NULL DEFAULT 0, `errorMessage` TEXT NULL, `queuedAt` DATETIME(3) NULL, `startedAt` DATETIME(3) NULL, `completedAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `AiAnalysisJob_userId_idx`(`userId`), INDEX `AiAnalysisJob_status_idx`(`status`), INDEX `AiAnalysisJob_sessionId_idx`(`sessionId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `AiAnalysisResult` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `jobId` VARCHAR(191) NOT NULL, `sessionId` VARCHAR(191) NULL, `answerId` VARCHAR(191) NULL, `summary` TEXT NULL, `masteryScore` INTEGER NULL, `strengths` JSON NULL, `weaknesses` JSON NULL, `suggestions` JSON NULL, `nextActions` JSON NULL, `rawResult` JSON NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `AiAnalysisResult_userId_idx`(`userId`), INDEX `AiAnalysisResult_jobId_idx`(`jobId`), INDEX `AiAnalysisResult_sessionId_idx`(`sessionId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `FocusItem` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `knowledgeBaseId` VARCHAR(191) NULL, `knowledgeItemId` VARCHAR(191) NULL, `analysisResultId` VARCHAR(191) NULL, `title` VARCHAR(255) NOT NULL, `reason` TEXT NULL, `suggestion` TEXT NULL, `priority` VARCHAR(32) NOT NULL DEFAULT 'normal', `status` VARCHAR(32) NOT NULL DEFAULT 'open', `masteryScore` INTEGER NULL, `dueAt` DATETIME(3) NULL, `completedAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, `deletedAt` DATETIME(3) NULL, INDEX `FocusItem_userId_idx`(`userId`), INDEX `FocusItem_status_idx`(`status`), INDEX `FocusItem_dueAt_idx`(`dueAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `ReviewCard` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `knowledgeItemId` VARCHAR(191) NULL, `focusItemId` VARCHAR(191) NULL, `frontText` TEXT NOT NULL, `backText` TEXT NULL, `difficulty` VARCHAR(32) NULL, `status` VARCHAR(32) NOT NULL DEFAULT 'active', `nextReviewAt` DATETIME(3) NULL, `intervalDays` INTEGER NOT NULL DEFAULT 1, `easeFactor` DECIMAL(4, 2) NOT NULL DEFAULT 2.50, `repetitionCount` INTEGER NOT NULL DEFAULT 0, `lapseCount` INTEGER NOT NULL DEFAULT 0, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, `deletedAt` DATETIME(3) NULL, INDEX `ReviewCard_userId_idx`(`userId`), INDEX `ReviewCard_nextReviewAt_idx`(`nextReviewAt`), INDEX `ReviewCard_focusItemId_idx`(`focusItemId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `ReviewLog` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `reviewCardId` VARCHAR(191) NOT NULL, `sessionId` VARCHAR(191) NULL, `rating` VARCHAR(32) NOT NULL, `responseText` TEXT NULL, `reviewedAt` DATETIME(3) NOT NULL, `nextReviewAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `ReviewLog_userId_idx`(`userId`), INDEX `ReviewLog_reviewCardId_idx`(`reviewCardId`), INDEX `ReviewLog_reviewedAt_idx`(`reviewedAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `ReviewPlan` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `title` VARCHAR(255) NOT NULL, `status` VARCHAR(32) NOT NULL DEFAULT 'active', `scheduledAt` DATETIME(3) NULL, `completedAt` DATETIME(3) NULL, `cardCount` INTEGER NOT NULL DEFAULT 0, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `ReviewPlan_userId_idx`(`userId`), INDEX `ReviewPlan_scheduledAt_idx`(`scheduledAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `DailyLearningActivity` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `activityDate` DATE NOT NULL, `durationSeconds` INTEGER NOT NULL DEFAULT 0, `sessionsCount` INTEGER NOT NULL DEFAULT 0, `activeRecallCount` INTEGER NOT NULL DEFAULT 0, `reviewCount` INTEGER NOT NULL DEFAULT 0, `aiAnalysisCount` INTEGER NOT NULL DEFAULT 0, `completedLoopCount` INTEGER NOT NULL DEFAULT 0, `activityLevel` INTEGER NOT NULL DEFAULT 0, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `DailyLearningActivity_userId_idx`(`userId`), UNIQUE INDEX `DailyLearningActivity_userId_activityDate_key`(`userId`, `activityDate`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Notification` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `type` VARCHAR(32) NOT NULL, `title` VARCHAR(255) NOT NULL, `content` TEXT NULL, `data` JSON NULL, `readAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `Notification_userId_idx`(`userId`), INDEX `Notification_readAt_idx`(`readAt`), INDEX `Notification_type_idx`(`type`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Feedback` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NULL, `email` VARCHAR(255) NULL, `category` VARCHAR(64) NOT NULL, `content` TEXT NOT NULL, `deviceInfo` JSON NULL, `status` VARCHAR(32) NOT NULL DEFAULT 'open', `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `Feedback_userId_idx`(`userId`), INDEX `Feedback_status_idx`(`status`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `AppChangelog` ( `id` VARCHAR(191) NOT NULL, `version` VARCHAR(50) NOT NULL, `title` VARCHAR(255) NOT NULL, `content` TEXT NOT NULL, `platform` VARCHAR(32) NOT NULL DEFAULT 'ios', `publishedAt` DATETIME(3) NULL, `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; -- AddForeignKey ALTER TABLE `AuthAccount` ADD CONSTRAINT `AuthAccount_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `RefreshToken` ADD CONSTRAINT `RefreshToken_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `UserProfile` ADD CONSTRAINT `UserProfile_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `UserPreference` ADD CONSTRAINT `UserPreference_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `UserConsent` ADD CONSTRAINT `UserConsent_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `KnowledgeBase` ADD CONSTRAINT `KnowledgeBase_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `KnowledgeItem` ADD CONSTRAINT `KnowledgeItem_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `KnowledgeItem` ADD CONSTRAINT `KnowledgeItem_knowledgeBaseId_fkey` FOREIGN KEY (`knowledgeBaseId`) REFERENCES `KnowledgeBase`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `KnowledgeItem` ADD CONSTRAINT `KnowledgeItem_parentId_fkey` FOREIGN KEY (`parentId`) REFERENCES `KnowledgeItem`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `KnowledgeItemRelation` ADD CONSTRAINT `KnowledgeItemRelation_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Tag` ADD CONSTRAINT `Tag_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `KnowledgeItemTag` ADD CONSTRAINT `KnowledgeItemTag_knowledgeItemId_fkey` FOREIGN KEY (`knowledgeItemId`) REFERENCES `KnowledgeItem`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `KnowledgeItemTag` ADD CONSTRAINT `KnowledgeItemTag_tagId_fkey` FOREIGN KEY (`tagId`) REFERENCES `Tag`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `UploadedFile` ADD CONSTRAINT `UploadedFile_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `DocumentImport` ADD CONSTRAINT `DocumentImport_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `LearningSession` ADD CONSTRAINT `LearningSession_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `LearningRecord` ADD CONSTRAINT `LearningRecord_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ActiveRecallQuestion` ADD CONSTRAINT `ActiveRecallQuestion_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ActiveRecallAnswer` ADD CONSTRAINT `ActiveRecallAnswer_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ActiveRecallAnswer` ADD CONSTRAINT `ActiveRecallAnswer_questionId_fkey` FOREIGN KEY (`questionId`) REFERENCES `ActiveRecallQuestion`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `AiAnalysisJob` ADD CONSTRAINT `AiAnalysisJob_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `AiAnalysisResult` ADD CONSTRAINT `AiAnalysisResult_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `AiAnalysisResult` ADD CONSTRAINT `AiAnalysisResult_jobId_fkey` FOREIGN KEY (`jobId`) REFERENCES `AiAnalysisJob`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `FocusItem` ADD CONSTRAINT `FocusItem_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `FocusItem` ADD CONSTRAINT `FocusItem_knowledgeBaseId_fkey` FOREIGN KEY (`knowledgeBaseId`) REFERENCES `KnowledgeBase`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ReviewCard` ADD CONSTRAINT `ReviewCard_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ReviewLog` ADD CONSTRAINT `ReviewLog_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ReviewLog` ADD CONSTRAINT `ReviewLog_reviewCardId_fkey` FOREIGN KEY (`reviewCardId`) REFERENCES `ReviewCard`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ReviewPlan` ADD CONSTRAINT `ReviewPlan_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `DailyLearningActivity` ADD CONSTRAINT `DailyLearningActivity_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Notification` ADD CONSTRAINT `Notification_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Feedback` ADD CONSTRAINT `Feedback_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;