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.
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.
数据库设计文档
一、设计概述
本数据库设计用于存储股票交易数据、市场统计信息和板块动量数据,支持股票分析系统的运行。设计采用关系型数据库,主要存储以下数据:
股票基本信息
股票实时行情
K线历史数据
板块信息
板块动量数据
市场统计数据
二、数据模型设计
1. 股票基本信息表 (stock_basic)
字段名
数据类型
约束
描述
code
VARCHAR(10)
PRIMARY KEY
股票代码
name
VARCHAR(50)
NOT NULL
股票名称
sector_code
VARCHAR(10)
NULL
所属板块代码
list_date
DATE
NULL
上市日期
is_etf
BOOLEAN
DEFAULT FALSE
是否ETF
market
VARCHAR(10)
NULL
市场(沪市/深市)
updated_at
TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
更新时间
2. 股票实时行情表 (stock_quote)
字段名
数据类型
约束
描述
code
VARCHAR(10)
PRIMARY KEY
股票代码
price
DECIMAL(10,2)
NULL
最新价
change_pct
DECIMAL(6,2)
NULL
涨跌幅(%)
change_amount
DECIMAL(10,2)
NULL
涨跌额
volume
BIGINT
NULL
成交量
amount
DECIMAL(18,2)
NULL
成交额
turnover_rate
DECIMAL(8,4)
NULL
换手率(%)
amplitude
DECIMAL(6,2)
NULL
振幅(%)
high
DECIMAL(10,2)
NULL
最高价
low
DECIMAL(10,2)
NULL
最低价
open
DECIMAL(10,2)
NULL
开盘价
updated_at
TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
更新时间
3. 股票K线数据表 (stock_kline)
字段名
数据类型
约束
描述
id
BIGINT
PRIMARY KEY AUTO_INCREMENT
自增主键
code
VARCHAR(10)
NOT NULL
股票代码
date
DATE
NOT NULL
日期
open
DECIMAL(10,2)
NULL
开盘价
high
DECIMAL(10,2)
NULL
最高价
low
DECIMAL(10,2)
NULL
最低价
close
DECIMAL(10,2)
NULL
收盘价
volume
BIGINT
NULL
成交量
amount
DECIMAL(18,2)
NULL
成交额
pct_chg
DECIMAL(6,2)
NULL
涨跌幅(%)
INDEX
(code, date)
复合索引
4. 板块信息表 (sector_info)
字段名
数据类型
约束
描述
code
VARCHAR(10)
PRIMARY KEY
板块代码
name
VARCHAR(50)
NOT NULL
板块名称
stock_count
INT
DEFAULT 0
成分股数量
updated_at
TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
更新时间
5. 板块动量表 (sector_momentum)
字段名
数据类型
约束
描述
id
BIGINT
PRIMARY KEY AUTO_INCREMENT
自增主键
sector_code
VARCHAR(10)
NOT NULL
板块代码
date
DATE
NOT NULL
日期
momentum_value
DECIMAL(10,4)
NULL
动量值
n
INT
NULL
板块内动量个股数
N
INT
NULL
板块总个股数
rank
INT
NULL
动量排名
rank_change
INT
NULL
排名变化
updated_at
TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
更新时间
INDEX
(sector_code, date)
复合索引
6. 市场统计表 (market_stats)
字段名
数据类型
约束
描述
id
BIGINT
PRIMARY KEY AUTO_INCREMENT
自增主键
date
DATE
NOT NULL UNIQUE
日期
up_count
INT
DEFAULT 0
上涨家数
down_count
INT
DEFAULT 0
下跌家数
flat_count
INT
DEFAULT 0
平盘家数
limit_up_count
INT
DEFAULT 0
涨停家数
limit_down_count
INT
DEFAULT 0
跌停家数
total_amount
DECIMAL(20,2)
NULL
两市成交额
updated_at
TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
更新时间
三、索引设计
1. 主键索引
stock_basic.code
stock_quote.code
sector_info.code
stock_kline.id
sector_momentum.id
market_stats.id
2. 复合索引
stock_kline(code, date):加速按股票代码和日期范围查询
sector_momentum(sector_code, date):加速按板块和日期查询
3. 唯一索引
market_stats.date:确保每日只存储一条市场统计记录
四、数据同步策略
1. 实时数据
同步频率 : 30秒一次
同步方式 :批量更新
存储策略 :只保留最新数据
2. K线数据
同步频率 :每日收盘后
同步方式 :增量更新
存储策略 :保留完整历史数据
3. 板块数据
同步频率 :每日一次
同步方式 :全量更新
存储策略 :保留完整历史数据
4. 市场统计
同步频率 :每日收盘后
同步方式 :增量更新
存储策略 :保留完整历史数据
五、数据清理策略
1. 实时数据
2. K线数据
3. 板块动量
4. 市场统计
六、性能优化建议
分区表 :对 stock_kline 表按日期分区,提高查询性能
批量操作 :使用批量插入和更新,减少数据库连接次数
索引优化 :根据查询模式优化索引
缓存层 : 使用Redis缓存热点数据
读写分离 :主库用于写入,从库用于读取
连接池 :使用数据库连接池,减少连接建立开销
七、扩展性考虑
分库分表 :数据量增长时,可考虑按股票代码分库分表
时间序列数据库 : K线数据可考虑使用时间序列数据库( 如InfluxDB)
数据仓库 :历史数据可迁移到数据仓库,用于分析
API接口 : 提供标准化的API接口, 支持外部系统集成
八、安全考虑
访问控制 :设置数据库用户权限,限制访问
数据加密 :敏感数据加密存储
备份策略 :定期备份数据库,确保数据安全
审计日志 :记录数据库操作日志,便于追溯
九、技术选型
数据库 : PostgreSQL 14+
连接池 : PgBouncer
ORM : SQLAlchemy
缓存 : Redis 7.0+
监控 : Prometheus + Grafana
十、部署建议
开发环境 :单节点数据库
测试环境 :主从复制
生产环境 :
数据库:主从复制 + 自动故障转移
Redis: 主从复制 + 哨兵模式
定期备份:每日全量备份,每小时增量备份