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

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