TL;博士 - 在底部,我问有关智能数据库设计不需要阅读整个事情一对夫妇的一般性问题。所以请随意跳过并看看那些。谢谢!Rails应用程序 - 最好能保留或删除过时的数据
我正在构建一个Rails web应用程序,在用户输入一些内容后,我生成了一些用户可以选择的选项,然后将其保存并与用户关联。在选项生成后这种选择可能会发生很长时间 - 因此需要保存选项 - 但是一旦选择完成,所有“不正确的”选项就不再相关。
我对数据库的工作方式以及减慢数据库的速度知之甚少,所以我非常感谢任何有关如何最好地实现这一点的输入(如下所述),因为我在我认为的方法中看到了冲突的。
在我看来,我有三个路径,我可以把这里:
请选择只是
Choice
模型的实例,通过belongs_to
/has_many
与用户相关联。当用户选择一个时,其id
被声明为该用户的choice_id
(并且可能地,其他选项与用户分离)。我看到的主要问题是
Choice
表的大小呈指数增长,这将导致结果。这是我应用程序中的主要表格,我希望尽可能快地保留它。以下的用户输入,我生成和保存假设5个
Choice
对象,所有这些belong_to
用户,为options
。然后,当用户选择四个被删除,第五是为用户的单一choice
的带来的负面影响,因为我认为这是我结束了大量的“空”数据库中行,因此最高的
choice_id
显着大于数据库中的choices
的数量。最近我工作的一位老板给了我们建议永远不要删除数据,这显然与这种方法相冲突。我创建一个
Option
模型,它是在几乎每一个方式,等同于Choice
模型一个单独的表,因为选择需要充分丰富的替身选择。这些选项belong_to
auser
,按照上面的说法,但是当我选择毕业后成为choice
时,他们仍然是。(这有点类似于this older post's discussion of archiving by moving old data to a new table这是否被认为是一种好习惯?似乎对我很理想,但我不知道潜在的缺点)。
正如我所看到的,该选项保留所有数据,同时保持我的主要
Choice
表不受kruft未选择数据的影响。不幸的是,它在数据库中增加了一个主要的重复数据,并且重复了一段代码(尽管我想我可以从Choice
继承Option
,这很奇怪,但无论如何)。
所有这些意见都是通过对数据库结构和效率的知识完全不了解,但是,我感觉好多了能够解决的权衡,如果我知道:
待办事项删除表中的行减慢像现有行一样的事务吗?减?在所有?在SQL数据库中,表大小成为一个严重问题?值得思考吗?
什么是关于删除数据的最佳实践?这是一个非常糟糕的主意吗?
重复表的最佳做法是什么? (即具有相同数据结构的表格,由于原始表格中的许多原因而被区别对待)。
最广泛,最不合适,最有帮助的问题:您如何解决这个问题,优化
Choice
表的效率? (但是,尽可能避免重复并遵循最佳实践)。
谢谢!
谢谢,伊恩。不幸的是,因为这是一个数据库支持的Web应用程序(所以数据库安装在服务器上),并且我没有单独用户的目录或类似的东西,我不认为这个解决方案是可行的,除非我误解了它。我肯定对类似缓存的东西感兴趣,但我猜数据库对我来说是最合理的选择。 – Sasha 2015-02-19 05:48:25