2014-07-04 103 views
5

我正在開發一個Rails項目,該項目使用二元矩陣計劃模式對公司的結構進行建模。每個新用戶層次結構中的「設置」,如下所示:在Rails中強制實施二進制矩陣公司結構

User insertion algorithm

沒有平衡和各級財政要移動到下一個之前被填充。插入新人時只有插入順序很重要。 我們的數據庫系統是Postgres。

我打算使用一些gem來幫助我實現樹(Closure Tree是一個堅實的候選人),但我不確定如何處理這個「強制二叉樹從左邊的約束(插入,刪除)向右「的模式。我試圖找出所有這些,但因爲我從來沒有參與過這樣的實現(特別是涉及到數據庫),所以我想我可以使用一些有經驗的程序員在常見陷阱上的幫助,或者我應該在哪裏放置特殊的注意。預計用戶羣將迅速增長,因此我擔心業績。

所以我的問題:

  • 由於我堅持到關係數據庫中,這將是該模式模擬的最佳方式?
  • 是否有任何文檔或寶石,我可以挖掘到學習實現所有我需要的算法的最佳方法?

在此先感謝您的任何提示/指針。

+0

您需要在此結構上執行哪些操作? – freemanoid

+0

刪除需要什麼?我假設從樹的中間刪除不應該刪除所有下降的員工,那麼這個樹的轉移水平還剩下來填補,還是你讓一個孩子進入空地?這兩種操作看起來都像重新平衡,你說你不需要。 –

回答

0

我在想是這樣的:

  1. 每棵樹都有一個ID;
  2. 每個節點都有一個ID;
  3. 創建表稱爲nodes,在這領域是:tree_idparent_node_idvalueid

那麼在哪裏重建這棵樹有一個單一的查詢。爲了更新樹,只需用樹對應的樹ID來更新所有節點。我認爲組織不會有太多讓績效成爲約束的員工。

1

這是爲我工作的解決方案。

  1. 創建您的rails應用程序並指定Postgresql作爲數據庫。

  2. 將acts_as_sane_tree gem添加到您的gem文件中。

  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 
    

您可以從下面的鏈接瞭解更多信息:

https://github.com/chrisroberts/acts_as_sane_tree

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