-- 用户主表 (移除外键约束)
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='签名历史表';