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.