Was genau ist der Unterschied zwischen has_many, has_and_belongs_to_many und embeds_many in mongoid?

8

Ich verstehe das kein Programmierproblem, ich finde keine sehr klare und anschauliche Lösung.

    
d34th4ck3r 28.08.2013, 12:40
quelle

3 Antworten

12

Mongoids Dokumentation ist ziemlich klar:

  

Eingebettete Beziehungen beschreiben Dokumente, die in anderen Dokumenten in der Datenbank gespeichert sind.

     

Referenzierte Beziehungen beschreiben Dokumente, die auf Dokumente in einer anderen Sammlung verweisen, indem sie Fremdschlüsseldaten (normalerweise eine ID) über das andere Dokument in sich speichern.

Im Detail:

Referenziert 1-n / has_many

Beim Definieren einer Beziehung dieser Art wird jedes Dokument in seiner jeweiligen Sammlung gespeichert, aber das untergeordnete Dokument enthält einen "Fremdschlüssel" -Referenz auf das übergeordnete Element.

%Vor%

Referenziert n-n / has_and_belongs_to_many

Beim Definieren einer Beziehung dieser Art wird jedes Dokument in seiner jeweiligen Sammlung gespeichert, und jedes Dokument enthält eine "Fremdschlüssel" -Referenz auf die andere in Form eines Arrays.

%Vor%

Eingebettet 1-n / embeds_many

Dokumente, die mit dem Makro embeds_many eingebettet sind, werden als Array von Hashwerten innerhalb des übergeordneten Elements in der Datenbanksammlung des übergeordneten Elements gespeichert.

%Vor%     
Stefan 28.08.2013 12:49
quelle
0

gehört zu:

Eine assignes_to-Assoziation richtet eine Eins-zu-Eins-Verbindung mit einem anderen Modell ein, so dass jede Instanz des deklarierenden Modells "zu einer Instanz des anderen Modells gehört". has_many

has_many:

Eine has_many-Assoziation zeigt eine Eins-zu-viele-Verbindung mit einem anderen Modell an. Sie finden diese Assoziation oft auf der "anderen Seite" einer assignes_to-Assoziation. Diese Zuordnung gibt an, dass jede Instanz des Modells null oder mehr Instanzen eines anderen Modells aufweist.

embeds_many:

wird in mongoid für mongodb selbe wie has_many

verwendet     
Rajarshi Das 28.08.2013 12:49
quelle
0

Embeds_many verlinkt mit Ihrem Objekt viele Male eine Sammlung als eingebettete Objekte (1: N) Has_many wird das gleiche tun, aber nicht als eingebettete Objekte (1: N)

Der letzte wird meistens das Äquivalent von (N: N) sein

    
Nox 28.08.2013 12:51
quelle