Я создаю схему базы данных для хранения исторических данных запаса. В настоящее время у меня есть схема, как показано ниже.
Мои требования состоят в том, чтобы хранить "данные бара" (дата, открытие, высокий, низкий, закрытый объем) для нескольких символов запаса. Каждый символ может также иметь несколько таймфреймов (например, Google Weekly bars и Google Daily).
Моя текущая схема помещает большую часть данных в таблицу 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 для заданного символа/таймфрейма, затем сделайте выбор в таблице OHLCV, где совпадает идентификатор таймфрейма.