具有许多列的ActiveRecord表:有更好的方法吗?

时间:2015-08-17 11:45:47

标签: ruby-on-rails activerecord database-design

我想知道我是否正在使用表属性来描述对象,或者对于某些类型的属性是否有更有效和可行的方法。

我有两个ActiveRecord表,foodslists。两个表都有很多列,因为每个对象都有许多属性(卡路里,脂肪,蛋白质等)。

除了这些内在特征之外,我发现自己在表中添加了表示对象在组或用户定义属性中的成员资格的属性。

群组成员数据表示食物是甜点还是肉类,以及其他类别。为此,我有二进制或分类(char)数据的列。

用户定义的属性数据包括列表的“最大卡路里”或“最大脂肪”属性。如果我有一个对应于每个“总数”的“最大”列(例如,“最大卡路里”和“总卡路里”),这当然会使列数加倍。

甜点和肉是内在属性,因为它们不能被用户改变,但似乎它们可以通过一系列食物ID或散列来更有效地表示。拥有如此多的数据点(和列)来表示这种简单的分类似乎是多余的,而且我的表格非常大。我没有切换到组成员资格数据的数组的原因是因为我喜欢这个数据当前如何被对象本身访问。它直观,集中,看似不易出错。

我不知道如何为列表管理用户定义的“最大值”,也许这些列/属性的增加是最好的选择。

对于我的方法和可能的替代方案的建议,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

你可以在数据库中使用序列化和存储文本对象,但是当你选择它时会再次作为HASH或ARRAY访问,这可以解决你的问题,而不是重复字段将它存储为HASH,然后从中读取

看看这个:

Rails: Serializing objects in a database?

http://apidock.com/rails/ActiveRecord/Base/serialize/class