2013-05-02 32 views
0

我從一個MongoDB的數據庫,我想導出到的Neo4j圖形以下信息:食品信息圖形建模

"_id" : 1366, 
"fields" : { 
"title" : "Beef Steak", 
"keywords" : [ 
    "beef", 
    "steak" 
], 
"categories" : { 
    "category" : "Meat", 
    "subcategory" : null, 
    "verified" : false, 
    "predicted" : true 
}, 
"nutrients" : 
    { 
     "tag_name" : "FASAT", 
     "value" : 1.352, 
     "unit" : "g", 
     "title" : "Saturated fatty acids" 
    }, 
    ... 

我一直在閱讀一些Neo4j的建模例子,但我不知道我的模型。

這是我在想什麼:

節點:

  • 食品
  • 關鍵字
  • 類別
  • 子類別
  • 營養

個關係:

  1. 食品 - rel_name - >關鍵字
  2. 食品 - rel_name - >類
  3. 食品 - rel_name - >子類別
  4. 類別 - rel_name - >子類別
  5. 食品 - has_nutrients - >營養素

「has_nutrients」關係名稱將包含一個「價值」屬性,以指示食物有多少營養素。

我認爲2,3和4關係有可能執行不同的查詢: - 「肉類」類別的子類別, - 食品的類別和子類別, - 所有與「麪食」類別相關的食品。也許有一個更簡單的方法。

回答

1

如果你想不出的關係更好的名字,只是像做

food - [HAS_KEYWORD] -> keyword 
food - [HAS_SUBCATEGORY] -> subcategory 
subcategory - [BELONGS_TO] -> category 
food - [HAS_NUTRIENT] -> nutrient 

爲了您的子類別,我通常喜歡從孩子家長一個方向,但我這通常更公正的偏好。

您需要區分類別和子類別嗎?如果類別爲Meat,子類別爲Pork,您是否需要實際鏈接到Meat?您可能只有與Pork的連接,這意味着Meat可以減少關係。

({name='Pork', type='Subcategory'}) -[BELONGS_TO]-> ({name='Meat', type='Category'}) 
({name='Pork Chops', type='Food'}) -[HAS_SUBCATEGORY]-> ({name='Pork', type='Subcategory'}) 

這將減少關係,因爲您可以暗示子類別中的類別。

除了上面的建議,其餘的看起來很像圖形,看起來像一個堅實的設計。