股票价格历史数据库设计

时间:2014-06-03 13:18:11

标签: sql-server database-design

我需要存储股票价格历史记录。以下是要求,

  1. 应提供前30天每小时数据
  2. 10年的历史必须保持,其中应包含每日高点和高点。低
  3. 有多种视图类型,

    • 日间 - 显示每小时数据(如果有),否则显示高和低低
    • 周明智 - 显示7天高点&低
    • 每月明智 - 显示30天高点&低
    • 每年明智 - 显示12个月高点&低(每个月的高点和低点, 所以12个条目)

    表格设计

    HourlyStockPrice
    
    symbol
    datetime
    price
    
    DayStockPrice
    
    symbol
    date
    high
    low
    
    MonthStockPrice
    
    symbol
    date
    high
    low
    

    由于数据库将有数百万条记录,我决定将信息存储在单独的表中,因此检索速度会更快。这样好吗?或者我只需要使用单个表,根据需要,必须查询和处理数据。下面是单表模式,

    StockPrice
    
    symbol
    datetime
    high
    low
    

    请告知。

1 个答案:

答案 0 :(得分:1)

您还没有提到这些表如何填充。我的解决方案是在主要股票价格表上设置一个触发器,用于填充单个历史表,其中包含插入的日期时间和价格前后的更新。

您应该可以使用历史记录表上的索引视图完成所有其余操作,将更新的(日期时间)字段分解为小时,天,月。

如果您不熟悉索引视图,则它们只是您可以编制索引的视图。索引数据与视图而不是表保持一致。

小时示例可能类似......

CREATE VIEW ivHourlyStockPrice
WITH SCHEMABINDING
AS
BEGIN
     SELECT symbol, convert(varchar(255),updated,106) as Day, select convert(char(2), updated,108) as Hour, AfterPrice as CurrentPrice
     FROM StockHistory
END

CREATE UNIQUE CLUSTERED INDEX idx_ivHourlyStockPrice ON ivHourlyStockPrice(symbol,Day,Hour,CurrentPrice)

然后做一些像......

select Day, Hour, CurrentPrice
from ivHourlyStockPrice
where Day='03 Jun 2014'
  and symbol='xxx'

会非常快。