2011-10-24 27 views
0

我在SQL Server 2008 R2上,我目前正在開發一個數據庫結構,其中包含一些產品的季節性值如何在SQL Server上處理季節性數據庫值的歸檔

通過季節性我的意思是這些值將在客戶使用的特定日期後沒有用。但是,這些值將被內部的東西用於統計結果。

在銷售網站上,我們將添加產品搜索功能,我的目標之一是儘可能優化此搜索。 但是,數據庫表內的行數越多,搜索速度越快。因此,我考慮歸檔未使用的值。

我可以自動處理SQL Server作業的自動歸檔。那裏沒問題。但我不確定我應該如何歸檔這些值。

我可以想出最好的方法是我在同一個數據庫中創建另一個表,並將它們放在那裏。

實施例:

我的主要表名是ProductPrices並且有一個主密鑰已經被 該數據庫定義。然後,我創建了另一個名爲 ProdutcPrices_archive的表。我爲此表 創建了一個主鍵字段,並且與ProductPrices表相同的列除了 ProdutPrices主鍵值。我認爲這對於 存檔值(我認爲正確嗎?)是沒有用的。

內部使用,我考慮UNION把兩個表值一起 (是正確的方法是什麼?)

該數據庫意欲長時間使用,應該用最佳結構設計。從長遠來看,我不確定我是否會錯過一些東西。

任何意見,將不勝感激。

+0

」但是,數據庫表中更多的行,這個搜索將變得更快「 - 可能但不一定。你所描述的設計表明所有對錶格的訪問將通過一個外鍵去「產品」;在這種情況下,通過將更多數據插入同一個表中,您幾乎肯定不會注意到速度降低。 我甚至不會爲這個場景進行優化,直到你能證明你有一個性能問題 - 我喜歡在我的數據庫中填充10倍於實際預期的測試數據,然後測量。 –

+0

按照下面的鏈接檢查汽車檔案過程。 http://stackoverflow.com/questions/18908903/auto-maintain-archive-purge-purge-on-source-table-in-sql-server –

回答

4

我會考慮的兩個選項之一最初

  • 使用partitioning到單個表分成當前工作設置和歸檔數據。
    無需使用存檔表

  • 添加validForm,ValidTo列實施type 2 SCD
    那麼對於ValidTo IS NULL來獲取當前數據集添加索引視圖

我不會如果所有數據必須在一個數據庫中「聯機」,那麼沒有2個獨立的表。

這導致第三個選項:一個完全獨立的數據庫與所有數據。只有「當前」數據保持在現場。 (如@ Mike_Walsh的答案解釋)

索引視圖選項是最簡單,與標準版的作品(含NOEXPAND提示)

+0

謝謝你的答案。你會舉這兩個選項的例子嗎?第一個鏈接涵蓋了很多,但我非常感謝你看到你會如何做到這一點。 – tugberk

+1

@tugberk:在MSDN上有很多關於這個的例子。基本上,你使用基於日期的PARTITION FUNCTION http://msdn.microsoft.com/en-us/library/ms187802.aspx – gbn

+0

好的,我明白了。我認爲在實施它之前需要進行良好的研究。我將查看您提供的MSDN文章。如果您有其他文章的參考,如果您可以在此發佈鏈接,我將不勝感激。 – tugberk

1

GBN帶來了一些好辦法。不過,我認爲你的「正確」長期回答是第3個選項。

這聽起來像你有你的數據的兩個業務用例 -

1)實時聯機事務處理(OLTP)。這是POS交易,庫存管理,快速「收據今天看起來如何,庫存如何,我們有任何操作問題?」這類問題使業務日復一日地運行。在這裏,您需要執行操作所需的數據,並且希望爲更新/插入/等等優化數據庫。

2.)分析型問題/報告。這是看月的數字,逐年的數字,平均運行。這些都是你所要求的問題,因爲這些問題是具有戰略意義的,並且可以全面瞭解你的歷史 - 你會想看看過去的幾年聖誕節季節性項目與今年相比如何,甚至可以將這些數字與來自同一季節的季節性項目進行比較期間5年前。在這裏您需要一個數據庫,其中包含比OLTP更多的數據。您希望儘可能少地放棄歷史記錄,並希望爲報告和回答問題大量優化數據庫。可能更不規範。你希望能夠在某個特定的時間看到事物,因此gbn提到的2型SCD在這裏很有用。

這聽起來像你需要創建一個報告數據庫。你可以把它稱爲數據倉庫,但是這個詞近來讓人們感到害怕。不需要嚇人,如果你正確地計劃它不需要6年和6百萬美元;-)

這絕對是一個較長期的答案,但在幾年內,你會很高興你花時間創建一個。理解數據倉庫及其術語的維度建模和思考的好書是The Data Warehouse Toolkit。 「

相關問題