sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan modellerer man et mange selvrefererende forhold til mange forældre?

I stedet for at iterere gennem træet (mere som en rettet graf faktisk) hver gang du skal hente alle afhængigheder for en færdighed, kan du måske bare gentage de underforståede afhængigheder, når du tilføjer en ny afhængighed til en bestemt færdighed og gemme disse i en tabel kaldet 'Afhængighed' som kortlægger en færdighed til en afhængighed og omvendt. For eksempel (relationerne kunne være bedre formuleret):

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 derefter være i stand til at gøre ting som:

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



  1. MongoDB:sæt bruger/adgangskode for at få adgang til db

  2. Sådan starter du en brugerdefineret RQ-arbejder i en Docker-container (Python, Flask og Redis)

  3. Opdater mongo array-elementer efter indeks med c-driver

  4. Sådan ekskluderes _id uden at inkludere andre felter ved hjælp af aggregeringsrammerne