为已删除的数据设计表

时间:2011-03-08 18:08:42

标签: mysql database

我有很多表格,其中数据需要“标记为删除”但不会被删除,或者在已发布数据和隐藏数据之间切换。

处理这些情况的最直观方法是在数据库deleted int(1)public int(1)中添加一列。这引起了关注,即每次访问该表时都不要忘记指定WHERE deleted=0

我考虑通过为已删除/未发布的数据创建重复的表来克服这个问题,例如article => article_deleted并移动数据而不是删除它。这提出了两个问题:

  1. 外键约束最终导致维护非常烦人
  2. 隐藏内容双打的表格数量(在我的情况下,~20变成~40个表格)
  3. 我的最后一个想法是创建一个名为unreleased的整个数据库的副本,并在那里迁移数据。

    我的问题不是关于数据管理的safety,而是更多关于 - 从一开始就采用这种方法的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

之前我遇到过这个问题,我认为创建一个不必要的繁琐数据库是一个坏主意,因为你害怕错误的代码。

我认为在您发布到生产之前对您的测试服务器进行全面测试会更好。当我第一次遇到它时,我甚至被“删除”专栏绊了几次,但我最终还是抓住了,如果你有一个合适的开发/测试/制作环境,你应该没问题。

总之,请保留删除列,并向编码员提出更多要求。

<强>更新

或者,您可以创建一个仅提取未删除记录的视图,并确保每个人都使用该视图进行选择查询。

答案 1 :(得分:0)

我认为您的初始方法是“正确的”和“正确的”,但您对它的轻微错误的关注是有效的。

您可能只需要确保您的测试程序足够严格以捕获错误。

答案 2 :(得分:0)

第一种方法是我想出的最好的方法。我将列调用为活动而不是删除。该记录存在,但它可以是活动的或非活动的。那么,如果你真的需要删除的东西,术语不会搞砸。

说“删除非活动记录”是有道理的,但说“删除已删除的记录”只会让人感到困惑。