我正在创建一个用于存储历史股票数据的数据库模式。我目前有一个如下所示的架构。
我的要求是存储多个股票代码的“条形数据”(日期、开盘价、最高价、最低价、收盘量)。每个交易品种也可能有多个时间范围(例如 Google 每周柱和 Google 每日柱)。
我当前的模式将大部分数据放在 OHLCV 表中。我远不是数据库专家,我很好奇这是否太天真。非常欢迎建设性的意见。
CREATE TABLE Exchange (exchange TEXT UNIQUE NOT NULL);
CREATE TABLE Symbol (symbol TEXT UNIQUE NOT NULL, exchangeID INTEGER NOT NULL);
CREATE TABLE Timeframe (timeframe TEXT NOT NULL, symbolID INTEGER NOT NULL);
CREATE TABLE OHLCV (date TEXT NOT NULL CHECK (date LIKE '____-__-__ __:__:__'),
open REAL NOT NULL,
high REAL NOT NULL,
low REAL NOT NULL,
close REAL NOT NULL,
volume INTEGER NOT NULL,
timeframeID INTEGER NOT NULL);
这意味着我的查询当前类似于:查找给定符号/时间帧的 timeframeID,然后在 timeframeID 匹配的 OHLCV 表上进行选择。