2016-04-21 2 views
3

Nehmen wir an, ich muss Datensätze von Tüchern in MongoDB speichern. Attribut des Tuches istMany-to-Many-Datenmodellierung zwischen Feldern für jeden Datensatz in mongoDB

  • Name
  • Beschreibung
  • Stil
    • Größe
    • Farbe
    • Zustand
  • Marke
    • herstellername
    • someAttrubute
  • Preis

Für jedes Tuch Preisänderungen für jede Kombination von Stil und Marke. Wie modelliere ich das in mongoDB? Bisher, was ich gedacht haben ist:

{ 
    "name": "A name", 
    "description": "A typical description", 
    "style":[ 
    {"size": "XL","color": "red", "condition": "good"},//--style 0 
    {"size": "XXL","color": "white", "condition": "bad"},//--style 1 
    //... 
    {"size": "L","color": "black", "condition": "best"}//--style N 
    ], 
    "brand":[ 
    {"brandName":"brand0","someAttribute":"Attribute 0"}, 
    {"brandName":"brand1","someAttribute":"Attribute 1"}, 
    {"brandName":"brand2","someAttribute":"Attribute 2"} 
    ], 
    "price":[ 
    //Every price need to be added for every combination of brand and style 
    {"style":0,"brand":0,"price": 10}, 
    {"style":0,"brand":1,"price": 20}, 
    {"style":0,"brand":2,"price": 30}, 
    {"style":1,"brand":0,"price": 10}, 
    {"style":1,"brand":1,"price": 20}, 
    //... 
    {"style":"N","brand":2,"price": 10} 
    ] 
} 

Ich glaube nicht, dass dies der richtige Weg ist es in mongoDB zu tun. Wie modelliere ich das?

+1

Das ist eigentlich ein viel zu weites Thema, und es gibt im Allgemeinen nicht so etwas wie "Der richtige Weg" * sondern nur das, was "am besten für Ihre Anwendung" ist. Eine Sache, die Sie beachten sollten, ist, dass es nicht möglich ist, einen Index zu erstellen, der mehr als "ein" Array-Feld abdeckt. Sie können ein Array-Feld in einem Index mit anderen regulären Feldern verknüpfen, aber bei mehreren Arrays ist dies nicht möglich. Siehe ["Einschränkungen"] (https://docs.mongodb.org/manual/core/index-multikey/#limitations) auf der Manualpage von Multikey indexes. Also wirst du generell etwas "flacheres" wollen als das, was deine Instinkte denken. –

Antwort

0

Ich würde so gehen,

{ 
    "name": "A name", 
    "description": "A typical description", 
    "priceGroup" : [ 
     { 
      "style": {"size": "XL","color": "red", "condition": "good"}, 
      "brand": {"brandName":"brand0","someAttribute":"Attribute 0"} 
      "price": 10 
     }, 
     { 
      "style": {"size": "XXL","color": "white", "condition": "bad"}, 
      "brand": {"brandName":"brand0","someAttribute":"Attribute 0"} 
      "price": 20 
     }, 
     { 
      "style": {"size": "XL","color": "red", "condition": "good"}, 
      "brand": {"brandName":"brand1","someAttribute":"Attribute 1"} 
      "price": 30 
     }, 
     { 
      "style": {"size": "XXL","color": "white", "condition": "bad"}, 
      "brand": {"brandName":"brand1","someAttribute":"Attribute 1"} 
      "price": 40 
     }, 
     ..... 
    ] 
} 

Aber wie @Neil Lunn darauf hingewiesen, während nosql Schemata entwerfen, gibt es keine Regeln, wie in Konzept relationalen Datenbank-Design - keine Normalisierung. Daher ist es mehr Ihre Anwendung und Anforderungen. Legen Sie die Dinge, die Sie abfragen werden, in einer Sammlung zusammen und die anderen in einer anderen Sammlung.

Verwandte Themen