2016-12-12 30 views
0

Ich bin neu zu no-sql. Ich versuche, eine einfache E-Commerce-App in nodejs zu bauen. Jetzt für das Produkt muss ich CRUD-Operationen erstellen, so dass nur Besitzer sie bearbeiten können, Ruhe haben READ-ONLY Zugriff. Die Hauptfrage ist, welche wäre eine bessere Umsetzung?Welches Mungo-Modell wäre effizienter?

Der aktuelle Code, den ich habe, ist wie

var mongoose = require('mongoose'); 

module.exports = mongoose.model('product',new mongoose.Schema({ 
    owner  : {type: String}, 
    title  : {type: String}, 
    ... 
})); 

Der Inhaber tatsächlich das Modell _id von meinem Benutzer ist. Im Grunde ist das so etwas wie ein Fremdschlüssel. Ist das die gültige Methode um herumzugehen oder sollte ich ein Array innerhalb der user model hinzufügen, um die Liste der Objekte zu speichern, die er besitzt?

Auch ich möchte Validierung haben, wenn was ich gerade für Besitzer getan habe, Speichern UID in String ist Best Practice oder sollte ich etwas anderes tun, um das Benutzermodell zu verweisen.

Vielen Dank im Voraus für die Hilfe.

Antwort

1

Der ganze Sinn von Dokumenten-Datenbanken ist, dass Sie keine ausländischen Beziehungen haben sollten; Alle Daten, die Ihr Dokument benötigt, sollten im Dokument denormalisiert werden.

So in Ihrem product Dokument, sollten Sie alle Besitzerdetails duplizieren, die Sie benötigen. Sie können speichern ihre _id auch für die Suche, aber verwenden Sie keine Zeichenfolge für diese, verwenden Sie eine tatsächliche ObjectId().

Weitere Informationen über Denormalisierung sehen The Little MongoDB Book

Noch eine weitere Alternative schließt sich an mit Ihren Daten denormalize. In der Vergangenheit war die Denormalisierung für leistungsabhängigen Code reserviert, oder wenn Daten wie in einem Überwachungsprotokoll gespeichert werden sollten. Mit der ständig wachsenden Popularität von NoSQL, von denen viele keine Joins haben, wird die Denormalisierung als Teil der normalen Modellierung immer üblicher. Dies bedeutet nicht, dass Sie jede Information in jedem Dokument duplizieren sollten. Anstatt jedoch zu befürchten, dass doppelte Daten Ihre Designentscheidungen beeinflussen, sollten Sie Ihre Daten basierend darauf modellieren, welche Informationen zu welchem ​​Dokument gehören.

+0

Hallo, vielen Dank für den Link, nur damit wir auf der gleichen Seite sind, sollte ich eher ein Array mit Objectid-Objekt für Benutzer erstellen? – georoot

+0

Nicht OP, aber ich denke, sie schlagen vor, dass Sie Besitzerinformationen direkt in das Produktmodell einfügen und dann möglicherweise auch ein Array von Produkt-IDs zum entsprechenden Besitzer hinzufügen. Sie sollten jedoch beachten, dass Sie bei der Verwendung dieses Ansatzes zusätzliche Probleme berücksichtigen müssen, wie z. B. die Aktualisierung des Besitzers, in der Sie möglicherweise auch N Produkte für die denormalisierten Besitzerdaten aktualisieren müssen. Ein weiteres Problem besteht darin, dass Sie beim Zuweisen eines Besitzers zu einem Produkt auch das Array der Produkt-IDs des Besitzers aktualisieren müssen. – dvlsg

Verwandte Themen