2014-07-19 56 views
0

我正在開發一個Web應用程序,我有一個名爲「Article」的表,另一個名爲「Section」。 文章由章節組成。我想保存每個文章版本,以便在我的網絡應用程序中進行每次編輯。如何正確管理數據庫中某一行的版本?

例如,當我編輯文章X時,我想將它的版本從1.1增加到2,並保留舊版本的內容以用於審覈目的。

我建議引入一個名爲「Article_Versions」的新表,它與Article Table具有多對一的關係。所以每篇文章必須在另一個表格中有很多版本,但我想知道這是否會影響表演,尤其是我不得不爲更多版本引入更多表格...

我的問題是:是否有任何「完美」的做法來解決這種問題?

+2

查看Hibernate Envers –

+0

這正是我需要的:)謝謝@NeilMcGuigan –

回答

0

很少完美。性能是使用模式下的時間和空間的權衡。設計是一種性能與使用和實現的複雜性之間的折衷。

存在記錄應用程序的關係,如:

VAT(V,A,T) -- version V of artcle A has text T 

當您需要可以拆分這件事:

current_VAT(V,A,T) the most recent version of Article A is V and has text T 
old_VAT(V,A,T) -- version V of article A has text T AND V is not the most recent version of 
-- VAT = currrent_VAT UNION old_VAT 
-- is_empty(current_VAT EXCEPT old_VAT) 
-- FORALL A,cV,cT,cV,cT [current_VAT(cV,A,cT) AND old_VAT(oV,A,oT) IMPLIES cV > oV] 

這使得一些查詢速度更快,有些慢。作爲基本事實的陳述更爲複雜。對於某些用途而言,它也更復雜,但對其他用途則更復雜

我不清楚你建議什麼樣的表格。是的,從文章到版本之間存在多對一的應用程序關係。但它可表示爲:

EXISTS T VAT(V,A,T) 

因此,您仍然需要全部增值稅。 (或等效)

相關問題