Всъщност не казвате какъв е вашият опит и колко знаете за програмирането и дизайн на бази данни . Изглежда, че трябва да почетеш. Концептуално обаче вашият дизайн е доста прост. Вашето описание идентифицира само две единици:
- Финансов инструмент; и
- Цитат.
Така че трябва да идентифицирате атрибутите.
Финансов инструмент:
- Код за сигурност;
- Пазар;
- и др.
Цитат:
- Часово клеймо;
- Финансов инструмент;
- Офертна цена; и
- Попитайте цената.
Позоваването на финансовия инструмент е това, което се нарича външен ключ . Всяка таблица също се нуждае от първичен ключ , вероятно просто поле за автоматично увеличение.
Концептуално доста просто.
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'
Ако вашият набор от данни е достатъчно голям, може да искате да включите (оферта + запитване) / 2 в таблицата, за да не се налага да изчислявате в движение.
Добре, това е нормализираният изглед. След това може да се наложи да започнете да правите оптимизации на производителността. Помислете за този въпрос относно съхраняването на милиарди редове в MySQL . Разделянето на дялове е функция на MySQL 5.1+ (доста ново).
Но друг въпрос, който трябва да си зададете, е следният:трябва ли да съхранявате всички тези данни? Причината да попитам това е, че преди работех в онлайн брокерство и ние съхранявахме всички сделки само за много ограничен прозорец и сделките биха били по-малък набор от данни от котировките, което изглежда искате.
Съхраняването на милиарди редове данни е сериозен проблем и наистина се нуждаете от сериозна помощ, за да разрешите.