alioth/star-tune/dbDesign/init.sql
2025-05-30 18:37:21 +08:00

67 lines
3.6 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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