Mysql
 sql >> Database >  >> RDS >> Mysql

Domanda di progettazione del database

Non dici davvero quale sia il tuo background e quanto sai di programmazione e progettazione di database . Sembra che dovresti leggere un po'. Concettualmente anche se il tuo design è abbastanza semplice. La tua descrizione identifica solo due entità:

  • Strumento finanziario; e
  • Citazione.

Quindi è necessario identificare gli attributi.

Strumento finanziario:

  • Codice di sicurezza;
  • Mercato;
  • ecc.

Citazione:

  • Data e ora;
  • Strumento finanziario;
  • Prezzo dell'offerta; e
  • Chiedi prezzo.

Il riferimento allo strumento finanziario è quella che viene chiamata chiave straniera . Ogni tabella necessita anche di una chiave primaria , probabilmente solo un campo di incremento automatico.

Concettualmente abbastanza semplice.

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 il tuo set di dati è sufficientemente grande, potresti voler includere (offerta + domanda) / 2 nella tabella in modo da non dover calcolare al volo.

Ok, quindi questa è la visualizzazione normalizzata. Successivamente potrebbe essere necessario iniziare a effettuare ottimizzazioni delle prestazioni. Considera questa domanda su memorizzazione di miliardi di righe in MySQL . Il partizionamento è una funzionalità di MySQL 5.1+ (abbastanza nuovo).

Ma un'altra domanda da porsi è questa:hai bisogno di memorizzare tutti questi dati? Il motivo per cui lo chiedo è che lavoravo nell'intermediazione online e abbiamo archiviato tutte le operazioni solo per una finestra molto limitata e le operazioni sarebbero un insieme di dati più piccolo rispetto alle quotazioni, cosa che sembra volere.

L'archiviazione di miliardi di righe di dati è un problema serio e hai davvero bisogno di un aiuto serio per risolverlo.