-- OSS Community 数据库结构 CREATE DATABASE IF NOT EXISTS oss_community CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE oss_community; -- 用户表 CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(100) NOT NULL UNIQUE, password_hash VARCHAR(255) NOT NULL, avatar VARCHAR(255) DEFAULT '', bio TEXT, role ENUM('admin', 'moderator', 'member') DEFAULT 'member', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 分类表 CREATE TABLE IF NOT EXISTS categories ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, slug VARCHAR(100) NOT NULL UNIQUE, description TEXT, icon VARCHAR(50) DEFAULT 'folder', sort_order INT DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 帖子表 CREATE TABLE IF NOT EXISTS posts ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, category_id INT NOT NULL, title VARCHAR(200) NOT NULL, slug VARCHAR(200) NOT NULL UNIQUE, content TEXT NOT NULL, views INT DEFAULT 0, likes INT DEFAULT 0, is_pinned TINYINT(1) DEFAULT 0, is_locked TINYINT(1) DEFAULT 0, 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, FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE CASCADE, FULLTEXT(title, content) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 回复表 CREATE TABLE IF NOT EXISTS replies ( id INT AUTO_INCREMENT PRIMARY KEY, post_id INT NOT NULL, user_id INT NOT NULL, content TEXT NOT NULL, likes INT DEFAULT 0, is_solution TINYINT(1) DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 点赞表 CREATE TABLE IF NOT EXISTS likes ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, post_id INT DEFAULT NULL, reply_id INT DEFAULT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY unique_like (user_id, post_id, reply_id), FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE SET NULL, FOREIGN KEY (reply_id) REFERENCES replies(id) ON DELETE SET NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 标签表 CREATE TABLE IF NOT EXISTS tags ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL UNIQUE, slug VARCHAR(50) NOT NULL UNIQUE, color VARCHAR(7) DEFAULT '#06b6d4' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 帖子标签关联表 CREATE TABLE IF NOT EXISTS post_tags ( post_id INT NOT NULL, tag_id INT NOT NULL, PRIMARY KEY (post_id, tag_id), FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE, FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 初始数据 INSERT IGNORE INTO categories (name, slug, description, icon, sort_order) VALUES ('公告', 'announcements', '官方公告和重要通知', 'megaphone', 1), ('问答', 'q-a', '提问与解答,互助交流', 'question', 2), ('讨论', 'discussions', '技术讨论与想法分享', 'chat', 3), ('插件市场', 'plugins', '插件展示与推荐', 'puzzle', 4), ('反馈', 'feedback', 'Bug 反馈与功能建议', 'bug', 5); INSERT IGNORE INTO tags (name, slug, color) VALUES ('Go', 'go', '#00add8'), ('插件', 'plugin', '#8b5cf6'), ('安装', 'install', '#22c55e'), ('配置', 'config', '#3b82f6'), ('求助', 'help', '#f59e0b');