For*_*sed 6 data-modeling neo4j
使用图形数据库时,最难解决的问题是选择粒度级别.让我们说我有一个图表显示在一周中的某些日子发生的事情:垃圾日,周五墨西哥比克,周五BYOB等.
对自己思考,使节点非常具体是不好的,因为粒度没有限制.例如,星期六早上,晚上和晚上,或者更糟糕的是,每天每小时一个新节点.我还可以通过将星期六节点通过"晚上"边缘链接到垃圾日节点来使边缘成为粒度的一个组成部分.
我偶尔遇到类似的问题,例如; 我应该根据一个人的全名创建一个新节点,还是一个名为"Person"的节点,其属性为"name".然后我根据便利性制作特定或一般的节点,但我觉得可能有一些最佳实践或更高级别的原则我缺少.我不清楚如何判断哪条路更好.
数据模型的粒度级别应由查询需求驱动,而不是相反。也就是说:在对数据库进行建模时,您应该问自己:“我将对我的数据执行什么样的查询?”。根据这个问题的答案,您将获得一个良好的起点来创建具有适当粒度级别的良好模型。
在 Rik Van Bruggen 所著的《学习 Neo4j》一书中(您可以在此链接中下载),作者谈到了设计图形数据库以实现查询能力:
与任何数据库管理系统一样,但对于 Neo4j 等图形数据库管理系统来说更是如此,您的查询将驱动您的模型。我们的意思是,就像您过去可能使用过或今天仍在使用的任何类型的数据库一样,您需要根据特定的权衡做出特定的设计决策。因此,在像 Neo4j 这样的图数据库中建模并不存在一种完美的方法。这完全取决于您想对数据提出的问题,这将驱动您的设计和模型。
因此,基于此,您的问题“当粒度级别可以不受限制时应该使用什么级别的特异性?”的答案 是:这取决于您的查询要求。首先考虑您将执行的查询,然后考虑数据模型。
我的建议是:一开始就让模型尽可能简单,并在需要时逐步进行更改。