/* Navicat Premium Dump SQL Source Server : Mac Source Server Type : MySQL Source Server Version : 80041 (8.0.41) Source Host : localhost:3306 Source Schema : novel Target Server Type : MySQL Target Server Version : 80041 (8.0.41) File Encoding : 65001 Date: 23/07/2025 11:36:45 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for admins -- ---------------------------- DROP TABLE IF EXISTS `admins`; CREATE TABLE `admins` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '管理员ID', `username` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '管理员用户名', `password_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码哈希', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', `deleted_at` timestamp NULL DEFAULT NULL COMMENT '软删除时间戳', PRIMARY KEY (`id`), KEY `idx_username_deleted` (`username`,`deleted_at`), KEY `idx_email_deleted` (`deleted_at`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统管理员表'; -- ---------------------------- -- Table structure for authors -- ---------------------------- DROP TABLE IF EXISTS `authors`; CREATE TABLE `authors` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '作者ID', `user_id` bigint NOT NULL COMMENT '用户ID', `pen_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '笔名', `bio` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '作者简介', `follower_count` int unsigned NOT NULL DEFAULT '0' COMMENT '粉丝数量', `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1=正常,2=禁用', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', `deleted_at` timestamp NULL DEFAULT NULL COMMENT '软删除时间戳', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_id` (`user_id`), KEY `idx_status` (`status`), CONSTRAINT `fk_authors_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='作者表'; -- ---------------------------- -- Table structure for book_ratings -- ---------------------------- DROP TABLE IF EXISTS `book_ratings`; CREATE TABLE `book_ratings` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '评分ID', `user_id` bigint NOT NULL COMMENT '用户ID', `book_id` bigint NOT NULL COMMENT '小说ID', `score` decimal(4,2) NOT NULL COMMENT '评分(0~10)', `comment` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '用户评论', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_book` (`user_id`,`book_id`), KEY `idx_book_id` (`book_id`), CONSTRAINT `fk_book_ratings_book_id` FOREIGN KEY (`book_id`) REFERENCES `books` (`id`), CONSTRAINT `fk_book_ratings_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='小说评分与评论表'; -- ---------------------------- -- Table structure for book_recommendations -- ---------------------------- DROP TABLE IF EXISTS `book_recommendations`; CREATE TABLE `book_recommendations` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `book_id` bigint NOT NULL COMMENT '书籍ID,关联 books 表', `type` tinyint NOT NULL DEFAULT '1' COMMENT '推荐类型:1=首页Banner,2=编辑推荐,3=分类推荐等', `cover_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '推荐封面图(横图)', `sort_order` int DEFAULT '0' COMMENT '展示排序,越小越靠前', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用:1=启用,0=禁用', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', `deleted_at` timestamp NULL DEFAULT NULL COMMENT '软删除时间戳', PRIMARY KEY (`id`), KEY `idx_book_id_deleted` (`book_id`,`deleted_at`), KEY `idx_type_sort_deleted` (`type`,`sort_order`,`deleted_at`), CONSTRAINT `fk_book_recommendations_book_id` FOREIGN KEY (`book_id`) REFERENCES `books` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='书籍推荐配置表'; -- ---------------------------- -- Table structure for books -- ---------------------------- DROP TABLE IF EXISTS `books`; CREATE TABLE `books` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '小说ID', `author_id` bigint NOT NULL COMMENT '作者ID', `category_id` bigint NOT NULL COMMENT '分类ID', `title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '小说标题', `cover_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '封面图片URL', `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '小说简介', `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1=连载中,2=完结,3=下架', `words_count` int DEFAULT '0' COMMENT '字数', `chapters_count` int DEFAULT '0' COMMENT '章节数', `rating` decimal(4,2) DEFAULT '0.00' COMMENT '评分(0.00~10.00)', `read_count` bigint DEFAULT '0' COMMENT '阅读人数', `current_readers` bigint DEFAULT '0' COMMENT '在读人数', `tags` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标签(逗号分隔)', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', `deleted_at` timestamp NULL DEFAULT NULL COMMENT '软删除时间戳', `is_recommended` tinyint NOT NULL DEFAULT '0' COMMENT '是否推荐:0=否,1=是', `is_featured` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否精选:0=否,1=是', `language` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'zh' COMMENT '语言,如 zh=中文,en=英文,jp=日文', PRIMARY KEY (`id`), KEY `idx_author_id` (`author_id`), KEY `idx_category_id` (`category_id`), KEY `idx_status` (`status`), CONSTRAINT `fk_books_author_id` FOREIGN KEY (`author_id`) REFERENCES `authors` (`id`), CONSTRAINT `fk_books_category_id` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='小说表'; -- ---------------------------- -- Table structure for bookshelves -- ---------------------------- DROP TABLE IF EXISTS `bookshelves`; CREATE TABLE `bookshelves` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '记录ID', `user_id` bigint NOT NULL COMMENT '用户ID', `book_id` bigint NOT NULL COMMENT '小说ID', `added_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '加入书架时间', `last_read_chapter_id` bigint DEFAULT NULL COMMENT '最后阅读章节ID', `last_read_percent` decimal(5,2) DEFAULT '0.00' COMMENT '阅读进度百分比(0.00~100.00)', `last_read_at` timestamp NULL DEFAULT NULL COMMENT '最后阅读时间', `read_status` tinyint NOT NULL DEFAULT '1' COMMENT '阅读状态:1=正在读,2=已读完,3=已收藏', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_book` (`user_id`,`book_id`), KEY `idx_user_id` (`user_id`), KEY `idx_book_id` (`book_id`), CONSTRAINT `fk_bookshelves_book_id` FOREIGN KEY (`book_id`) REFERENCES `books` (`id`), CONSTRAINT `fk_bookshelves_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户书架表'; -- ---------------------------- -- Table structure for casbin_rule -- ---------------------------- DROP TABLE IF EXISTS `casbin_rule`; CREATE TABLE `casbin_rule` ( `id` int NOT NULL AUTO_INCREMENT, `p_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `v0` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `v1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `v2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `v3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `v4` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `v5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='路由权限表'; -- ---------------------------- -- Table structure for categories -- ---------------------------- DROP TABLE IF EXISTS `categories`; CREATE TABLE `categories` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '分类ID', `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分类名称', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', `deleted_at` timestamp NULL DEFAULT NULL COMMENT '软删除时间戳', `channel` tinyint(1) NOT NULL DEFAULT '1' COMMENT '频道类型:1=男频,2=女频', PRIMARY KEY (`id`), UNIQUE KEY `uk_name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='小说分类表'; -- ---------------------------- -- Table structure for chapters -- ---------------------------- DROP TABLE IF EXISTS `chapters`; CREATE TABLE `chapters` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '章节ID', `book_id` bigint NOT NULL COMMENT '小说ID', `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '章节标题', `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '章节内容', `word_count` int DEFAULT '0' COMMENT '章节字数', `sort` int DEFAULT '0' COMMENT '排序序号', `is_locked` tinyint NOT NULL DEFAULT '0' COMMENT '是否锁定:0=免费,1=需积分解锁', `required_score` int NOT NULL DEFAULT '0' COMMENT '解锁该章节所需积分', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', `deleted_at` timestamp NULL DEFAULT NULL COMMENT '软删除时间戳', PRIMARY KEY (`id`), KEY `idx_book_id` (`book_id`), CONSTRAINT `fk_chapters_book_id` FOREIGN KEY (`book_id`) REFERENCES `books` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='章节表'; -- ---------------------------- -- Table structure for feedbacks -- ---------------------------- DROP TABLE IF EXISTS `feedbacks`; CREATE TABLE `feedbacks` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '反馈ID', `user_id` bigint NOT NULL COMMENT '用户ID', `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '反馈内容', `status` tinyint NOT NULL DEFAULT '1' COMMENT '处理状态:1=未处理,2=处理中,3=已处理', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '反馈时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), CONSTRAINT `fk_feedbacks_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户反馈表'; -- ---------------------------- -- Table structure for sign_in_reward_details -- ---------------------------- DROP TABLE IF EXISTS `sign_in_reward_details`; CREATE TABLE `sign_in_reward_details` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `rule_id` bigint NOT NULL COMMENT '规则ID,关联 sign_in_reward_rules 表', `day_number` int NOT NULL COMMENT '签到天数(1到cycle_days)', `reward_type` tinyint NOT NULL DEFAULT '1' COMMENT '奖励类型:1=积分', `quantity` int NOT NULL COMMENT '奖励数量,如积分数量或礼包数量', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '记录状态:1=启用,0=禁用', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', `deleted_at` timestamp NULL DEFAULT NULL COMMENT '软删除时间戳', PRIMARY KEY (`id`), UNIQUE KEY `uk_rule_id_day_number_deleted` (`rule_id`,`day_number`,`deleted_at`) COMMENT '确保规则下每天唯一奖励', KEY `idx_rule_id_status_deleted` (`rule_id`,`status`,`deleted_at`) COMMENT '规则ID和状态查询索引', CONSTRAINT `fk_sign_in_reward_details_rule_id` FOREIGN KEY (`rule_id`) REFERENCES `sign_in_reward_rules` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='签到奖励详情表'; -- ---------------------------- -- Table structure for sign_in_reward_rules -- ---------------------------- DROP TABLE IF EXISTS `sign_in_reward_rules`; CREATE TABLE `sign_in_reward_rules` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `rule_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '规则名称,如“7天签到活动”', `cycle_days` int NOT NULL COMMENT '奖励周期天数,如7天', `start_date` date NOT NULL COMMENT '活动开始日期', `end_date` date NOT NULL COMMENT '活动结束日期', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '规则状态:1=启用,0=禁用', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', `deleted_at` timestamp NULL DEFAULT NULL COMMENT '软删除时间戳', PRIMARY KEY (`id`), UNIQUE KEY `uk_rule_name_deleted` (`rule_name`,`deleted_at`) COMMENT '确保规则名称唯一', KEY `idx_status_start_end_deleted` (`status`,`start_date`,`end_date`,`deleted_at`) COMMENT '规则状态和活动时间查询索引' ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='签到奖励规则表'; -- ---------------------------- -- Table structure for user_chapter_purchases -- ---------------------------- DROP TABLE IF EXISTS `user_chapter_purchases`; CREATE TABLE `user_chapter_purchases` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '购买记录ID', `user_id` bigint NOT NULL COMMENT '用户ID', `book_id` bigint NOT NULL COMMENT '小说ID', `chapter_id` bigint NOT NULL COMMENT '章节ID', `points_used` int NOT NULL COMMENT '消耗积分数', `purchase_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '购买时间', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_book_id` (`book_id`), KEY `idx_chapter_id` (`chapter_id`), CONSTRAINT `fk_user_chapter_purchases_book_id` FOREIGN KEY (`book_id`) REFERENCES `books` (`id`), CONSTRAINT `fk_user_chapter_purchases_chapter_id` FOREIGN KEY (`chapter_id`) REFERENCES `chapters` (`id`), CONSTRAINT `fk_user_chapter_purchases_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户章节购买记录表'; -- ---------------------------- -- Table structure for user_follow_authors -- ---------------------------- DROP TABLE IF EXISTS `user_follow_authors`; CREATE TABLE `user_follow_authors` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '关注ID', `user_id` bigint NOT NULL COMMENT '用户ID', `author_id` bigint NOT NULL COMMENT '作者ID', `followed_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '关注时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_author` (`user_id`,`author_id`), KEY `idx_user_id` (`user_id`), KEY `idx_author_id` (`author_id`), CONSTRAINT `fk_user_follow_authors_author_id` FOREIGN KEY (`author_id`) REFERENCES `authors` (`id`), CONSTRAINT `fk_user_follow_authors_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户关注作者表'; -- ---------------------------- -- Table structure for user_points_logs -- ---------------------------- DROP TABLE IF EXISTS `user_points_logs`; CREATE TABLE `user_points_logs` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '积分流水ID', `user_id` bigint NOT NULL COMMENT '用户ID', `change_type` tinyint NOT NULL COMMENT '变动类型,1=消费(spend), 2=收入(earn)', `points_change` int NOT NULL COMMENT '积分变化数,正数增加,负数减少', `related_order_id` bigint DEFAULT NULL COMMENT '关联ID:当change_type=1时,为chapter_purchases.id;当change_type=2时,为advertisement_records.id', `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '变动说明', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '变动时间', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_related_order_id` (`related_order_id`), CONSTRAINT `fk_user_points_logs_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户积分流水表'; -- ---------------------------- -- Table structure for user_read_history -- ---------------------------- DROP TABLE IF EXISTS `user_read_history`; CREATE TABLE `user_read_history` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '历史记录ID', `user_id` bigint NOT NULL COMMENT '用户ID', `book_id` bigint NOT NULL COMMENT '小说ID', `chapter_id` bigint NOT NULL COMMENT '最后阅读章节ID', `read_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后阅读时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_book` (`user_id`,`book_id`), KEY `idx_user_id` (`user_id`), KEY `idx_book_id` (`book_id`), KEY `fk_user_read_history_chapter_id` (`chapter_id`), CONSTRAINT `fk_user_read_history_book_id` FOREIGN KEY (`book_id`) REFERENCES `books` (`id`), CONSTRAINT `fk_user_read_history_chapter_id` FOREIGN KEY (`chapter_id`) REFERENCES `chapters` (`id`), CONSTRAINT `fk_user_read_history_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户阅读历史记录表'; -- ---------------------------- -- Table structure for user_read_records -- ---------------------------- DROP TABLE IF EXISTS `user_read_records`; CREATE TABLE `user_read_records` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '记录ID', `user_id` bigint NOT NULL COMMENT '用户ID', `book_id` bigint NOT NULL COMMENT '小说ID', `chapter_id` bigint NOT NULL COMMENT '章节ID', `progress` int NOT NULL DEFAULT '0' COMMENT '阅读进度百分比(0-100)', `read_at` datetime NOT NULL COMMENT '阅读时间', `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_book_chapter` (`user_id`,`book_id`,`chapter_id`), KEY `idx_user_id` (`user_id`), KEY `idx_book_id` (`book_id`), KEY `idx_chapter_id` (`chapter_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户阅读记录表'; -- ---------------------------- -- Table structure for user_sign_in_logs -- ---------------------------- DROP TABLE IF EXISTS `user_sign_in_logs`; CREATE TABLE `user_sign_in_logs` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` bigint NOT NULL COMMENT '用户ID,关联 users 表', `rule_id` bigint NOT NULL COMMENT '规则ID,关联 sign_in_reward_rules 表', `reward_detail_id` bigint NOT NULL COMMENT '奖励详情ID,关联 sign_in_reward_details 表', `sign_in_date` date NOT NULL COMMENT '签到日期', `quantity` int NOT NULL COMMENT '奖励数量,如积分数量或礼包数量', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '记录状态:1=有效,0=无效', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', `deleted_at` timestamp NULL DEFAULT NULL COMMENT '软删除时间戳', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_rule_sign_in_date_deleted` (`user_id`,`rule_id`,`sign_in_date`,`deleted_at`) COMMENT '确保用户在规则下每日唯一签到', KEY `idx_user_id_rule_id_deleted` (`user_id`,`rule_id`,`deleted_at`) COMMENT '用户ID和规则ID查询索引', KEY `fk_user_sign_in_logs_rule_id` (`rule_id`), KEY `fk_user_sign_in_logs_reward_detail_id` (`reward_detail_id`), CONSTRAINT `fk_user_sign_in_logs_reward_detail_id` FOREIGN KEY (`reward_detail_id`) REFERENCES `sign_in_reward_details` (`id`) ON DELETE CASCADE, CONSTRAINT `fk_user_sign_in_logs_rule_id` FOREIGN KEY (`rule_id`) REFERENCES `sign_in_reward_rules` (`id`) ON DELETE CASCADE, CONSTRAINT `fk_user_sign_in_logs_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户签到记录表'; -- ---------------------------- -- Table structure for users -- ---------------------------- DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', `username` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名', `password_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码哈希', `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '头像URL', `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '邮箱', `points` bigint unsigned NOT NULL DEFAULT '0' COMMENT '积分', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', `deleted_at` timestamp NULL DEFAULT NULL COMMENT '软删除时间戳', `background_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '作者背景图', `attention_count` int DEFAULT '0' COMMENT '关注他人的数量 attention count', PRIMARY KEY (`id`), UNIQUE KEY `uk_username` (`username`), KEY `idx_email_deleted` (`email`,`deleted_at`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户表'; SET FOREIGN_KEY_CHECKS = 1;