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

Bestes Modell zur Darstellung von Many-to-Many-Beziehungen mit Attributen in MongoDB

In vielerlei Hinsicht fördert die API von Meteor flache relationale Dokumente, MongoDB ist jedoch ein nicht relationaler Datenspeicher. Dieser Konflikt wird leider dem Entwickler als Übung zur Lösung überlassen.

Der Begriff der Schemastruktur und Verknüpfungen ist ein enormes Thema, das in einer einzigen Antwort behandelt werden muss, daher werde ich versuchen, mich so kurz wie möglich zu fassen.

Gründe, warum Sie sich für ein relationales Modell entscheiden sollten

Angenommen, Sie haben Kommentar- und Beitragsdaten. Überlegen Sie, was passieren würde, wenn Sie Kommentare in Ihre Posts einbetten.

  • DDP arbeitet mit Dokumenten. Alle Kommentare werden jedes Mal gesendet, wenn ein neuer Kommentar in demselben Beitrag hinzugefügt wird.

  • allow und deny Regeln wirken auf Dokumente. Es ist möglicherweise unvernünftig zu erwarten, dass dieselben Regeln gleichzeitig für Posts und Kommentare gelten.

  • Bei Sammlungen sind Publikationen eher sinnvoll. Im obigen Szenario konnten wir nicht einfach eine Liste von Kommentaren unabhängig von ihren Beiträgen veröffentlichen.

  • Relationale Datenbanken gibt es aus guten Gründen. Eine davon besteht darin, das Problem der mehrfachen Modifikation zu vermeiden, das Ihrer zweiten Lösung innewohnt.

Gründe, warum Sie sich für ein eingebettetes Modell entscheiden sollten

  • Joins werden von MongoDB nicht nativ unterstützt, und es gibt kein Kernpaket zum Erstellen eines reaktiven Joins.

Empfehlungen

Verwenden Sie Ihre dritte Lösung. Meiner Erfahrung nach überwiegen die Gründe für die Wahl eines relationalen Modells bei weitem die Einschränkungen, die durch den Datenspeicher auferlegt werden. Natürlich ist es nicht einfach, das Fehlen von Joins zu überwinden, aber der Schmerz wird wahrscheinlich nur auf eine Handvoll Veröffentlichungsfunktionen beschränkt sein. Hier sind einige Ressourcen, die ich sehr empfehlen würde:

  • So veröffentlichen Sie eine Viele-zu-Viele-Beziehung auf EventedMind. Chris behandelt Ihren genauen Anwendungsfall im Detail, aber er führt den reaktiven Join manuell mit Beobachtungsrückrufen durch, was ich nicht empfehle.

  • Reactive schließt sich Meteor aus der Discover Meteor Encyclopedia an. Dies behandelt die Grundlagen, wie und warum man einen reaktiven Join durchführen sollte.

  • Das Denormalisierungskapitel von Discover Meteor. Dies deckt viele der oben genannten Punkte ab und spricht auch darüber, wann und wie Sie einige Ihrer Daten denormalisieren können.

  • Sie können Mit Beziehungen veröffentlichen verwenden, um Ihre Daten zu verknüpfen. Zu den alternativen Paketen gehören:Smart Publish, Publish Composite und Simple Publish.

Wenn Sie darüber hinaus weitere Informationen benötigen, kommentieren Sie bitte unten und ich werde meine Antwort aktualisieren.