Files
image-pichost/database.sql

166 lines
6.2 KiB
MySQL
Raw Normal View History

2025-12-06 00:20:49 +00:00
-- PicHost 完整数据库结构
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `users`, `images`, `tags`, `image_tags`, `password_resets`, `feedbacks`, `image_feedbacks`, `user_settings`, `notification_types`, `user_notification_settings`, `notifications`, `file_operations`;
-- 用户表
CREATE TABLE `users` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(50) UNIQUE NOT NULL,
`email` VARCHAR(100) UNIQUE NOT NULL,
`password` VARCHAR(255) NOT NULL,
`role` ENUM('user', 'admin') DEFAULT 'user',
`is_verified` BOOLEAN DEFAULT FALSE,
`verification_code` VARCHAR(255),
`api_key` VARCHAR(255),
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 图片表
CREATE TABLE `images` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
`title` VARCHAR(255),
`description` TEXT,
`filename` VARCHAR(255) NOT NULL,
`is_public` BOOLEAN DEFAULT TRUE,
`file_size` INT,
`mime_type` VARCHAR(100),
`views` INT DEFAULT 0,
`uploaded_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 标签表
CREATE TABLE `tags` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(50) UNIQUE NOT NULL,
`color` VARCHAR(7) DEFAULT '#3498db',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 图片标签关联表
CREATE TABLE `image_tags` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`image_id` INT NOT NULL,
`tag_id` INT NOT NULL,
FOREIGN KEY (`image_id`) REFERENCES `images`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`tag_id`) REFERENCES `tags`(`id`) ON DELETE CASCADE,
UNIQUE KEY `unique_image_tag` (`image_id`, `tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 密码重置表
CREATE TABLE `password_resets` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`email` VARCHAR(100) NOT NULL,
`token` VARCHAR(255) NOT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`expires_at` TIMESTAMP NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 反馈表
CREATE TABLE `feedbacks` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NULL,
`type` ENUM('bug', 'feature', 'suggestion', 'other') NOT NULL,
`subject` VARCHAR(255) NOT NULL,
`message` TEXT NOT NULL,
`status` ENUM('pending', 'reviewed', 'resolved') DEFAULT 'pending',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 图片反馈表
CREATE TABLE `image_feedbacks` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`image_id` INT NOT NULL,
`user_id` INT NULL,
`type` ENUM('like', 'report') NOT NULL,
`comment` TEXT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`image_id`) REFERENCES `images`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 用户设置表
CREATE TABLE `user_settings` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL UNIQUE,
`dark_mode` BOOLEAN DEFAULT FALSE,
`language` VARCHAR(10) DEFAULT 'zh-CN',
`items_per_page` INT DEFAULT 20,
`email_notifications` BOOLEAN DEFAULT TRUE,
`browser_notifications` BOOLEAN DEFAULT TRUE,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 通知类型表
CREATE TABLE `notification_types` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(50) NOT NULL,
`description` TEXT,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 用户通知设置表
CREATE TABLE `user_notification_settings` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
`notification_type_id` INT NOT NULL,
`enabled` BOOLEAN DEFAULT TRUE,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY `unique_user_notification` (`user_id`, `notification_type_id`),
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`notification_type_id`) REFERENCES `notification_types`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 通知表
CREATE TABLE `notifications` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
`type_id` INT NOT NULL,
`title` VARCHAR(255) NOT NULL,
`message` TEXT NOT NULL,
`related_url` VARCHAR(500) NULL,
`is_read` BOOLEAN DEFAULT FALSE,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`type_id`) REFERENCES `notification_types`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 文件操作记录表
CREATE TABLE `file_operations` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NULL,
`operation` ENUM('upload', 'delete', 'rename', 'move') NOT NULL,
`file_path` VARCHAR(500) NOT NULL,
`old_path` VARCHAR(500) NULL,
`file_size` INT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 插入默认数据
INSERT IGNORE INTO `tags` (`id`, `name`, `color`) VALUES
(1, '风景', '#27ae60'),
(2, '人物', '#e74c3c'),
(3, '动物', '#f39c12'),
(4, '建筑', '#9b59b6'),
(5, '美食', '#e67e22'),
(6, '艺术', '#1abc9c'),
(7, '科技', '#3498db'),
(8, '运动', '#2ecc71');
INSERT IGNORE INTO `notification_types` (`id`, `name`, `description`) VALUES
(1, 'announcement', '系统公告和更新通知'),
(2, 'tips', '使用技巧和最佳实践'),
(3, 'feedback_result', '反馈处理结果'),
(4, 'image_feedback', '图片反馈通知');
-- 创建管理员用户 (密码: admin123)
INSERT IGNORE INTO `users` (`id`, `username`, `email`, `password`, `role`, `is_verified`) VALUES
(1, 'admin', 'admin@66ghz.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin', 1);
SET FOREIGN_KEY_CHECKS=1;