Você realmente não diz qual é sua formação e quanto sabe sobre programação e design de banco de dados . Parece que você deve fazer alguma leitura. Conceitualmente, embora seu design seja bastante simples. Sua descrição identifica apenas duas entidades:
- Instrumento financeiro; e
- Cotação.
Então você precisa identificar os atributos.
Instrumento financeiro:
- Código de segurança;
- Mercado;
- etc.
Citar:
- Carimbo de data e hora;
- Instrumento financeiro;
- Preço do lance; e
- Pergunte o preço.
A referência ao instrumento financeiro é chamada de chave estrangeira . Cada tabela também precisa de uma chave primária , provavelmente apenas um campo de incremento automático.
Conceitualmente bastante simples.
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'
Se o seu conjunto de dados for suficientemente grande, você pode querer incluir (bid + ask) / 2 na tabela para que você não precise calcular em tempo real.
Ok, então essa é a visão normalizada. Depois disso, você pode precisar começar a fazer otimizações de desempenho. Considere esta pergunta sobre armazenar bilhões de linhas em MySQL . O particionamento é um recurso do MySQL 5.1+ (bastante novo).
Mas outra pergunta a se fazer é esta:você precisa armazenar todos esses dados? A razão pela qual pergunto isso é que eu costumava trabalhar em corretagem on-line e apenas armazenávamos todos os negócios para uma janela muito limitada e os negócios seriam um conjunto menor de dados do que as cotações, o que você parece querer.
Armazenar bilhões de linhas de dados é um problema sério e você realmente precisa de ajuda séria para resolver.