2014-02-07 139 views
0

我想爲幾個表設計一個更新日誌。我們稱之爲表restaurant。每次用戶修改餐館列表時,都應該記錄更改。更改日誌表

理念1

我的第一個想法是創建2個表。其中一個包含所有餐廳RESTAURANT_VALUE(restaurantId*, restaurantValueId*, address, phone, ..., username, insertDate)。每次進行更改時都會創建一個新條目。然後一個表RESTAURANT (restaurantId*, restaurantValueId),它將鏈接到當前有效的restaurantValueId。所以有一張表包含當前和以前的版本。

思想2

它始於2代表爲好。其中一個包含所有當前餐館。例如RESTAURANT_CURRENT。第二個表格包含所有更改RESTAURANT_HISTORY。因此,兩者都需要有完全相同的列。每當發生更改時,「當前」表的值將被複制到歷史表中,而新版本將被複制到「當前」表中。

我的意見

想法一不關心,如果列將永遠不會加入與否,因此維護和列的加入很容易。但是,我認爲隨着數據庫的增長......它會不會放慢速度?想法2的優點是具有價值的桌子永遠不會有「舊」的東西,也不會擁擠。

從理論上講,我認爲思路1應該是一個做

有什麼看法。你會去看Idea 1還是其他的?還有沒有其他重要的實際想法我不知道?

回答

1

該方法強烈依賴於您的需求。你爲什麼要一個歷史表?

如果僅僅是爲了審計目的,然後製作一個單獨的restaurant_history表(思想2)來保留歷史。如果你想在目前的應用歷史,然後去勁兒restaurants表以下選項之一:

  • seq_no - 在每次更新記錄的版本號遞增。如果您需要最新數據,你必須尋找最高seq_no給定restaurant_id(s),所以必要時也使用current標記,讓簡單明瞭current = true
  • valid_fromvalid_to - 在valid_to NULL的當前記錄

有時候有必要有效查詢哪些屬性完全改變。要輕鬆完成此操作,您可以考慮屬性級別的歷史記錄表:(restaurant_id, attribute, old_value, new_value, change_date, user)

+0

噢好 - 謝謝!我們將有一個用於審計目的的歷史表。所以只要我們覺得有什麼問題。用戶可以打開我們的應用程序,它會顯示所有餐館。如果一個條目看起來不對,或者用戶想要找出誰創建了這個條目以及發生了什麼變化,他就能夠拉起一個歷史視圖,該視圖將顯示該餐廳最近的所有修改。此外,可能會有第二個「日誌視圖」,它將顯示網格視圖(日誌)中所有餐館的所有更改, – skofgar