随着我的Rails应用程序的成熟,越来越明显的是它具有强大的数据仓库功能,仅缺少一个事实表就可以使所有内容变得清晰。

最重要的是,我仅阅读了Ruby Best Practices的第2章(设计漂亮的API)和第3章(掌握动态工具包)。

现在,我试图找出如何最好地设计事实检索部分...

假设我有以下尺寸(应用中现有的型号):

  • 产品(包含资金)
  • 基金
  • 度量值(例如总持股量,平均持股量,平均敞口)

  • ...以及一个良好的旧通用事实:
  • 事实(日期,值以及我的每个维度的外键可为空的列)

  • 我很高兴能从中获得一些建议:
  • 什么可以构成灵活的检索接口(interface)?
  • 如果我具有维度的NULL(即全部或无关)和NOT NULL(特定值)的事实,该怎么办?像:all这样的伪值?还是应该适用某些约定?
  • 如何仅选择尺寸值的子集?还是排除一个子集? :only和:exclude?
  • 有没有人创建过named_scope来处理此问题?能够针对每个感兴趣的维度链接一个链显然具有吸引力,但是如果我们达到7或8个维度,它会变得笨拙吗?

  • (我知道acts_as_fact插件据说以某种形式存在(至少在RailsConf 2006上有一些嗡嗡声),但我找不到任何代码或描述它可能如何工作的信息。)

    版本:Rails,ActiveRecord 2.1.2,Oracle增强适配器1.2.0

    编辑:我看了ActiveWarehouse,并有一些保留:
    -自从08年11月以来,主分支一直没有提交过,并且自09年1月以来根本没有任何事件;
    -该教程的日期为2006年,已经过时,并且在我身上显示404;
    -似乎想摆脱ActiveRecord-我的大部分应用程序都将保留在AR中,而我认为目前我需要一个AR解决方案。

    因此,我将避免使用该命令,谢谢!

    最佳答案



    NULL可能会引起误导,因为它表示没有关联。我会使用-1之类的值(如果它是仅值> 0的整数foreign_key)。


    with_scope()
    

    您也可以覆盖查找功能
       def self.find(*args)
        if  anything
          with_scope(a_scope) do
             result = super *args
          end
        else
          result = super *args
        end
       end
    
       def self.a_scope
        {:find => { :conditions => ["person_id  = ?", me] , :readonly => true}}
       end
    



    我们有一个带有4维的olap数据库,它工作得很好。我认为,如果您为active_record实现一些自定义方法,那么您的应用程序将很有趣。

    我也发现了这个:http://github.com/aeden/activewarehouse/tree/master

    关于ruby-on-rails - 使用ActiveRecord与数据仓库风格的表进行对话吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1221858/

    10-14 15:50
    查看更多