【发布时间】:2012-09-01 20:28:53
【问题描述】:
我一直在研究解决我的问题的最佳方法,我最初是作为单表继承实现的,但我非常担心可伸缩性,因为表中可能会有数千列。
所以问题是我想要每个产品的方法完全相同的产品,唯一的区别是每个产品包含的属性。在这种情况下,多类继承(rails 本身不支持?)似乎是最好的方法或某种多态关联。
我想朝着以下方向努力
#product.rb
Class Product < ActiveRecord::Base
attr_accessible :title .....
def to_s # some arbitrary method used by all extending classes
....
end
end
#book.rb
class Book < Product
attr_accessible :author...
end
所以我希望这本书继承产品的方法,而不是让产品知道每个子类所需的属性。如果可能,通过一次查询获取所有产品。
我需要知道解决这个问题的最佳方法,如果我做错了,请注意上面编写的代码只是为了简化我的问题。
【问题讨论】:
-
有没有考虑过像Mongodb这样的文档数据库?您可以为每个类定义属性,这样您就可以灵活地使用您想要的任何属性,而无需更改所有模型的数据库表。
-
没有考虑过使用 Mongo,正计划使用 postgres,因为数据库可能有数百万行,并决定 postgres 在这些方面是最可靠的。在postgres或者mysql中实现这个结构不可行吗?我来自更强大的 OO 背景,这在其他语言中是一件非常简单的事情:P
-
我假设每个模型都有不同的列,这就是为什么我建议使用无模式的东西。
标签: ruby-on-rails inheritance associations polymorphism scalability