Rails:如何处理数据库中的动态属性?

时间:2009-07-11 16:37:36

标签: ruby-on-rails activerecord

如果你遇到像craigslist,oodle,kijiji等分类广告网站......一切都是机密的,当你发布一个分类时,它们根据一个选择的类别显示不同的表单字段。例如,如果您要发布关于汽车的分类,它们会显示品牌,型号,内饰等...您认为数据在数据库中的处理方式如何?

你认为他们是为每种类型的分类创建单独的表吗?或者一切都是一个表“分类”?如果使用一个表(STI)处理数据,则每个场景(分类的类型)必须有列,并且所有字段可能不会用于每个分类。

设计ActiveRecord对象以处理类似分类广告网站的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

毫无疑问,有一个来源为每种类型的分类指定了基本模式。如果您自己实现这样的系统,可以通过使用无架构的持久层(例如CouchDB)来保存单个记录,从而帮助您。

这样做意味着添加或删除给定模式类型的属性不需要影响旧记录。

答案 1 :(得分:0)

他们可能有单独的表格。虽然它们都是分类广告,但它们是用户的“类别”,正如您所说的那样,数据非常不同,我怀疑它们是因为这个而单独存储的。当大多数时候人们将查询单个表时,将它们全部存储在一个大表中将没有真正的优势(我能想到)。正如你所说,缺点是所有类型的所有列都需要在一个表中,这将创建一个包含大量空数据的宽表。

类别本身非常固定,因此添加新类别可能非常罕见。另一种方法是定义与一个大表关联的属性和动态属性的模板(分类有许多属性)。但从性能的角度来看,这可能并不好。