如何在单个文本字段中建模与其他节点的关系?

时间:2016-01-08 15:41:02

标签: database database-design neo4j graph-databases

我在图形数据库中对特定案例建模时遇到问题。它与Facebook中的@mentions非常相似,所以我希望至少有一个很好的解决方案。

实施例: 我有三个节点,每个节点包含一个法律文本中的段落。我们假设:

  • §1:“Lorem Ipsum 1 ...请参阅§2和§3了解更多信息”
  • §2:“Lorem Ipsum 2”
  • §3:“Lorem Ipsum 3”

现在我希望如果读取节点1(=§1),则会向用户显示超级节点2(§2)和节点3(§3)。虽然关系本身很容易建模

  

(§2)LT - [REFERS_TO] - (§1) - [REFERS_TO] - GT;(§3)

,我很难“指出”与某个文本元素的关系,即字符“§2” - >节点2和“§3” - >节点3。

怎么可以解决这个问题? 我曾考虑用ID替换文本元素,这些ID也存储在关系中,

  

§1:“Lorem Ipsum 1 ...请参阅{@IDXXX}和{@IDYYY}以获取更多信息”

     

(§2)LT - [REFERS_TO {ID = “IDXXX”,LABEL = “§2”}] - (§1) - [REFERS_TO {ID = “IDYYY”,LABEL = “§3”}] - >(§3)

但我担心使用ID太“静态”,并且可能会导致更改节点1及其关系内容的问题。

感谢您的投入。

2 个答案:

答案 0 :(得分:1)

如果段落始终具有相同的标签(暂时忽略标签随时间的变化),则无论引用它的位置如何,label属性都属于段落节点,而不是关系(这将是浪费的重复信息)。同样,这样,如果引用的段落标签需要更改,则只需要在一个地方完成 - 并且最明显的地方。

我没有看到任何标签" id"的原因。并且我没有看到引用段落发生更改的问题 - 它可以根据需要添加,替换或删除与其他段落的关系。

答案 1 :(得分:1)

听起来您想要模拟本质上嵌入的超链接。我认为使用关系将基节点链接到被引用节点的想法也是一个好主意。

我建议在关系中存储起始位置和停止位置属性。这些应该表示包含关系的节点文本中的引用应该开始和停止的位置。如果它真的只是一个脚注类型参考,你可以只使用起始位置。

是的,每当您更新文本时,您都必须更新位置,但这不应该难以管理,无论您如何实施解决方案,都必须处理这些问题。