MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie kann man eine viele selbstbezogene Beziehung mit vielen Eltern modellieren?

Anstatt jedes Mal, wenn Sie alle Abhängigkeiten für eine Fertigkeit abrufen müssen, durch den Baum zu iterieren (eigentlich eher wie ein gerichteter Graph), können Sie einfach die implizierten Abhängigkeiten durchlaufen, wenn Sie einer bestimmten Fertigkeit eine neue Abhängigkeit hinzufügen, und diese in einer aufgerufenen Tabelle speichern „Abhängigkeit“, die eine Fertigkeit einer Abhängigkeit zuordnet und umgekehrt. Zum Beispiel (die Relationen könnten besser formuliert werden):

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

Sie sollten dann Dinge tun können wie:

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