一类对象的图数据库数据模型

时间:2015-04-16 17:29:44

标签: neo4j data-modeling graph-databases

说我是一名机械师,他曾在许多不同的汽车上工作,并希望保留一份我工作过的汽车数据库。这些汽车有不同的制造商,型号,而且有些客户对这些汽车的改装版本有不同的部件,所以不能保证同一型号的汽车可以提供相同的汽车。此外,我希望能够轻松地看到所有这些不同的汽车及其相似之处/不同之处。基本上,数据库需要既代表我遇到的所有汽车之间的逻辑相似性/差异,同时仍然让我能够推/拉我遇到过的每辆汽车。

  1. 是否为关系数据库或图表数据库设置了更多内容?

  2. 如果是图形数据库,您将如何设计它?每个关系标签都只是'has_a'或'is_a_type_of'。您是否拥有所有汽车中的逻辑结构?对于每辆汽车,它们是否指向叶节点?或者你会让每个关系代表每辆特定的汽车并让这些关系跨越汽车的逻辑树结构吗?

1 个答案:

答案 0 :(得分:0)

好吧,这样一个" graphy"这样做的方法是为每种域对象创建一个节点类型。您有一个由Car标识的VIN,可以链接到MakeModelYear。您还有Mechanic[:work_on]Car个节点的节点。不要在车上存储品牌/型号/年份,而是通过关系链接,例如:

CREATE (c:Car { VIN: "ABC"})-[:make]->(m:Make {label:"Toyota"});

......等等。

  

每个关系标签只是一个' has_a'要么   ' is_a_type_of'

可能不会,我会创建不同的节点类型配对关系类型。所以机械师 - >汽车将:works_on,汽车 - >模型将是[:model],依此类推。我不建议在任何地方使用相同的关系类型,例如has_a,因为从建模的角度来看,更难以理清这些关系的有效域和范围(例如,您将结束在has_a几乎可以从任何事情发展到任何事情的情况下,选择你想要的has_a关系会很困难。

  

或者你会让每个关系代表每辆特定的汽车和   这些关系是否跨越汽车的逻辑树结构?

每辆车都是自己的节点,由VIN标识,而不是品牌/型号/年。 (拆分制造/型号/年后将允许您非常容易地查询所有沃尔沃等)。

你的最后一个问题(也是最棘手的问题):

  

是否为关系数据库或图表数据库设置了更多?

这是一个自以为是的问题(它吸引了自以为是的答案),让我用这种方式告诉你:太阳下的任何数据都可以通过关系和图表来完成。所以我可以回答两个是关系,是图。您的数据和您的域名不会选择是否应该执行RDBMS或Graph。您的查询和访问模式选择RDBMS与图形。如果您知道如何使用数据,运行哪些查询以及您尝试做什么,那么掌握了相关信息后,您就可以进行自己的分析并确定哪个更好。两者都有优点和缺点以及许多权衡点。在不知道您将如何访问数据的情况下,以一种非常公平的方式回答这个问题是不可能的。