Wie entwerfe ich ein solches Schema in MongoDB? Ich denke es gibt keine Fremdschlüssel!
sql
mongodb
foreign-keys
nosql
Mark Pegasov
quelle
quelle
Antworten:
Möglicherweise möchten Sie ein ORM wie Mongoid oder MongoMapper verwenden.
http://mongoid.org/docs/relations/referenced/1-n.html
In einer NoSQL-Datenbank wie MongoDB gibt es keine 'Tabellen', sondern Sammlungen. Dokumente werden in Sammlungen gruppiert. Sie können jede Art von Dokument - mit jeder Art von Daten - in einer einzigen Sammlung haben. Grundsätzlich liegt es in einer NoSQL-Datenbank an Ihnen, zu entscheiden, wie die Daten und ihre Beziehungen, falls vorhanden, organisiert werden sollen.
Mongoid und MongoMapper bieten Ihnen bequeme Methoden zum einfachen Einrichten von Beziehungen. Schauen Sie sich den Link an, den ich Ihnen gegeben habe, und fragen Sie etwas.
Bearbeiten:
In Mongoid schreiben Sie Ihr Schema wie folgt:
Bearbeiten:
Sie können diese ObjectId verwenden, um Beziehungen zwischen Dokumenten herzustellen.
quelle
Erstens, um einige Namenskonventionen zu klären. MongoDB verwendet
collections
anstelle vontables
.Nehmen Sie das folgende Modell:
Die Kursliste von Jane weist eindeutig auf bestimmte Kurse hin. Die Datenbank wendet keine Einschränkungen auf das System an ( dh Fremdschlüsseleinschränkungen ), daher gibt es keine "kaskadierenden Löschvorgänge" oder "kaskadierenden Aktualisierungen". Die Datenbank enthält jedoch die richtigen Informationen.
Darüber hinaus verfügt MongoDB über einen DBRef-Standard , mit dessen Hilfe die Erstellung dieser Referenzen standardisiert werden kann. Wenn Sie sich diesen Link ansehen, gibt es ein ähnliches Beispiel.
Um klar zu sein, ist MongoDB nicht relational. Es gibt keine Standard "Normalform". Sie sollten Ihre Datenbank entsprechend den von Ihnen gespeicherten Daten und den Abfragen modellieren, die Sie ausführen möchten.
quelle
Wir können das sogenannte
foreign key
in MongoDB definieren. Allerdings müssen wir die Datenintegrität erhalten von uns . Beispielsweise,Das
courses
Feld enthält_id
s von Kursen. Es ist einfach, eine Eins-zu-Viele-Beziehung zu definieren. Wenn wir jedoch die Kursnamen des Studenten abrufen möchtenJane
, müssen wir einen weiteren Vorgang ausführen, um dascourse
Dokument über abzurufen_id
.Wenn der Kurs
bio101
entfernt wird, müssen wir einen weiteren Vorgang ausführen, um dascourses
Feld imstudent
Dokument zu aktualisieren .Mehr: MongoDB Schema Design
Die dokumenttypisierte Natur von MongoDB unterstützt flexible Möglichkeiten zum Definieren von Beziehungen. So definieren Sie eine Eins-zu-Viele-Beziehung:
Eingebettetes Dokument
Beispiel:
Kinderreferenzierung
Wie das
student
/course
Beispiel oben.Übergeordnete Referenzierung
Geeignet für Eins-zu-Billionen, wie z. B. Protokollnachrichten.
A ist praktisch
host
das Elternteil von alogmsg
. Das Verweisen auf diehost
ID spart viel Platz, da die Protokollnachrichten Billionen sind.Verweise:
quelle
Aus dem kleinen MongoDB-Buch
So,
Wenn es sich um RESTful-API-Daten handelt, ersetzen Sie die Kurs-ID durch einen GET-Link zur Kursressource
quelle
Der Zweck von ForeignKey besteht darin, die Erstellung von Daten zu verhindern, wenn der Feldwert nicht mit dem ForeignKey übereinstimmt. Um dies in MongoDB zu erreichen, verwenden wir Schema-Middlewares, die die Datenkonsistenz sicherstellen.
Bitte schauen Sie sich die Dokumentation an. https://mongoosejs.com/docs/middleware.html#pre
quelle