Datenbanken Online Lexikon TH Köln, Campus Gummersbach
Aktuelle Änderungen - Suchen:

SchemaDesign

MongoDB ist eine dokumentenbasierte folglich schemalose Datenbak. Allerdings bietet MongoDD einige Werkzeuge an, mit diesen ein rudim�nteres Schema Design umsetzbar ist. Hierbei ist zu beachten, dass das Schema Design aus relationalen Datenbanken sich nicht immer in MongoDB abbilden l�sst, da dokumentenorientierte Datenbanken anders aufgebaut sind. Nachfolgend wird in diesem Zusammenhang auf die wichtigsten Punkte eingegangen.

Relationen

Der wichtigste Punkt beim Schemadesign sind Relationen. Hierbei verfolgt MongoDB den folgenden Ansatz: "Lagere DIE Informationen aus, bei denen es sinnvoll erscheint und denormalisiere an der Stelle, an der es dir Geschwindigkeit bringt"[#Boeker] Es gibt drei verschiedene M�glichkeiten in MongoDB Dokumente miteinander zu verkn�pfen:

  • Verlinkung anhand der ObjectID
  • DBRef einsetzen, die eine Verlinkung auf Collection und ObjectId einschlie�t
  • Verkn�pfung von Dokumenten �ber einfache Feldwerte, hierbei empfehlen sich nur die Felder, die nicht ver�nderbar sind

Relationen mit ObjectID

Vorteil hier ist, dass ohne gro�e M�he eine Relation abbildbar ist und auch das Abfragen einfach ist. Nachteil hingegen ist, dass immer gewusst werden muss, zu welcher Collection die ObjectID geh�rt. Hierbei kann es passieren, dass ein Feld im Dokument auf unterschiedliche Collections zeigt. Dies l�sst sich durch Relationen mit DBRef verhindern.

Relationen mit DBRef

Hier wird die Verkn�pfung durch die Kombination von ObjectID und Collection bewerkstelligt und vermeidet somit den oben angesprochenen Nachteil. Es muss f�r die Bearbeitung des verkn�pften Dokuments allerdings die fetch-Methode verwendet werden, um diese zu laden: {field: new DBRef(<collection>, <object-id>)} |Anlegen einer neuen Referenz db.users.findOne().field.fetch().Bsp |Verwendung der Fetch-Methode

Eingebettete Dokumente

Anstatt Referenzen kann auch direkt das Dokument selber eingebettet werden, dies bietet sich an, wenn das Dokument nicht besonders gro� ist und die hier gespeicherten Informationen nicht oft in anderen Dokumenten verwendet werden. Zusammenfassend gesagt

  • Sind die Informationen redundant sollten sie ausgelagert werden
  • �berschreitet das Dokument inklusive embeddedDoc die maximalen Dokumentengr��e (zur Zeit 16MB) , sollte das eingebettete Dokument ebenfalls ausgelagert werden.

Listen verwenden

Es ist in MongoDB einfach One-to-Many bzw. Many-to-Many Relationen abzubilden, d.h. mehrere Werte einem Datensatz zuzuordnen, dies kann �ber Listen erfolgen.

Beispiel

db.users.insert({
name: "Max Mustermann",
tags: ["web", "Pizza", "MongoDB"]
})
db.users.insert({
name: "Moritz Mustermann",
tags: ["SGDB", "Salat", "MongoDB"]
})
db.users.find({tags: {$in: ["SGDB", "Pizza", "MongoDB"]}})
{
"_id": ObjectId("1234567890"),
"name": "Max Mustermann",
"tags" : ["web", "Pizza", "MongoDB"]
}
{
"_id": ObjectId("1234567890"),
"name": "Moritz Mustermann",
"tags" : ["SGDB", "Salat", "MongoDB"]
}

Mit Hilfe der Query-Operatoren $all und $in lassen sich Abfragen und Zuordnungen von Tags einfach bewerkstelligen. Wie bei eingebetteten Dokumenten sollte bei Listen darauf geachtet werden, dass die Gesamtgr��e der Datei das 16 MB-Limit nicht �berschreitet, da diese sonst nicht gespeichert werden kann.

zur�ck zu MongoDB