Вы на самом деле не говорите, каково ваше происхождение и как много вы знаете о программировании и дизайне базы данных . Похоже, вам следует почитать. Концептуально, хотя ваш дизайн довольно прост. Ваше описание идентифицирует только две сущности:
- Финансовый инструмент; и
- Quote.
Итак, вам нужно определить атрибуты.
Финансовый инструмент:
- Защитный код;
- Market;
- и т.д.
Цитата:
- Отметка;
- Финансовый инструмент;
- Цена предложения; и
- Спросите цену.
Ссылка на финансовый инструмент - это то, что называется внешним ключом . Каждой таблице также нужен первичный ключ , вероятно, просто поле с автоинкрементом.
Концептуально довольно просто.
CREATE TABLE instrument (
id BIGINT NOT NULL AUTO_INCREMENT,
code CHAR(4),
company_name VARCHAR(100),
PRIMARY KEY (id)
);
CREATE TABLE quote (
id BIGINT NOT NULL AUTO_INCREMENT,
intrument_id BIGINT NOT NULL,
dt DATETIME NOT NULL,
bid NUMERIC(8,3),
ask NUMERIC(8,3),
PRIMARY KEY (id)
)
CREATE INDEX instrument_idx1 ON instrument (code);
CREATE INDEX quote_idx1 ON quote (instrument_id, dt);
SELECT (bid + ask) / 2
FROM instrument i
JOIN quote q ON i.id = q.instrument_id
WHERE i.code = 'GOOG'
AND q.dt >= '01-06-2008' AND q.dt < '02-06-2008'
Если ваш набор данных достаточно большой, вы можете включить (bid + ask) / 2 в таблицу, чтобы вам не приходилось рассчитывать на лету.
Хорошо, это нормализованный вид. После этого вам может потребоваться начать оптимизацию производительности. Рассмотрим вопрос о хранении миллиардов строк в MySQL . Разбиение - это особенность MySQL 5.1+ (довольно новая).
Но еще один вопрос, который нужно задать себе: вам нужно хранить все эти данные? Причина, по которой я спрашиваю об этом, заключается в том, что я раньше работал в режиме онлайн-брокеров, и мы сохраняли все сделки только для очень ограниченного окна, и сделки были бы меньшим набором данных, чем котировки, которые, как вам кажется, нужны.
Хранение миллиардов строк данных является серьезной проблемой, и вам действительно нужна серьезная помощь.