自分の経歴や、プログラミングとデータベース設計> 。読んでみるべきだと思います。概念的には、デザインはかなりシンプルですが。あなたの説明は、たった2つのエンティティを識別します:
- 金融商品;および
- 引用。
したがって、属性を特定する必要があります。
金融商品:
- セキュリティコード;
- 市場;
- など
引用:
- タイムスタンプ;
- 金融商品;
- 入札価格;および
- 売値。
金融商品への参照は、外部キー と呼ばれるものです。 。各テーブルには、主キー も必要です。 、おそらく自動インクリメントフィールドです。
概念的にはかなり単純です。
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'
データセットが十分に大きい場合は、テーブルに(bid + ask)/ 2を含めて、その場で計算する必要がないようにすることができます。
さて、これが正規化されたビューです。この後、パフォーマンスの最適化を開始する必要がある場合があります。 数十億行を格納することについて、この質問を検討してください。 MySQL 。パーティショニングはMySQL5.1以降の機能です(かなり新しい)。
しかし、自分自身に問うべきもう1つの質問は、これです。このすべてのデータを保存する必要がありますか?私がこれを尋ねる理由は、私が以前オンラインブローキングで働いていて、非常に限られたウィンドウですべての取引を保存しただけであり、取引はあなたが望むように見える見積もりよりも少ないデータセットになるからです。
数十億行のデータを保存することは深刻な問題であり、解決するには本当に深刻な支援が必要です。