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.

6.7 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.

数据库设计文档

一、设计概述

本数据库设计用于存储股票交易数据、市场统计信息和板块动量数据,支持股票分析系统的运行。设计采用关系型数据库,主要存储以下数据:

  • 股票基本信息
  • 股票实时行情
  • 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. 市场统计

  • 保留完整历史数据,不清理

六、性能优化建议

  1. 分区表:对 stock_kline 表按日期分区,提高查询性能
  2. 批量操作:使用批量插入和更新,减少数据库连接次数
  3. 索引优化:根据查询模式优化索引
  4. 缓存层使用Redis缓存热点数据
  5. 读写分离:主库用于写入,从库用于读取
  6. 连接池:使用数据库连接池,减少连接建立开销

七、扩展性考虑

  1. 分库分表:数据量增长时,可考虑按股票代码分库分表
  2. 时间序列数据库K线数据可考虑使用时间序列数据库如InfluxDB
  3. 数据仓库:历史数据可迁移到数据仓库,用于分析
  4. API接口提供标准化的API接口支持外部系统集成

八、安全考虑

  1. 访问控制:设置数据库用户权限,限制访问
  2. 数据加密:敏感数据加密存储
  3. 备份策略:定期备份数据库,确保数据安全
  4. 审计日志:记录数据库操作日志,便于追溯

九、技术选型

  • 数据库PostgreSQL 14+
  • 连接池PgBouncer
  • ORMSQLAlchemy
  • 缓存Redis 7.0+
  • 监控Prometheus + Grafana

十、部署建议

  1. 开发环境:单节点数据库
  2. 测试环境:主从复制
  3. 生产环境
    • 数据库:主从复制 + 自动故障转移
    • Redis主从复制 + 哨兵模式
    • 定期备份:每日全量备份,每小时增量备份