Mysql
 sql >> Base de données >  >> RDS >> Mysql

Question de conception de base de données

Vous ne dites pas vraiment quel est votre parcours et ce que vous savez de la programmation et de la conception de base de données . Il semble que vous devriez faire un peu de lecture. Conceptuellement, votre conception est assez simple. Votre description identifie seulement deux entités :

  • Instrument financier ; et
  • Citation.

Vous devez donc identifier les attributs.

Instrument financier :

  • Code de sécurité ;
  • Marché ;
  • etc.

Citation :

  • Horodatage ;
  • Instrument financier ;
  • Prix de l'offre ; et
  • Prix demandé.

La référence à l'instrument financier est ce qu'on appelle une clé étrangère . Chaque table a également besoin d'une clé primaire , probablement juste un champ d'auto-incrémentation.

Conceptuellement assez simple.

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'

Si votre ensemble de données est suffisamment volumineux, vous pouvez inclure (enchère + demande) / 2 dans le tableau afin de ne pas avoir à calculer à la volée.

Ok, donc c'est la vue normalisée. Après cela, vous devrez peut-être commencer à optimiser les performances. Considérez cette question sur stocker des milliards de lignes dans MySQL . Le partitionnement est une fonctionnalité de MySQL 5.1+ (assez nouvelle).

Mais une autre question à se poser est celle-ci :avez-vous besoin de stocker toutes ces données ? La raison pour laquelle je pose cette question est que je travaillais dans le courtage en ligne et que nous ne stockions toutes les transactions que pour une fenêtre très limitée et que les transactions constitueraient un ensemble de données plus petit que les cotations, ce que vous semblez vouloir.

Le stockage de milliards de lignes de données est un problème sérieux et vous avez vraiment besoin d'une aide sérieuse pour le résoudre.