我有許多表格,其中數據需要「標記爲刪除」但未被刪除,或在已發佈數據和隱藏數據之間切換。爲刪除的數據設計表格
處理這些情況的最直觀方式是在數據庫deleted int(1)
或public int(1)
中添加一列。這引起了每次訪問該表時不忘記指定WHERE deleted=0
的擔憂。
我考慮通過爲已刪除/未發佈的數據(例如article
=>article_deleted
)創建重複表格並移動數據而不是刪除數據來克服此問題。這提供了2個問題:
- 外鍵約束最終是非常惱人保持
- 表數與隱藏的內容雙打(對我來說〜20變爲〜40桌)
我最後的想法是創建一個名爲unreleased
的整個數據庫的副本並在那裏遷移數據。
我的問題不是關於數據管理的safety,而是更多的 - 從一開始就做這件事的正確方法是什麼?
這是你非常常見的問題所帶來的額外痛苦。有一個額外的列'刪除'要簡單得多。我建議不要重複表格。 – Nishant 2011-03-08 18:13:26
我很感激MySQL中有'DNR_ON_SELECT'行(不返回)行中的內置列,如果這樣的列存在並設置爲1,則顯式的'SELECT IGNORE_DNR ...'需要 – Mikhail 2011-03-08 18:17:28
一個小建議,但我認爲有一個'active'字段而不是''deleted''會更合乎邏輯。 (也許這只是我,但自動包含一個'WHERE ... active = 1'從句更自然。) – 2011-03-08 18:21:10