MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment modéliser une relation multi-autoréférentielle avec plusieurs parents ?

Au lieu d'itérer dans l'arborescence (plus comme un graphe orienté en fait) chaque fois que vous avez besoin de récupérer toutes les dépendances d'une compétence, vous pouvez simplement parcourir les dépendances implicites lors de l'ajout d'une nouvelle dépendance à une compétence particulière et les enregistrer dans une table appelée « Dépendance » qui associe une compétence à une dépendance et vice versa. Par exemple (les relations pourraient être mieux formulées) :

class Skill
    has_many :dependers, class_name: 'Dependency', foreign_key: :dependee_id
    has_many :dependees, class_name: 'Dependency', foreign_key: :depender_id

    has_many :dependencies, through: :dependees
    has_many :depending, through: :dependers

    def add_dependency(skill)
        recurse_dependencies(skill)
    end

    def recurse_dependencies(skill)
        # perform this check to avoid circular and duplicate dependencies
        if !depender_ids.include?(skill.id) && !dependee_ids.include?(skill.id)
            dependee_ids << skill.id
        end

        skill.dependencies.each do |dependency|
            recurse_dependencies(dependency)
        end
    end
end

class Dependency
    belongs_to :dependee
    belongs_to :depender
end

Vous devriez alors pouvoir faire des choses comme :

@front_end_development.dependencies
@front_end_development.depending
@front_end_development.add_dependency(@html)