Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Frage zum Datenbankdesign

Sie sagen nicht wirklich, was Ihr Hintergrund ist und wie viel Sie über Programmierung und Datenbankdesign . Es hört sich so an, als ob Sie etwas lesen sollten. Konzeptionell ist Ihr Design jedoch ziemlich einfach. Ihre Beschreibung identifiziert nur zwei Entitäten:

  • Finanzinstrument; und
  • Zitat.

Sie müssen also die Attribute identifizieren.

Finanzinstrument:

  • Sicherheitscode;
  • Markt;
  • usw.

Zitat:

  • Zeitstempel;
  • Finanzinstrument;
  • Gebotspreis; und
  • Preis verlangen.

Der Verweis auf das Finanzinstrument ist ein sogenannter Fremdschlüssel . Jede Tabelle benötigt außerdem einen Primärschlüssel , wahrscheinlich nur ein Auto-Increment-Feld.

Konzeptionell ziemlich einfach.

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'

Wenn Ihr Datensatz groß genug ist, möchten Sie vielleicht (Bid + Ask) / 2 in die Tabelle aufnehmen, damit Sie nicht spontan rechnen müssen.

Ok, das ist also die normalisierte Ansicht. Danach müssen Sie möglicherweise mit der Leistungsoptimierung beginnen. Betrachten Sie diese Frage zum Speichern von Milliarden von Zeilen in MySQL . Partitionierung ist eine Funktion von MySQL 5.1+ (ziemlich neu).

Aber eine weitere Frage, die Sie sich stellen sollten, lautet:Müssen Sie all diese Daten speichern? Der Grund, warum ich das frage, ist, dass ich früher im Online-Broking gearbeitet habe und wir alle Trades nur für ein sehr begrenztes Fenster gespeichert haben und Trades ein kleinerer Datensatz als Kurse sind, was Sie anscheinend wollen.

Das Speichern von Milliarden von Datenzeilen ist ein ernstes Problem, bei dessen Lösung Sie wirklich ernsthafte Hilfe benötigen.