sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur modellerar man en många självrefererande relation med många föräldrar?

Istället för att iterera genom trädet (mer som en riktad graf faktiskt) varje gång du behöver hämta alla beroenden för en färdighet, kan du bara iterera genom de underförstådda beroenden när du lägger till ett nytt beroende till en viss färdighet och spara dessa i en tabell som heter 'Beroende' som mappar en färdighet till ett beroende och vice versa. Till exempel (relationerna skulle kunna formuleras bättre):

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

Du bör då kunna göra saker som:

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



  1. MongoDB-relationer för objekt

  2. Skiva med projektion med C#

  3. Sortering efter virtuellt fält i mongoDB (mongoose)

  4. Hur sorterar man två åkrar med mangust?