只是好奇看到你的意見,因爲我正在開發一個論壇腳本旁邊的共存CMS - 我有ACL等排序。論壇軟件應該審覈刪除主題/帖子還是簡單地隱藏?
但不知道是否是最好做DELETE FROM
...(在刪除記錄)......或者只是做一個UPDATE
設置爲1列(bool
) - 它可以隱藏它(這樣看起來刪除)。
PS:只有那些誰我相信有機會獲得審覈工具
只是好奇看到你的意見,因爲我正在開發一個論壇腳本旁邊的共存CMS - 我有ACL等排序。論壇軟件應該審覈刪除主題/帖子還是簡單地隱藏?
但不知道是否是最好做DELETE FROM
...(在刪除記錄)......或者只是做一個UPDATE
設置爲1列(bool
) - 它可以隱藏它(這樣看起來刪除)。
PS:只有那些誰我相信有機會獲得審覈工具
這完全取決於你平時多麼重要是要刪除的數據,或者你想和事故如何寬容的問題。
我喜歡使用的方法是爲您想要刪除的項目提供克隆數據庫。刪除時,將所選行的內容複製到新數據庫,然後刪除。在系統中添加額外的「已刪除」文章或項目只會佔用更多空間,並最終會減慢查詢速度(可能)。
一旦你填滿你的「刪除文章」數據庫,運行一個轉儲,存檔,截斷。
比方說,你有數據庫CMS與表叫,你要存儲刪帖文章中,我們將創建一個具有相同的表結構完全相同的數據庫:
CREATE DATABASE `deleted`;
CREATE TABLE deleted.cmsarticles LIKE CMS.ARTICLES;
在你的PHP腳本多數民衆贊成刪除內容你會做這樣的事情:
//GRAB THE ID OF THE ARTICLE YOU ARE DELETING, MAKE SURE TO SANITIZE!
$article_id=$_POST['id'];
if(is_numeric($article_id) {
$dbconnect=databaseFunction();
$result=$dbconnect->query("SELECT `row1`,`row2` FROM `ARTICLES` WHERE `id`=$article_id");
if($result->num_rows!=0) {
$row=$result->fetch_array(MYSQLI_ASSOC);
//Open new connection to deleted database
$dbconnect2=otherDBFunction();
$dbconnect2->query("INSERT INTO `cmsarticles`(row1,row2) VALUES ({$row['row1']},{$row['row2']}");
$dbconnect->query("DELETE FROM `ARTICLES` where `id`={$_POST['id']}");
}
}
你的直覺是正確的。有時您想要「取消刪除」帖子,或者參考已刪除帖子的內容。想象一下,如果有人對他人的生活發佈威脅,你想從視圖中刪除它,但也想記錄它,如果事情升級,與警方分享。
一種常用的方法是在表中添加DATETIME列, deleted_at
。此列將爲NULL
,直到您「刪除」一篇文章,此時它只是獲得UPDATE
d與當前日期和時間。然後很容易只顯示未被刪除的記錄,例如SELECT ... WHERE deleted_at IS NULL
。
如果性能成爲一個問題(也可能不會)或磁盤大小不那麼你可以偶爾修剪刪帖,比如:
DELETE FROM posts
WHERE
# DELETE all rows that were "deleted" more than a year ago
COALESCE(deleted_at, NOW()) < NOW() - INTERVAL 1 YEAR
;
你的方法看起來有趣,將是很好,如果你能提供一些例如PHP/MySQL代碼以獲得更好的理解。 :) – user962026 2012-03-10 16:48:03
我更新了我的答案,包括一個例子。 – 2012-03-12 16:47:45