2010-02-02 54 views
0

我在尋找一個潛在的部分涉及相當複雜的數據採集和管理網站的工作,我想知道如何最好地處理它。我將使用LAMP架構。諮詢的數據採集管理系統

後端將包括:通過用戶上傳CSV文件

大衆用戶創造 - 我這樣做之前,所以我有信心這個部分。

註冊後,用戶將提交定期機密信息。雖然數據是保密的,但我只是計劃將其存儲在MySQL數據庫中,該數據庫將定期進行備份。

會有涉及到不同的角色:

  • 管理員,誰還會監視用戶活動,並在必要時創建新角色和用戶帳戶。

  • 最終用戶 - 誰也簡單地提供通過形式的信息,有能力來編輯自己的個人資料,查看先前提交等基本的東西一樣

  • 管理用戶 - 誰可以運行一系列預定義關於數據的報告並在瀏覽器中顯示這些信息。他們也可能開展的 數據「自由形式的查詢」以及提取選定結果電子表格。許多這些標準報告也將作爲網絡服務/饋送提供。自由形式的查詢部分
    稍有有關,因爲我還不知道什麼數據實際上是,再加上有一個強大的可能性,新的問題將被動態地添加到隨時間變化的數據採集形式。爲了適應這種情況,數據庫結構必須是靈活的,另外我必須爲自由格式查詢提供這種能力,這是我以前從未做過的。任何人都可以提出一個明智的方法嗎?

有也將是某種形式的版本,這樣,如果一個用戶更新/修改某些數據,這些變化將被跟蹤和以前的結果仍然是可用的。我會規劃,歸檔納入到這個數據庫的設計,以便不用更新和數據庫中的覆蓋數據,一個新的記錄將始終被創建,用「覆蓋」一個簡單的被標記。這樣,我想我總是能夠檢索實時數據行以及歸檔行(按日期組織)。那有意義嗎?

預先感謝任何指針,這比我以前的工作(主要是標準CMS)更復雜一點 - 我想我知道如何處理上述問題,但會感謝任何建議更多有經驗的開發者可以提

回答

1

如果你要使用該版本的系統,我建議你還可以創建視圖來獲取所有處於激活狀態,並讓用戶界面始終使用的意見(除非他們正在尋找的變化)的記錄不能直接訪問那張桌子。我還會在表格上放置一個觸發器,以確保只有一個記錄被標記爲活動狀態。然後你有問題的唯一鍵和鑰匙來識別PK/FK關係中的記錄(你不希望每次添加另一條記錄時都要更改這個記錄)。

或者,您可以設置審計表,如果您只需要返回到舊數據,如果您需要研究變更。如果您需要查看歷史經常審計表可能很難查詢,因爲他們通常不具備全程記錄結構僅僅是新舊值,列名和時所做的變化以及由誰像一些元數據。

也許你可以有一個歷史表,這正是像一些額外的列orgional表(進行了更改時,由誰以及新的代理鍵),並採取自動編號和唯一索引斷開原單PK。然後,活動記錄都在一個表中,非活動記錄在另一張表(由觸發器填充),只有當你想看看這兩組數據一起使用的意見。

的關鍵,這一切的是,無論你打算存儲它使用觸發器來填充歷史。 Databses不只是影響用戶應用程序,所以你需要在你的歷史肯定對數據庫的所有更改都記錄而不僅僅是通過用戶界面完成,否則將有差距。我不能代表所有的數據庫,但在SQL Server說話,觸發對數據的每批行動一次,不寫他們假設,他們將在同一時間採取行動的一個記錄,如果有人在一個查詢更新價格的roup。以基於集合的方式編寫觸發器通常至關重要。循環播放記錄的速度很慢,並且觸發可能導致整個系統停止播放,同時循環播放價格上漲10%的百萬條記錄。

+0

感謝您的詳細答覆。我將使用MySql 5,它支持觸發器。我之前沒有使用過觸發器,但是對於這個應用程序來說,它們似乎是處理數據更改的好方法。如果我理解正確的話,在我的情況下,觸發最有可能被上更新至創紀錄的激活 - 專門在DB端處理分貝一連串的事件,從而降低PHP應用程序代碼來處理這些事件。此外,審計表的想法聽起來很合理,記錄日期等額外的列。 – kenny99