食品信息图建模

时间:2013-05-02 22:00:21

标签: database-design neo4j

我从mongodb db获得以下信息,我想将其导出到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. food - rel_name - >关键字
  2. food - rel_name - >类
  3. food - rel_name - >子类
  4. category - rel_name - >子类
  5. 食物 - 有营养素 - >营养
  6. “has_nutrients”关系名称将包含“value”属性,以指示食物中有多少营养素。

    我认为2,3和4关系有可能执行不同的查询: - “肉类”的子类别, - 食物的类别和子类别 - 所有具有“意大利面”类别的食物。也许有一种更简单的方法。

1 个答案:

答案 0 :(得分: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'})

这将减少关系,因为您将能够暗示子类别中的类别。

除了上面的建议,其余的看起来非常面向图形,看起来像一个坚实的设计。