2015-02-17 29 views
1

TL;博士 - 在底部,我问有关智能数据库设计不需要阅读整个事情一对夫妇的一般性问题。所以请随意跳过并看看那些。谢谢!Rails应用程序 - 最好能保留或删除过时的数据

我正在构建一个Rails web应用程序,在用户输入一些内容后,我生成了一些用户可以选择的选项,然后将其保存并与用户关联。在选项生成后这种选择可能会发生很长时间 - 因此需要保存选项 - 但是一旦选择完成,所有“不正确的”选项就不再相关。

我对数据库的工作方式以及减慢数据库的速度知之甚少,所以我非常感谢任何有关如何最好地实现这一点的输入(如下所述),因为我在我认为的方法中看到了冲突的。

在我看来,我有三个路径,我可以把这里:

  1. 请选择只是Choice模型的实例,通过belongs_to/has_many与用户相关联。当用户选择一个时,其id被声明为该用户的choice_id(并且可能地,其他选项与用户分离)。

    我看到的主要问题是Choice表的大小呈指数增长,这将导致结果。这是我应用程序中的主要表格,我希望尽可能快地保留它。

  2. 以下的用户输入,我生成和保存假设5个Choice对象,所有这些belong_to用户,为options。然后,当用户选择四个被删除,第五是为用户的单一choice

    的带来的负面影响,因为我认为这是我结束了大量的“空”数据库中行,因此最高的choice_id显着大于数据库中的choices的数量。最近我工作的一位老板给了我们建议永远不要删除数据,这显然与这种方法相冲突。

  3. 我创建一个Option模型,它是在几乎每一个方式,等同于Choice模型一个单独的表,因为选择需要充分丰富的替身选择。这些选项belong_to a user,按照上面的说法,但是当我选择毕业后成为choice时,他们仍然是。

    (这有点类似于this older post's discussion of archiving by moving old data to a new table这是否被认为是一种好习惯?似乎对我很理想,但我不知道潜在的缺点)。

    正如我所看到的,该选项保留所有数据,同时保持我的主要Choice表不受kruft未选择数据的影响。不幸的是,它在数据库中增加了一个主要的重复数据,并且重复了一段代码(尽管我想我可以从Choice继承Option,这很奇怪,但无论如何)。

所有这些意见都是通过对数据库结构和效率的知识完全不了解,但是,我感觉好多了能够解决的权衡,如果我知道:

  • 待办事项删除表中的行减慢像现有行一样的事务吗?减?在所有?在SQL数据库中,表大小成为一个严重问题?值得思考吗?

  • 什么是关于删除数据的最佳实践?这是一个非常糟糕的主意吗?

  • 重复表的最佳做法是什么? (即具有相同数据结构的表格,由于原始表格中的许多原因而被区别对待)。

  • 最广泛,最不合适,最有帮助的问题:您如何解决这个问题,优化Choice表的效率? (但是,尽可能避免重复并遵循最佳实践)。

谢谢!

回答

0

如何用一个前缀为'。'的小文件所以它被隐藏(在unix中)放置在用户主目录中。如果您以可读格式输出选项,则可以轻松读取和修改它们。

您只想在性能或功能合理的情况下使用数据库。如果您要求用户使用必须安装的数据库,客户端可能不理解必须执行的数据库。

+0

谢谢,伊恩。不幸的是,因为这是一个数据库支持的Web应用程序(所以数据库安装在服务器上),并且我没有单独用户的目录或类似的东西,我不认为这个解决方案是可行的,除非我误解了它。我肯定对类似缓存的东西感兴趣,但我猜数据库对我来说是最合理的选择。 – Sasha 2015-02-19 05:48:25

相关问题