2011-02-05 45 views
0

我想创建一个将使用与背包相同的系统(http://www.backpackit.com)来创建不同类型的页面的应用程序。如何为背包式应用程序建模数据库

基本上,您可以添加不同的元素到一个页面,并对它们进行重新排序。一些元素可以包含其他元素(如包含图像或列表等的图像库)。

我不知道如何建模。

我希望能够做这样的事情:无需检索自己

class Page < ActiveRecord::Base 
    has_many :texts, :dependent => :destroy 
    has_many :titles, :dependent => :destroy 

    def elements 
     @elts = texts + titles + ... 
     #order elts... 
    end 
end 

所以我想单表继承所有元素

page.elements 

。 我可以有一个Containers表,Notes,Galleries,Lists等可以从Containers继承。 然后,我会有可以使用多态性链接到各种容器的元素。

你会怎么做?你看到我的方法有什么根本的缺陷?

谢谢!

回答

2

首先,设计效率不高,因为它可以,但它是否是根本性的缺陷,实际上取决于你的经验水平:

案例1:你是比较新的规划和努力通过逆向工程开始并实施您可以看到并理解的内容(背包)。如果这是真的,那么你就不能通过深入研究并使用ORM哲学来设计数据库表,就好像它们是持久化类一样。这样做效率不高,但是您不用担心数据库就可以学到很多东西了。案例2:你是一位资深的程序员(至少有一个像样的应用程序实际上被那些付费的人使用),并且出于某种原因仍然用面向对象的术语来表达数据库设计问题。然后你有一个根本的缺陷,只是因为有一个很好的机会,你会体验成功,将强调系统,在这一点上,“表继承”的根本低效率会咬你。

+0

感谢您的回答。我不确定我是否清楚:我没有问如何在rails中实现单表继承或多态,我对它很熟悉。我更多地问自己如何模拟整个事情。 – Robin 2011-02-05 01:54:21

相关问题