2010-01-16 44 views
1

去年我們推出http://tweetMp.org.au--致力於澳大利亞政治和Twitter的網站。需要歷史數據建模文獻,方法和技術

去年年底我們的政治家的架構進行調整,因爲一些政客退休和新的政治家走了進來。

改變我們需要手動(SQL)的變化,所以我正在考慮實施一個CMS爲我們的管理員做出分貝這些變化在未來。

還有許多其他網站,政府/政治網站在那裏的澳大利亞是管理自己的政治家的數據。

我想提出一個集中的方式來做到這一點。

思考了一段時間後,也許是最好的辦法是政治家的數據,以及他們如何涉及到政治制度的當前視圖未模型,而是模擬交易。這樣當前的觀點就是對過去發生的所有交易/變化的預測。

使用這種方法,其他網站可以「訂閱」的變化(一la` pubsubhub)並提交變更,只是這些變化的項目整合到他們的模式。

沒有這種做法,大多數網站將不得不推倒整個數據庫,並填充它,因此任何相關記錄將需要被關聯。以這種方式管理數據非常煩人,嚴重阻礙了這些數據爲了公共利益的混搭。

我注意到一些事情以這種方式工作 - 源代碼版本控制,銀行記錄,計算器積分系統和許多其他例子。

當然,眼前的挑戰和設計問題這種方法包括

  • 是當前視圖緩存和repersisted?多久更新一次?
  • 什麼基礎實體必須存在,永不改變?
  • 大概堆更多,我不能想到現在...

是否有關於這個問題的任何顯着文學,任何人都可以推薦? 此外,像這樣的數據建模的任何模式或實踐可能有用嗎?

任何幫助,非常感謝。

-CV

+0

數據倉庫體系結構中的更改跟蹤技術具有很好的技術(緩慢變化的維度),可以捕獲這種類型的東西。關於這一點的好處是它將大部分應用程序數據庫留在一個地方,其缺點是使追溯更改變得更加困難,而創建數據倉庫顯然可以是很多工作。如果人們對目前的歷史前進不滿意,並希望通過某些數據輸入追溯添加歷史記錄,或者經常不得不更正歷史記錄,那麼您必須構建工具來摒棄這些信息。 – AaronLS 2012-05-25 21:09:09

回答

2

這是數據建模一個相當普遍的問題。基本上歸結爲:

你是否有興趣在視圖現在,在一個時間點的觀點或兩者?

舉例來說,如果你有一個服務,你需要知道的車型訂閱:

  • 服務必須有人在某個時間點什麼:這是制定需要收費多少,查看帳戶的歷史記錄等等;和
  • 現在有人有什麼服務:他們可以在網站上訪問什麼?

的起點,這種問題是有一個歷史表,如:

  • 服務歷史:ID,用戶ID,服務ID,日期,結束日期

鏈在一起用戶的服務歷史記錄以及您的歷史記錄。那麼你如何模擬他們現在擁有的?最簡單的(也是最不規範化的視圖)就是說最後一條記錄或者有NULL結束日期或現在或將來結束日期的記錄就是現在的結果。

正如你可以想象的,這可能會導致一些粗糙的SQL,所以這是有選擇地denomralized所以你有一個服務表和另一個歷史表。每次更改服務時,都會創建或更新歷史記錄。這種方法使歷史表更多地是審計表(您將看到的另一個術語)。

這與您的問題類似。您需要知道:

  • 誰是衆議院每席的現任議員;
  • 誰是每個座位的現任參議員;
  • 誰是各部門現任部長;
  • 誰是總理。

但是你還需要知道在某個時間點上誰是那些事情的每一個,所以你需要所有這些事情的歷史。

於是在2003年8月20日,科斯特洛發了新聞稿,你需要知道,在這個時候他:

  • 會員希金斯;
  • 司庫;和
  • 副總理。

因爲可以想象有人可能是在尋找通過科斯特洛或司庫所有的新聞稿,這將導致相同的新聞稿,但將不可能沒有歷史追溯有趣。

此外,您可能需要知道哪些座位處於哪些狀態,可能是地理邊界等。

這些都不需要模式更改,因爲模式應該能夠處理它。