2009-12-30 70 views
0

好吧,這是一個棘手的解釋。MySQL - 爲每個記錄創建一個唯一密鑰,而不是主鍵

我創建一個應用程序,將有網頁,我目前使用PAGEID爲重點,以SEL記錄。

我現在遇到的問題是,我希望用戶能夠編輯網頁,但不會失去以前的網頁(歷史記錄保留的原因,像更新日誌或wiki頁面的歷史)。

這讓我覺得我需要充當的pageID頁表一個新的領域,但不是主鍵是自動遞增每次添加一個行時間。

谷歌文檔有DOCID:/文件文檔ID = 0Af_mFtumB56WZGM4d3Y3d2JfMTNjcDlkemRjeg

這樣我可以有相同的文件ID的多個記錄,並給出一個對dataAdded領域的歷史變更記錄。當用戶想要查看該DOCID時,我只需拖動最近的一個。

想法?我感謝你的聰明才智,指引我走向正確的方向!

+0

或者我應該使用parentID?遞歸? – AnApprentice 2009-12-30 19:58:47

回答

0

每個文檔是一個真正的修訂:

DOC - (DOC_ID)

修訂 - (rev_id,DOC_ID,VERSION_NUM,名稱,描述,內容,AUTHOR_ID,積極TINYINT默認1)

那麼你可以只用rev_id打開任何內容:/視圖id = 21981

SELECT * FROM修訂R,DOC d其中r.rev_id =?和r.doc_id = d.doc_id

+0

非常有趣......那麼哪個是DB中的主鍵? – AnApprentice 2009-12-30 20:29:53

+1

是的,這聽起來像是你在尋找和我一樣的東西。 http://stackoverflow.com/questions/1933929/database-table-setup-for-revision-tracking-with-orm – Xeoncross 2009-12-30 20:34:16

+0

rev_id是pk – jspcal 2009-12-31 01:12:45

0

保留的審計表的更改歷史記錄。如果您需要回滾更改或查看更改歷史記錄,這將允許您返回。

+0

Wiki或任何應用程序做到這一點嗎? – AnApprentice 2009-12-30 23:03:59

0

你可能會喜歡這一點,型號:

  • 的應用程序有多個頁面,一個頁面有多個版本(每個有一些版本信息(例如,日期,編輯次數),以及一個外鍵,它的頁面)
  • 查看頁面顯示最新版本
  • 保存編輯創建一個新版本
2

你在正確的軌道上。您需要的是歷史記錄或修訂ID以及文檔ID。歷史ID將是主鍵,但您也可以在文檔ID上使用鍵來查詢。

隨着歷史記錄的跟蹤,你的應用程序增加了一點複雜性。您必須小心,文檔的主視圖顯示當前歷史修訂(即給定文檔ID的最大歷史記錄ID)。

同樣,如果你存儲大量的文件,每個編輯基本上要到文檔的另一副本添加到您的數據庫,該表將很快變得非常大。您可能需要考慮實施某種「差異」存儲,其中只存儲對文檔的更改而不存儲所有內容,或者將歷史編輯保存在單獨的表中,僅用於歷史記錄搜索。

+0

任何簡單的做DIFF存儲的方法?我想更好地瞭解您的Revision_ID,Doc_ID。你能提供一些記錄的例子嗎?/table? – AnApprentice 2009-12-30 23:05:44

1

UUID()創建一個隨機生成的128位數字,比如 「6ccd780c-巴巴1026-9564-0040f4311e29」 ,此號碼不會在數百萬年前被重複。

//注意大部分數字都基於時間戳和機器信息,所以很多數字在重複調用時會類似,但它總是唯一的。

0

這對我來說聽起來像是兩張桌子的好工作。您可能有一個page_header表和一個page_content表。標題表將保存靜態信息,如標題,分類(無論),內容表將保存實際的可編輯內容。用戶每次更新頁面時,都會插入新的記錄,而不是更新現有的記錄。當您顯示該頁面時,請確保您抓取最新的page_content記錄。這是保持歷史記錄並在需要時回滾的簡單方法。

祝你好運!

+0

這就是維基百科完成這項工作的原因嗎? – AnApprentice 2009-12-30 21:45:03

相關問題