1

我剛開始一個項目,我想有一個小版本控制的內容管理器。但是我不知道什麼是建模數據庫的最佳方式。內容版本控制

我有一個包含以下字段內容表: ID主鍵序列, 的content_id INT(字段來標識diferent內容), 標題VARCHAR, 內容LONGTEXT, 版本整數默認 '1', CREATE_DATE日期,

我看到一些CMS將修訂版分離到另一個表中,而不是實際修訂版,最佳方法是什麼?有沒有優化的方法?

謝謝!

+1

爲什麼不使用現有的版本控制系統? – maxim1000 2011-04-20 05:29:46

+0

是http://stackoverflow.com/questions/440409/how-do-you-cm-an-application-with-managed-content在這裏有一些幫助? – VonC 2011-04-20 11:15:44

+0

@ maxim1000我無法使用現有的CMS,因爲它不符合我的要求。我打算把控制版本放在我的系統的很多部分,並且有不同的字段。 – dextervip 2011-04-20 15:00:58

回答

1

我設計了這樣的東西,這裏是它的要點;

  1. 我爲每個要創建行級版本控制的表創建鏡像表。假設你有CUSTOMER表。你的鏡子版本控制表將VER_CUSTOMER
  2. ,我想有行級版本控制每個表都有
  3. 稱爲RECORD_ID(GUID)的列時插入到表中的記錄,我產生新的GUID並填充字段。新記錄也插入到VER_CUSTOMER表中,其中RECORD_ID添加到表的自然PK中。
  4. 當記錄更新時,我再次生成新的GUID。用這個新的GUID填充RECORD_ID。更新後的記錄也會發送到VER_CUSTOMER表。
  5. 刪除記錄時,我將CUSTOMER表中的記錄標記爲DELETED(不物理刪除記錄)。我在每張桌上都有IS_DELETED列。當試圖刪除記錄時,我將該列設置爲TRUE。再次刪除的記錄副本也會進入VER_CUSTOMER表。

因此,您在該表上的每個事務都有VER_CUSTOMER表中的相應記錄,其中RECORD_ID和表的自然PK爲PK。例如,如果CUSTOMER表的PK是CUST_ID。 VER_CUSTOMER的PK將是複合CUST_ID和RECORD_ID。

希望這有助於...

1

這已經存在,沒有數據庫:

  • gitit(寫在Haskell中,使用的git或作爲的darcs後端)
  • ikiwiki(Perl寫成的,可以使用各種版本控制系統作爲後端)

他們都是開源的,都有一個插件架構,所以可以根據您的特定需求定製。 (但是,我只使用了gitit。)

但是我會注意到git在版本控制大型二進制文件方面並不完美,而darcs對它很糟糕。需要注意的地方。