2014-12-11 242 views
0

我看到很多關於在mysql中保留記錄歷史記錄的問題。但是,我不太確定他們適合我的情況。如何在mysql中保留數據歷史記錄?

我正在開發一個有很多用戶信息的申請表。到目前爲止,我必須把它歸到12桌,即使他們大多有1:1間的關係,但我以爲他們會在以後的使用好:

  • 用戶(ID,全名,用戶名,電子郵件,CreatedDate ,UpdatedDate,...)
  • 家庭(ID,用戶ID,姓名,關係,工作,...)
  • 地址(ID,用戶ID,路,區,市,...)
  • ..

當客戶端填寫表單中的所有字段時,他們有兩個選項,第一個他們可以將其保存爲草稿,其次,他們可以確認發送應用程序並且不能再更改它。

到目前爲止,我已經做了一些研究。他們有很多方法來做到這一點。例如,我可以用所有附加字段複製所有表格; VERSIONID。但由於桌子數量巨大,我認爲這不是一個好主意。

所以,我認爲是將VersionId添加到每個現有的表。當他們將表格保存爲草稿時,我只會在不觸及VersionId字段的情況下放置信息,但是,只要用戶確認提交應用程序,我就會將VersionId增加1。

任何建議都會非常受歡迎。

回答

1

爲每個表添加status列。它可以具有值draft,currenthistory

當用戶更改其數據時,請使用status = draft創建一個新行。在他們編輯時,您可以修改該行。當他們確認更改後,您將舊的current行的狀態設置爲history,並將草稿行的狀態設置爲current

+0

很棒的建議。但是,如果他們在下一年再次應用該應用程序,則在這種情況下,數據庫將有兩行包含狀態歷史記錄。所以,我將不得不創建另一列來跟蹤,哪一個更近,不是嗎? – lvarayut 2014-12-11 02:48:43

+0

這個想法是,你將有許多行的狀態歷史。這會記錄他們對記錄所做的所有更改,'updateDate'顯示更改的順序。 – Barmar 2014-12-11 02:50:22

+0

因爲我有很多表格;一個地址,一個家庭等,我想加入所有的表格,以便獲得客戶提交的完整信息,並以我想要查看的特定版本。你在這種情況下建議什麼? – lvarayut 2014-12-11 03:48:48

0

我認爲它主要取決於業務需求(因爲聽起來不會有這麼多的更新爲同一個用戶,我認爲性能不是一個問題,但您也可能想考慮這一點在這種情況下插入件比更新更便宜)。

所以你需要問自己的問題是業務需要你保持歷史嗎?例如如果用戶A填寫表格,並且稍後他更新一些信息,例如他有一個新的地址,你想知道他以前的地址是不是?如果你這樣做,那麼你必須存儲它們(除了版本ID之外,我還要添加更改日期)

相關問題