Rails中的Forced Binary Matrix公司结构实现

时间:2014-07-04 19:58:24

标签: ruby-on-rails ruby algorithm postgresql binary-tree

我正在开发一个Rails项目,该项目使用二进制矩阵计划模式对公司的结构进行建模。每个新用户都“放置”在层次结构中,如下所示:

User insertion algorithm

没有平衡,所有级别必须在移动到下一个级别之前填充。插入新手时只有插入顺序才有意义。 我们的数据库系统是Postgres。

我计划使用一些gem来帮助我实现树实现(Closure Tree是一个坚定的候选人)但是我不确定如何处理这个'强制二进制文件的约束(插入,删除)树从左到右'模型。

我正在努力解决所有这些问题,但由于我从未参与过这样的实施(特别是涉及数据库),我想我可以使用经验丰富的程序员提供的一些帮助来解决常见的陷阱,或者我应该在哪里特别注意。预计用户群会快速增长,因此我担心性能问题。

所以我的问题:

  • 由于我坚持使用关系数据库,对这种模式进行建模的最佳方法是什么?
  • 我是否有任何文档或宝石可以深入研究实现我需要的所有算法的最佳方法?

提前感谢任何提示/指示。

2 个答案:

答案 0 :(得分:1)

这是适合我的解决方案。

  1. 创建rails应用程序并将Postgresql指定为数据库。

  2. 将acts_as_sane_tree gem添加到您的gemfile中。

  3. 使用parent_id列为您的用户生成模型 作为外键。

  4. 数据库迁移文件应如下所示

    class CreateUsers < ActiveRecord::Migration[5.0]
      def change
        create_table :users do |t|
          t.string :name
          t.integer :parent_id
          t.timestamps
        end
      end
    end
    
  5. 您的模型应具有以下方法:

    class User < ApplicationRecord
        acts_as_sane_tree :order => "name"
    end
    
  6. 您可以从以下链接中找到更多信息:

    https://github.com/chrisroberts/acts_as_sane_tree

    http://www.gmarik.info/blog/2012/recursive-data-structures-with-rails/

答案 1 :(得分:0)

我正在考虑这种方式:

  1. 每棵树都有一个ID;
  2. 每个节点都有一个ID;
  3. 创建名为nodes的表格,其中的字段为:tree_idparent_node_idvalueid
  4. 然后你可以用一个查询重建这个树。要更新树,只需用树对应的树ID更新所有节点。我认为组织不会有太多员工使绩效成为制约因素。