2012-03-29 89 views
1

我有了一個狀態表中看到Database best practices - Status爲例asp.net MVC3實體框架查找

我希望能夠表現出的狀態變化的歷史記錄的應用程序。我可以看到使用mvc3和實體模型實現它的兩種方式 - http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

對於需要鏈接到狀態表的任何對象,我總是可以擁有StatusID屬性,例如,

工作
ID
名稱
StatusID

狀態
ID 狀態

或者,我可以有一個StatusHistory表,使StatusID屬性,返回功能狀態對象例如

工作
ID
名稱

狀態
ID 狀態

StatusHistory
ID
作業ID
統計usID
日期

並且在Job模型類(Job.cs)上有一個稱爲Status的函數,它通過查詢StatusHistory表獲取與Job有關的最新狀態對象的Status對象。

有沒有人做過類似的事情?

+0

不得不不同意保留不推薦使用的數據是「最佳實踐」。當然,有時候事情需要有一個狀態,但這並不意味着它們應該保存在主數據庫中,因爲它會變得混亂,查詢會變得緩慢。 – 2012-03-29 05:06:48

+0

一個有效索引的表我不會被認爲是緩慢或混亂的。我們擁有20多萬行表,並提供近乎即時的查詢。 – 2012-03-29 08:10:50

回答

0

你可能有

StatusHistory

  • ID
  • 作業ID
  • StatusID
  • 日期

而工作電流包含StatusID

工作

  • ID
  • StatusID(最新)
你每次

這種方式你 「緩存」 工作的最新狀況,而不是搜索..

StatusHistories.OrderDescending(s => s.Date).FirstOrDefault(); //unnecessary task 

需要它。

+0

謝謝ai.farfa。該狀態也有一個可選的評論,但它可能會以同樣的方式設置,以獲得最佳性能。 – 2012-03-29 08:03:18

0

你在找什麼是Temporal Database。幾乎沒有保留大量的狀態代碼,而是將邏輯分解成日期流水線。例如,工作日期開始,工作完成日期。完成的作業應該在某個時候遷移到檔案庫以保持數據庫清潔。

+0

感謝您的回答特拉維斯,我的唯一反饋,根據您的其他評論是關閉並不一定意味着「不在使用」。根據系統的不同,它可能實際上被用作參考,很像本網站 - 如果他們歸檔了所有回答的問題會怎麼樣。 – 2012-03-29 08:01:51

+0

@smartfaceweb - 我同意存在一定程度的謹慎,需要與歸檔一起使用。我不認爲你的例子真的是一樣的,因爲我正在談論移動數據與「軟刪除」之間的區別,或者隱藏了某些人用作柺杖的廢棄數據。當有數據被標記爲「關閉」,「isActive」,「被刪除」等時,這可能是常見的。我同意相關數據絕對必須保持可供參考。 – 2012-03-29 08:56:33