Смоделировать неориентированный граф в Rails?

Импорт языка графовых баз данных , понимание

  1. узлов (, представленных кружками ),
  2. ребра ( представлены стрелками ) и
  3. свойства ( метаданные узлов / ребер )

Graph Database Property Graph

Графика (любезно предоставлено википедией) описывает ориентированный граф .

Как лучше всего смоделировать неориентированный граф в Rails?

То есть граф, в котором все ребра взаимны ( как на рисунке выше ), и где свойства каждого ребра одинаковы независимо от направления ( в отличие от приведенного выше рисунка ).

Предположим, что Rails 3 по умолчанию настроен с использованием хранилища sql через ActiveRecord.

Двойная полиморфная ассоциация создаст ориентированный граф, способный моделировать данные, описанные на изображении выше.

def Edge < ActiveRecord::Base
  belongs_to :head, polymorphic: true
  belongs_to :tail, polymorphic: true
end

class Node < ActiveRecord::Base
  has_many :from, as: :head
  has_many :to, as: :tail
end

class Group < ActiveRecord::Base
  # a Node of Type: Group
  has_many :from, as: :head
  has_many :to, as: :tail
end

Следует ли расширять эту модель для управления обратными отношениями, или доступна лучшая модель?


Одним из элементов приложения может быть проблема с графом, но это не означает, что приложение сосредоточено вокруг проблемы, это пересечение графа должен выполняться с данными, а также с тем, чтобы размер набора данных превышал доступную память.

19
задан Community 8 February 2017 в 14:33
поделиться