-- 用户主表 (移除外键约束) CREATE TABLE `user` ( `user_id` BIGINT UNSIGNED NOT NULL PRIMARY KEY COMMENT '用户ID(雪花ID)', `status` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '状态:0=正常 1=禁用', `user_type` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户类型:0=一般用户 1=root', `user_role` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户角色:0默认角色', `username` VARCHAR(50) NOT NULL COMMENT '唯一用户名', `email` VARCHAR(320) NOT NULL COMMENT '邮箱', `nickname` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '昵称', `gender` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '性别:0=未知 1=男 2=女', `birthdate` DATE NULL DEFAULT NULL COMMENT '出生年月', `address` VARCHAR(255) NULL DEFAULT '' COMMENT '地址', `avatar` VARCHAR(255) NULL DEFAULT '' COMMENT '头像URL', `background_image` VARCHAR(255) NULL DEFAULT '' COMMENT '背景图URL', `created_by` ENUM('SELF','ADMIN') NOT NULL COMMENT '创建方式:SELF=自注册 ADMIN=管理员添加', `created_at` DATETIME(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP) COMMENT '创建时间(毫秒精度)', `updated_at` DATETIME(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP) COMMENT '最后更新时间', `username_updated_at` DATETIME(3) NULL DEFAULT NULL COMMENT '用户名修改时间', `is_deleted` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '软删除标记:0=正常 1=已删除', `deleted_at` DATETIME(3) NULL DEFAULT NULL COMMENT '删除时间', -- 唯一索引确保数据完整性 UNIQUE INDEX `idx_unique_username` (`username`), -- 复合唯一索引实现删除后邮箱可重用 UNIQUE INDEX `idx_unique_active_email` (`email`, `is_deleted`), -- 时间索引优化查询 INDEX `idx_created_at` (`created_at`), INDEX `idx_email` (`email`), INDEX `idx_status` (`status`), INDEX `idx_user_type` (`user_type`), INDEX `idx_username_updated` (`username_updated_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户主表'; -- 个人简介表 (移除外键) CREATE TABLE `user_profile` ( `user_id` BIGINT UNSIGNED NOT NULL PRIMARY KEY COMMENT '用户ID', `profile` MEDIUMTEXT NOT NULL COMMENT '简介内容', `created_at` DATETIME(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP) COMMENT '创建时间', `updated_at` DATETIME(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP) COMMENT '最后更新时间', -- 添加索引优化关联查询 INDEX `idx_user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户简介表'; -- 密码表 (移除外键) CREATE TABLE `user_password` ( `user_id` BIGINT UNSIGNED NOT NULL PRIMARY KEY COMMENT '用户ID', `password_hash` VARCHAR(128) NOT NULL COMMENT '加密密码(argon2格式)', `previous_password_hash` VARCHAR(128) NULL DEFAULT NULL COMMENT '前次密码', `last_updated_at` DATETIME(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP) COMMENT '最后修改时间', -- 添加索引 INDEX `idx_user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户密码表'; -- 个性签名历史表 (移除外键) CREATE TABLE `user_signature_history` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '记录ID', `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID', `signature` VARCHAR(100) NOT NULL COMMENT '签名内容', `signature_tag` VARCHAR(100) NOT NULL COMMENT '签名标签', `created_at` DATETIME(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP) COMMENT '创建时间', -- 优化用户签名查询 INDEX `idx_user_created` (`user_id`, `created_at` DESC), INDEX `idx_user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='签名历史表';