我有一個數據庫,其中包含用戶帖子。如何管理撤銷刪除與數據庫
用戶可以選擇刪除帖子,但不是確認刪除,我想有一個撤消選項,當點擊恢復後。如果用戶刷新頁面或離開頁面,撤消選項將消失。
使用當前的解決方案,只要用戶按下確認按鈕,數據庫就會刪除帖子。然而,我猜我必須保留這個帖子後刪除,以便它可以使用撤銷選項進行恢復,但是何時以及如何去刪除帖子?
編輯:
有沒有一種方法來安排的缺失,假定用戶24小時後刪除?我知道我可以使用cron,但是對於許多用戶來說,這需要很多cron作業。
謝謝。
我有一個數據庫,其中包含用戶帖子。如何管理撤銷刪除與數據庫
用戶可以選擇刪除帖子,但不是確認刪除,我想有一個撤消選項,當點擊恢復後。如果用戶刷新頁面或離開頁面,撤消選項將消失。
使用當前的解決方案,只要用戶按下確認按鈕,數據庫就會刪除帖子。然而,我猜我必須保留這個帖子後刪除,以便它可以使用撤銷選項進行恢復,但是何時以及如何去刪除帖子?
編輯:
有沒有一種方法來安排的缺失,假定用戶24小時後刪除?我知道我可以使用cron,但是對於許多用戶來說,這需要很多cron作業。
謝謝。
不要刪除「物理」記錄。將其標記爲'已刪除'(介紹並設置,例如status
至0
代表「已刪除」,1
代表其他人)。這將需要修改表格。但是這樣你幾乎有無限的選擇,即你可以設置deleted_timestamp
在「刪除」的職位,並有cron作業刪除舊的。
只是爲了澄清,系統的cron工作不是你唯一的選擇。您可以管理每100個常規用戶請求執行後臺作業,例如使用if (rand (1 , 100) === 50) {do_pseudocron_job();}
MySQL也有一個不太知名的[Event Scheduler](https://dev.mysql.com/doc/refman/5.7/en/event-scheduler.html)來完成這樣的任務,例如, 'CREATE EVENT e_daily ON SCHEDULE EVERY 1 DAY DO DELETE FROM ... where ...;'。但是,必須啓用調度程序,但這並非總是可行。 – PerlDuck
如果您使用的是Oracle或Vertica,則可以使用閃回查詢,使用該功能仍然可以刪除,並且在回滾的情況下仍然可用詳述她:
https://docs.oracle.com/cd/B19306_01/backup.102/b14192/flashptr002.htm
你可能只是有一個活動列,當用戶刪除帖子只是使之失去活性,這樣,如果需要的話 –
你(和@KyhleOhlinger)都在談論「邏輯的仍然存儲在數據庫中刪除「,即將數據保存在數據庫中,但只需通過一些布爾標誌或_deleted_at_(timestamp)列將其標記爲_deleted_。也許[this](http://stackoverflow.com/q/378331/5830574)值得一讀。 – PerlDuck
@PerlDog我意識到這一點,但它會做的問題沒有太多的努力要求,它也有助於審計,如果這是數據庫的要求之一。 –