sql >> Databáze >  >> NoSQL >> MongoDB

Jak modelovat mnohostranný vztah s mnoha rodiči?

Namísto iterování stromem (spíše jako orientovaný graf) pokaždé, když potřebujete získat všechny závislosti pro dovednost, můžete při přidávání nové závislosti ke konkrétní dovednosti pouze iterovat implicitní závislosti a uložit je do tabulky nazvané 'Závislost', která mapuje dovednost na závislost a naopak. Například (vztahy by mohly být lépe formulovány):

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

Pak byste měli být schopni dělat věci jako:

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



  1. Index v MongoDB

  2. Knihovna BSON pro java?

  3. Vícenásobné odkazy na schéma v jednom poli schémat - mongoose

  4. MongoDB:Jsou čtení/zápisy do databáze souběžné?