-- ============================================ -- A股智投分析平台 - 数据库初始化脚本 -- 如果使用 Prisma,这些表会自动创建 -- 此脚本作为备用或独立部署时使用 -- ============================================ -- 设置字符集 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ============================================ -- 1. 市场指数表 (market_indices) -- 用途: 存储上证指数、深证成指、创业板指等市场指数 -- ============================================ CREATE TABLE IF NOT EXISTS `market_indices` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL COMMENT '指数名称,如上证指数', `code` VARCHAR(50) NOT NULL COMMENT '指数代码,如000001', `current` FLOAT DEFAULT 0 COMMENT '当前点位', `change` FLOAT DEFAULT 0 COMMENT '涨跌额', `change_percent` FLOAT DEFAULT 0 COMMENT '涨跌幅(%)', `volume` BIGINT DEFAULT 0 COMMENT '成交量', `turnover` BIGINT DEFAULT 0 COMMENT '成交额', `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_market_indices_name` (`name`), UNIQUE KEY `uk_market_indices_code` (`code`), KEY `idx_market_indices_code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='市场指数表'; -- ============================================ -- 2. 板块信息表 (sectors) -- 用途: 存储行业板块信息,如半导体、新能源等 -- ============================================ CREATE TABLE IF NOT EXISTS `sectors` ( `id` VARCHAR(36) NOT NULL COMMENT 'UUID', `name` VARCHAR(100) NOT NULL COMMENT '板块名称', `code` VARCHAR(50) NOT NULL COMMENT '板块代码', `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_sectors_name` (`name`), UNIQUE KEY `uk_sectors_code` (`code`), KEY `idx_sectors_code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='板块信息表'; -- ============================================ -- 3. 板块行情表 (sector_quotes) -- 用途: 存储板块实时行情数据 -- ============================================ CREATE TABLE IF NOT EXISTS `sector_quotes` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `sector_code` VARCHAR(50) NOT NULL COMMENT '板块代码', `current` FLOAT DEFAULT 0 COMMENT '当前点位', `change` FLOAT DEFAULT 0 COMMENT '涨跌额', `change_percent` FLOAT DEFAULT 0 COMMENT '涨跌幅(%)', `volume` BIGINT DEFAULT 0 COMMENT '成交量', `turnover` BIGINT DEFAULT 0 COMMENT '成交额', `momentum_score` FLOAT DEFAULT 50 COMMENT '动量分数(0-100)', `rank` INT DEFAULT 0 COMMENT '排名', `previous_rank` INT DEFAULT 0 COMMENT '上一期排名', `quote_time` DATETIME NOT NULL COMMENT '行情时间', PRIMARY KEY (`id`), KEY `idx_sector_quotes_code` (`sector_code`), KEY `idx_sector_quotes_time` (`quote_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='板块行情表'; -- ============================================ -- 4. 板块K线数据表 (sector_klines) -- 用途: 存储板块的历史K线数据 -- ============================================ CREATE TABLE IF NOT EXISTS `sector_klines` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `sector_code` VARCHAR(50) NOT NULL COMMENT '板块代码', `period` VARCHAR(20) NOT NULL COMMENT '周期: day/week/month', `date` DATE NOT NULL COMMENT '日期', `open` FLOAT DEFAULT 0 COMMENT '开盘价', `high` FLOAT DEFAULT 0 COMMENT '最高价', `low` FLOAT DEFAULT 0 COMMENT '最低价', `close` FLOAT DEFAULT 0 COMMENT '收盘价', `volume` BIGINT DEFAULT 0 COMMENT '成交量', PRIMARY KEY (`id`), UNIQUE KEY `uk_sector_klines` (`sector_code`, `period`, `date`), KEY `idx_sector_klines_code` (`sector_code`), KEY `idx_sector_klines_date` (`date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='板块K线数据表'; -- ============================================ -- 5. 股票信息表 (stocks) -- 用途: 存储股票基础信息 -- ============================================ CREATE TABLE IF NOT EXISTS `stocks` ( `id` VARCHAR(36) NOT NULL COMMENT 'UUID', `code` VARCHAR(50) NOT NULL COMMENT '股票代码,如000001', `name` VARCHAR(100) NOT NULL COMMENT '股票名称', `sector_code` VARCHAR(50) DEFAULT NULL COMMENT '所属板块代码', `market_cap` BIGINT DEFAULT NULL COMMENT '总市值', `pe` FLOAT DEFAULT NULL COMMENT '市盈率', `pb` FLOAT DEFAULT NULL COMMENT '市净率', `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_stocks_code` (`code`), KEY `idx_stocks_code` (`code`), KEY `idx_stocks_sector` (`sector_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='股票信息表'; -- ============================================ -- 6. 股票行情表 (stock_quotes) -- 用途: 存储股票实时行情快照 -- ============================================ CREATE TABLE IF NOT EXISTS `stock_quotes` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `stock_code` VARCHAR(50) NOT NULL COMMENT '股票代码', `price` FLOAT DEFAULT 0 COMMENT '当前价', `open` FLOAT DEFAULT 0 COMMENT '开盘价', `high` FLOAT DEFAULT 0 COMMENT '最高价', `low` FLOAT DEFAULT 0 COMMENT '最低价', `pre_close` FLOAT DEFAULT 0 COMMENT '昨收价', `volume` BIGINT DEFAULT 0 COMMENT '成交量', `turnover` BIGINT DEFAULT 0 COMMENT '成交额', `change_percent` FLOAT DEFAULT 0 COMMENT '涨跌幅(%)', `turnover_rate` FLOAT DEFAULT NULL COMMENT '换手率(%)', `amplitude` FLOAT DEFAULT NULL COMMENT '振幅(%)', `quote_time` DATETIME NOT NULL COMMENT '行情时间', PRIMARY KEY (`id`), KEY `idx_stock_quotes_code` (`stock_code`), KEY `idx_stock_quotes_time` (`quote_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='股票行情表'; -- ============================================ -- 7. 股票K线数据表 (stock_klines) -- 用途: 存储股票历史K线数据(日K/周K/月K) -- ============================================ CREATE TABLE IF NOT EXISTS `stock_klines` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `stock_code` VARCHAR(50) NOT NULL COMMENT '股票代码', `period` VARCHAR(20) NOT NULL COMMENT '周期: day/week/month', `date` DATE NOT NULL COMMENT '日期', `open` FLOAT DEFAULT 0 COMMENT '开盘价', `high` FLOAT DEFAULT 0 COMMENT '最高价', `low` FLOAT DEFAULT 0 COMMENT '最低价', `close` FLOAT DEFAULT 0 COMMENT '收盘价', `volume` BIGINT DEFAULT 0 COMMENT '成交量', `ma5` FLOAT DEFAULT NULL COMMENT '5日均线', `ma10` FLOAT DEFAULT NULL COMMENT '10日均线', `ma20` FLOAT DEFAULT NULL COMMENT '20日均线', `ma30` FLOAT DEFAULT NULL COMMENT '30日均线', `ma60` FLOAT DEFAULT NULL COMMENT '60日均线', PRIMARY KEY (`id`), UNIQUE KEY `uk_stock_klines` (`stock_code`, `period`, `date`), KEY `idx_stock_klines_code` (`stock_code`), KEY `idx_stock_klines_date` (`date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='股票K线数据表'; -- ============================================ -- 8. 新高新低股票记录表 (high_low_stocks) -- 用途: 存储创N日新高/新低的股票记录 -- ============================================ CREATE TABLE IF NOT EXISTS `high_low_stocks` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `stock_code` VARCHAR(50) NOT NULL COMMENT '股票代码', `type` VARCHAR(10) NOT NULL COMMENT '类型: high新高/low新低', `price` FLOAT DEFAULT 0 COMMENT '触发价格', `date` DATE NOT NULL COMMENT '触发日期', `days_to_highlow` INT DEFAULT 0 COMMENT '距离前高/低的天数', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_high_low_code` (`stock_code`), KEY `idx_high_low_type` (`type`), KEY `idx_high_low_date` (`date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='新高新低股票记录表'; -- ============================================ -- 9. 动量股票推荐表 (momentum_stocks) -- 用途: 存储动量策略选出的推荐股票 -- ============================================ CREATE TABLE IF NOT EXISTS `momentum_stocks` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `stock_code` VARCHAR(50) NOT NULL COMMENT '股票代码', `momentum_score` FLOAT DEFAULT 0 COMMENT '动量分数(0-100)', `tags` TEXT COMMENT '标签JSON数组,如["强势突破","量价齐升"]', `volume_ratio` FLOAT DEFAULT 0 COMMENT '量比', `break_through` TINYINT(1) DEFAULT 0 COMMENT '是否突破: 0/1', `date` DATE NOT NULL COMMENT '日期', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_momentum_code` (`stock_code`), KEY `idx_momentum_date` (`date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='动量股票推荐表'; -- ============================================ -- 10. 用户表 (users) -- 用途: 存储用户信息 -- ============================================ CREATE TABLE IF NOT EXISTS `users` ( `id` VARCHAR(36) NOT NULL COMMENT 'UUID', `username` VARCHAR(50) NOT NULL COMMENT '用户名', `email` VARCHAR(100) NOT NULL COMMENT '邮箱', `password` VARCHAR(255) NOT NULL COMMENT '加密密码', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_users_username` (`username`), UNIQUE KEY `uk_users_email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'; -- ============================================ -- 11. 用户自选股表 (user_favorites) -- 用途: 存储用户的自选股列表 -- ============================================ CREATE TABLE IF NOT EXISTS `user_favorites` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` VARCHAR(36) NOT NULL COMMENT '用户ID', `stock_code` VARCHAR(50) NOT NULL COMMENT '股票代码', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_user_favorites` (`user_id`, `stock_code`), KEY `idx_user_favorites_user` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户自选股表'; -- 恢复外键检查 SET FOREIGN_KEY_CHECKS = 1; -- 输出创建结果 SELECT 'Database tables initialized successfully' AS result;