2009-05-03 81 views
3

我正在研究一個基於MVC的Web應用程序,需要一些記錄才能在「高級」用戶的批准下修改。 (普通用戶可以提交的變化,但他們得到的只是在此之後批准應用)實施「軟」保存或修改工作流程的最佳方式是什麼?

有僅在此將不得不採取的地方,說「事件」的表:

活動 - ID - 命名VARCHAR - START_DATE DATETIME - 客人INTEGER

每次事件的屬性之一得到一個「正常」的用戶修改,這些修改都沒有做出官方的,直到有一個從這個修訂版(以及可能的批准)「超級「用戶。

起初我以爲以下選項:

  • 複製的每個列,除ID,說name_temp爲「名」,持有等待審批修改。
  • 創建具有重複結構的單獨表格,並在那裏保留所有未決的批准修改。

你以前實現過這個嗎?你認爲最好的/你的方式是什麼?還有:這種問題有什麼模式嗎?

謝謝!

PD:我需要保持「舊」記錄它在哪裏,直到新的一個得到批准..

+0

你能解決標題嗎? – 2009-05-03 20:19:35

+0

ups,對不起 – Guillermo 2009-05-03 20:34:04

回答

0

讓我加入我對「第二表」方法的投票 - 正如其他兩位受訪者所說的那樣,這是頭和肩膀以上的嘗試,以阻止「提議的更改」進入主表(這會使其模式複雜化,它等等)。

將所有預期的更改寫入輔助表並處理它們(如果它們滿足特定條件,則將它們應用於主表)實際上是一種常見模式,當您需要主表僅更改主表時在某些時候,建議的變更可能隨時出現,而且在其他條件下也會出現,例如當寫入主表非常昂貴(鎖定爭用或其他),但寫入N個變更並不比寫入更昂貴,或者驗證提議的更改非常耗時(您可以將您的用例歸類爲後一類,因爲在你的情況下,驗證需要一個人來看看提議的改變 - 實際上計算機標準確實很慢;-)。

0

爲什麼不加1分名爲IsApproved多個列? bool或tinyint(1)類型?並且剛剛顯示已批准的活動?

編輯:哦,這是每個屬性的批准。然後第二個表將被我的選擇 命名爲PendingEventChanges具有相同的結構或只是id +可更改的屬性,並在aproval「超級」用戶將更新原始數據,並將從掛起中刪除etries。

首選是針對數據庫規範化,因此在未來添加更多的屬性會造成麻煩。

0

如果只是關於添加新事件的許可權限,我會帶一個額外的布爾列,即is_approved或類似的。

雖然有編輯可能,但在我看來,複製同一個表中的每一列以存儲臨時值是一個很大的抉擇。試想一下,當兩個用戶將更改發佈到同一事件時會發生什麼。

選項二,即一個單獨的表,是一個更好的選擇。您可以存儲每個嘗試,並相應地更新您的主表。

通過這種方法,甚至可以進行某種形式的回滾更改。只要確保您存儲每個時間戳,並且永遠不要刪除批准的編輯。

0

如果歷史或版本是重要的,加上批准,我會去一張表。您需要添加一個修訂版本號,該版本號可以與您現有的主鍵一起使用,並且可以在每個修訂版上遞增。然後,您可以添加一個狀態字段以顯示哪個版本是當前版本,過期版本並需要審批版本。狀態和關鍵字段的一個很好的索引會讓你的結果更加精彩。如果這只是一個,兩個或三個字段中的一個,那麼處理這些未經批准的編輯的特定表可能會更好,如上所述。

相關問題