所以,基本上這是「我如何版本文本信息在我的數據庫」。
那麼,最簡單的方法就是簡單地複製數據。
只需創建一個包含數據「舊版本」的「版本」表,並將其鏈接回主表。
create table docs {
id integer primary key not null,
version integer not null,
create_date date,
change_date date,
create_user_id integer not null references users(id),
change_user_id integer references users(id),
text_data text
}
create table versions {
id integer primary key not null,
doc_id integer not null references docs(id),
version integer,
change_date date,
change_user integer not null references users(id),
text_data text
}
無論何時更新原始文檔,都會將舊文本值複製到此表中,複製用戶並更改日期並對版本進行修改。
select version, change_date, change_user, text_data
into l_version, l_change_data, l_change_user, l_text_data
from docs where id = l_doc_id;
insert into versions values (newid, l_doc_id, l_version,
l_change_date, l_change_user, l_text_data);
update docs set version = version + 1, change_date = now,
change_user = cur_user, text_data = l_new_text where id = l_doc_id;
如果您的數據庫支持這些,您甚至可以在觸發器中執行此操作。
這種方法的錯誤是它的數據的完整副本(所以如果你有一個大的文檔,版本保持大)。你可以通過使用diff(1)和patch(1)之類的東西來緩解這個問題。
例如:
diff version2.txt version1.txt > difffile
然後你就可以說difffile存儲爲 「版本1」。
爲了從2版本恢復版本1,你搶第2個的數據,使用diff文件數據在其上運行的補丁,這給了你V1。
如果你想從V3去V1,你需要做的這兩次(一次獲得V2,然後再拿到V1)。
這會降低您的存儲負擔,但會增加您的處理(顯然),因此您必須判斷要如何執行此操作。
你無法新表添加到數據庫什麼的?我並不追求爲什麼你想在數據庫中創建一個「純文本」wiki。也許我只是不瞭解你的術語。 – 2009-03-04 23:59:40
我想要在我的數據庫中存儲單個文本字段中的單個wiki頁面的等效內容 – ack 2009-03-05 00:08:31