我有很多表格,其中数据需要“标记为删除”但不会被删除,或者在已发布数据和隐藏数据之间切换。
处理这些情况的最直观方法是在数据库deleted int(1)
或public int(1)
中添加一列。这引起了关注,即每次访问该表时都不要忘记指定WHERE deleted=0
。
我考虑通过为已删除/未发布的数据创建重复的表来克服这个问题,例如article
=> article_deleted
并移动数据而不是删除它。这提出了两个问题:
我的最后一个想法是创建一个名为unreleased
的整个数据库的副本,并在那里迁移数据。
我的问题不是关于数据管理的safety,而是更多关于 - 从一开始就采用这种方法的正确方法是什么?
答案 0 :(得分:3)
之前我遇到过这个问题,我认为创建一个不必要的繁琐数据库是一个坏主意,因为你害怕错误的代码。
我认为在您发布到生产之前对您的测试服务器进行全面测试会更好。当我第一次遇到它时,我甚至被“删除”专栏绊了几次,但我最终还是抓住了,如果你有一个合适的开发/测试/制作环境,你应该没问题。
总之,请保留删除列,并向编码员提出更多要求。
<强>更新强>
或者,您可以创建一个仅提取未删除记录的视图,并确保每个人都使用该视图进行选择查询。
答案 1 :(得分:0)
我认为您的初始方法是“正确的”和“正确的”,但您对它的轻微错误的关注是有效的。
您可能只需要确保您的测试程序足够严格以捕获错误。
答案 2 :(得分:0)
第一种方法是我想出的最好的方法。我将列调用为活动而不是删除。该记录存在,但它可以是活动的或非活动的。那么,如果你真的需要删除的东西,术语不会搞砸。
说“删除非活动记录”是有道理的,但说“删除已删除的记录”只会让人感到困惑。