Files
frontend/数据库参考.txt
2025-10-06 18:54:26 +08:00

114 lines
7.3 KiB
Plaintext
Raw 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` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`username` VARCHAR(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户名',
`password` VARCHAR(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '密码哈希',
`email` VARCHAR(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '邮箱地址',
`avatar` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '头像URL存储在MinIO中',
`points` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户积分',
`role` VARCHAR(50) NOT NULL DEFAULT 'user' COMMENT '用户角色user, vip, admin等',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '用户状态1:正常, 0:禁用, -1:删除)',
`last_login_at` TIMESTAMP NULL COMMENT '最后登录时间',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`),
UNIQUE KEY `uk_email` (`email`),
INDEX `idx_role` (`role`),
INDEX `idx_status` (`status`),
INDEX `idx_points` (`points` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户表';
-- 材质表,存储皮肤和披风
CREATE TABLE `textures` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '材质的唯一ID',
`uploader_id` BIGINT UNSIGNED NOT NULL COMMENT '上传者的用户ID',
`name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '材质名称',
`description` TEXT COMMENT '材质描述',
`type` ENUM('SKIN', 'CAPE') NOT NULL COMMENT '材质类型(皮肤或披风)',
`url` VARCHAR(255) NOT NULL COMMENT '材质在MinIO中的永久访问URL',
`hash` VARCHAR(64) NOT NULL COMMENT '材质文件的SHA-256哈希值用于快速去重和校验',
`size` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '文件大小(字节)',
`is_public` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否公开到皮肤广场',
`download_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '下载次数',
`favorite_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '收藏次数',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态1:正常, 0:审核中, -1:已删除)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_hash` (`hash`),
INDEX `idx_uploader_id` (`uploader_id`),
INDEX `idx_public_type_status` (`is_public`, `type`, `status`),
INDEX `idx_download_count` (`download_count` DESC),
INDEX `idx_favorite_count` (`favorite_count` DESC),
CONSTRAINT `fk_textures_uploader` FOREIGN KEY (`uploader_id`) REFERENCES `user` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='皮肤与披风材质表';
-- 用户材质收藏表
CREATE TABLE `user_texture_favorites` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '收藏记录的唯一ID',
`user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
`texture_id` BIGINT UNSIGNED NOT NULL COMMENT '收藏的材质ID',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_texture` (`user_id`, `texture_id`),
INDEX `idx_user_id` (`user_id`),
INDEX `idx_texture_id` (`texture_id`),
INDEX `idx_created_at` (`created_at`),
CONSTRAINT `fk_favorites_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_favorites_texture` FOREIGN KEY (`texture_id`) REFERENCES `textures` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户材质收藏表';
-- 用户角色信息表Minecraft档案
CREATE TABLE `profiles` (
`uuid` VARCHAR(36) NOT NULL COMMENT '角色的UUID通常为Minecraft玩家的UUID',
`user_id` BIGINT UNSIGNED NOT NULL COMMENT '关联的用户ID',
`name` VARCHAR(16) NOT NULL COMMENT '角色名Minecraft游戏内名称',
`skin_id` BIGINT UNSIGNED NULL DEFAULT NULL COMMENT '当前使用的皮肤ID',
`cape_id` BIGINT UNSIGNED NULL DEFAULT NULL COMMENT '当前使用的披风ID',
`rsa_private_key` TEXT NOT NULL COMMENT '用于签名的RSA-2048私钥PEM格式',
`is_active` BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否为活跃档案',
`last_used_at` TIMESTAMP NULL COMMENT '最后使用时间',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`uuid`),
UNIQUE KEY `uk_name` (`name`),
INDEX `idx_user_id` (`user_id`),
INDEX `idx_active` (`is_active`),
CONSTRAINT `fk_profiles_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_profiles_skin` FOREIGN KEY (`skin_id`) REFERENCES `textures` (`id`) ON DELETE SET NULL,
CONSTRAINT `fk_profiles_cape` FOREIGN KEY (`cape_id`) REFERENCES `textures` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户角色信息表Minecraft档案';
-- Casbin权限管理相关表
-- casbin_rule表用于存储RBAC权限规则
CREATE TABLE `casbin_rule` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '规则ID',
`ptype` VARCHAR(100) NOT NULL COMMENT '策略类型p, g等',
`v0` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '主体(用户或角色)',
`v1` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '资源对象',
-- 材质表,存储皮肤和披风
CREATE TABLE `textures` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '材质的唯一ID',
`uploader_id` BIGINT UNSIGNED NOT NULL COMMENT '上传者的用户ID',
`name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '材质名称',
`description` TEXT COMMENT '材质描述',
`type` ENUM('SKIN', 'CAPE') NOT NULL COMMENT '材质类型(皮肤或披风)',
`url` VARCHAR(255) NOT NULL COMMENT '材质在MinIO中的永久访问URL',
`hash` VARCHAR(64) NOT NULL COMMENT '材质文件的SHA-256哈希值用于快速去重和校验',
`size` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '文件大小(字节)',
`is_public` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否公开到皮肤广场',
`download_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '下载次数',
`favorite_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '收藏次数',
"is_silm" BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否为细手臂模型Steve/Alex默认为粗手臂模型Steve',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态1:正常, 0:审核中, -1:已删除)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_hash` (`hash`),
INDEX `idx_uploader_id` (`uploader_id`),
INDEX `idx_public_type_status` (`is_public`, `type`, `status`),
INDEX `idx_download_count` (`download_count` DESC),
INDEX `idx_favorite_count` (`favorite_count` DESC),
CONSTRAINT `fk_textures_uploader` FOREIGN KEY (`uploader_id`) REFERENCES `user` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='皮肤与披风材质表';