sql >> Database >  >> RDS >> Mysql

Vraag over databaseontwerp

Je zegt niet echt wat je achtergrond is en hoeveel je weet over programmeren en database-ontwerp . Het klinkt alsof je wat moet lezen. Conceptueel is je ontwerp echter vrij eenvoudig. Uw beschrijving identificeert slechts twee entiteiten:

  • Financieel instrument; en
  • Citaat.

U moet dus de attributen identificeren.

Financieel instrument:

  • Beveiligingscode;
  • Markt;
  • enz.

Citaat:

  • Tijdstempel;
  • Financieel instrument;
  • Biedprijs; en
  • Vraag prijs.

De verwijzing naar het financiële instrument is een zogenaamde buitenlandse sleutel . Elke tabel heeft ook een primaire sleutel nodig , waarschijnlijk alleen een veld voor automatisch ophogen.

Conceptueel vrij eenvoudig.

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'

Als uw dataset groot genoeg is, wilt u misschien (bid + ask) / 2 in de tabel opnemen, zodat u niet on-the-fly hoeft te rekenen.

Ok, dus dat is de genormaliseerde weergave. Hierna moet u mogelijk prestatie-optimalisaties gaan maken. Beschouw deze vraag over het opslaan van miljarden rijen in MijnSQL . Partitioneren is een functie van MySQL 5.1+ (vrij nieuw).

Maar een andere vraag die je jezelf moet stellen is:moet je al deze gegevens opslaan? De reden dat ik dit vraag, is dat ik vroeger in online makelaardij werkte en we alle transacties slechts voor een zeer beperkt venster hebben opgeslagen en transacties zouden een kleinere set gegevens zijn dan offertes, wat u lijkt te willen.

Het opslaan van miljarden rijen gegevens is een serieus probleem en je hebt echt serieuze hulp nodig om het op te lossen.



  1. Prestaties van XA versus niet-XA JDBC-stuurprogramma's?

  2. Dynamische databasetabellen in django

  3. java jdbc mysql-connector:hoe loskoppelen op te lossen na een lange inactieve tijd

  4. MySQL:een nieuwe tabel maken met informatie uit een query