您并没有真正说出您的背景以及您对编程和数据库设计的了解程度。听起来你应该做一些阅读。从概念上讲,尽管您的设计相当简单。您的描述仅确定了两个实体:
所以你需要然后识别属性。
金融工具:
引用:
对金融工具的引用就是所谓的外键。每个表还需要一个主键,可能只是一个自增字段。
概念上相当简单。
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 中存储数十亿行的问题。分区是 MySQL 5.1+ 的一个特性(相当新)。
但是要问自己的另一个问题是:您需要存储所有这些数据吗?我问这个的原因是我以前从事在线经纪工作,我们只在一个非常有限的窗口中存储所有交易,交易将是比报价更小的数据集,你似乎想要的。
存储数十亿行数据是一个严重的问题,您确实需要认真的帮助来解决这个问题。