Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Pergunta de design de banco de dados


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.