sql >> Databáze >  >> RDS >> Mysql

Otázka návrhu databáze

Ve skutečnosti neříkáte, jaké máte vzdělání a kolik toho víte o programování a designu databáze . Zní to, jako byste si měli něco přečíst. Koncepčně je váš návrh poměrně jednoduchý. Váš popis identifikuje pouhé dvě entity:

  • finanční nástroj; a
  • Citace.

Musíte tedy identifikovat atributy.

Finanční nástroj:

  • Bezpečnostní kód;
  • trh;
  • atd.

Citace:

  • Časové razítko;
  • finanční nástroj;
  • Cena nabídky; a
  • Požádejte o cenu.

Odkaz na finanční nástroj je to, co se nazývá cizí klíč . Každá tabulka také potřebuje primární klíč , pravděpodobně jen pole automatického zvýšení.

Koncepčně poměrně jednoduché.

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'

Pokud je vaše datová sada dostatečně velká, možná budete chtít zahrnout (nabídka + dotaz) / 2 do tabulky, abyste nemuseli počítat za běhu.

Dobře, to je normalizovaný pohled. Poté možná budete muset začít s optimalizací výkonu. Zvažte tuto otázku o ukládání miliard řádků v MySQL . Dělení oddílů je funkce MySQL 5.1+ (zcela nová).

Ale další otázka, kterou si musíte položit, je tato:potřebujete všechna tato data uchovávat? Důvod, proč se na to ptám, je ten, že jsem dříve pracoval v online makléřství a všechny obchody jsme ukládali pouze po velmi omezenou dobu a obchody by představovaly menší soubor dat než kotace, které, jak se zdá, chcete.

Ukládání miliard řádků dat je vážný problém, s jehož vyřešením opravdu potřebujete seriózní pomoc.



  1. Hledání funkční závislosti

  2. PHP/MySQL Vložit hodnoty null

  3. Jak získat poslední den minulého týdne v SQL?

  4. Jak správně nastavit proměnnou ORACLE_HOME na Ubuntu 9.x?