You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

228 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

-- ============================================
-- 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;