2013-03-23 506 views
4

我最近一直給予了140家企業建模數據庫適合 店股價的分配。數據將從所有這些公司每隔15分鐘收集一次,每天8.5小時收集。我 現在面臨的問題是如何建立數據庫,以實現快速搜索/取 給出這個數據。數據庫建模股票價格

一個解決辦法是一切都在一個表中存儲與以下幾列:

| Company name | Price | Date | Etc... | 

或者我可以創建一個表中的每個公司只存儲價格和 日期收集數據時(和其他參數未知atm)。

你對這些類型的解決方案的想法?我希望這個問題得到足夠詳細的解釋 ,否則請讓我知道。

任何其他解決辦法,將不勝感激!

回答

2

考慮到您可能生成的大量記錄,我認爲您關注的是性能 - 140家公司* 4個數據點/小時* 8.5小時* 250個交易日/年意味着您在尋找大約120萬數據點每年。

現代關係數據庫系統,可以輕鬆處理的記錄,這個數字 - 但有一些重要的考慮因素 - 在一個表 - 我不明白的問題與程式儲存100年的數據點。

所以,是的,你的初始設計可能是最好的:

公司名稱|價格|日期|等等...|

在公司名稱和日期上創建索引;這將允許您來回答這樣的問題:

  • 什麼最高股價爲X公司
  • 什麼是股價爲X公司於日期Y
  • 的日期Y,什麼是份額最高價格

爲了防止性能問題,我想建立一個測試數據庫,並用樣本數據來填充它(如dbMonster工具使這個容易),然後建立你(想你)將運行對查詢真實系統;使用數據庫系統的調整工具來優化這些查詢和/或索引。

+0

謝謝,這給了我很大的見解。 – RobertH 2013-03-24 13:56:08

3

第一,更重要的問題是什麼,將根據此表來執行的查詢的類型和使用模式。這是一個聯機事務處理(OLTP)應用程序,絕大多數查詢是針對單個記錄還是最多一小組記錄?或者在線分析處理應用程序中,大多數查詢都需要讀取和處理大量數據以生成聚合和分析。這兩種不同類型的系統應該以不同的方式建模。

如果它是第一種類型的應用程序(OLTP),則您的第一個選項是更好的選項,但查詢的使用模式和類型對於確定放置在表上的索引類型仍然很重要。

如果它是一個OLAP應用程序(和存儲數十億股價的系統聽起來更像是一個OLAP應用程序),那麼您設置的數據結構可能會更好地組織起來存儲預先彙總的數據值,或者甚至全部方式的使用多維數據庫就像一個OLAP cube的基礎上,star schema

3

將它們放入一張表中。現代數據庫引擎可以輕鬆處理您指定的這些卷。

rowid | StockCode | priceTimeInUTC | PriceCode | AskPrice | BidPrice |卷

  • rowid:Identity UniqueIdentifier。
  • StockCode而不是公司。公司有多種類型的襪子。
  • PriceTimeInUTC是將任何日期時間標準化爲特定的時區。
  • 還datetime2(更準確)。
  • PriceCode用於識別它的價格是什麼:選項/期貨/普通股,PreferredStock等
  • AskPrice是買入價格
  • BidPrice是銷售價格。
  • 量(買/賣)可能對你有用。

另外,有一個StockCode表和一個PriceCode表。

+0

感謝您的好評! – RobertH 2013-03-24 13:54:54

0

這是一個蠻力的方法。第二個你添加可搜索因素,它可以改變一切。一個更靈活和優雅的選項是一個星型模式,它可以擴展到任何數量的數據。我自己也是一個私人派對。

3

除了已經說過的話,我想說的是:不要使用「公司名稱」或「Ticker Symbol」作爲主鍵。正如你可能會發現,股票價格有一個經常被忽視的兩個重要特徵:

  • 一些企業可以在多個交易所被引用,因此對各交易所不同的報價價格。
  • 有些公司在同一個證券交易所上被多次報價,但以不同的貨幣報價。

因此,正確的通用解決方案應該使用(ISIN,貨幣,證券交易所)三元組作爲報價的標識符。