簡體   English   中英

您將如何為這個非關系數據庫建模?

[英]How would you model this non-relational database?

我正在使用Neo4j創建圖形數據庫,並且想知道對這種情況進行建模的最佳方法是什么:

Person1>告訴>報價>給> Person2>誰告訴了它-> Person3->誰告訴了它-> Person4>誰告訴了它-> Person1

我已經考慮過報價是鏈接的屬性。 但是也許報價也需要成為一個節點。 在這種情況下,邊緣將為“ told”和“ was_told”。 喜歡:

Person1->創建>引用引用屬性:id,文本Person屬性:id,名稱

> Person2>告訴:{至:Person 3}>引用Person3> was_told:{作者:Person2}>引用

要么:

Person3>告訴:quote> Person1

什么是用來為該數據庫建模的最佳方法?

我認為您需要以下模型:

  • 對話(包括時間)的片段(對話)
  • 誰是這個片段的演講者
  • 誰是這個片段的聽眾
  • 該片段的內容(引號)

例如,以下是用於創建第一個片段的代碼

MERGE (P1:Person {name:'Person1'})
MERGE (P2:Person {name:'Person2'})
MERGE (Q:Quote {name:'Quote1', text:'Quote1 text'})
MERGE (P1)<-[:has_speaker]-(T1:Talk {name:'Talk1', time: 1})-[:has_audience]->(P2)
MERGE (T1)-[:talk_about]->(Q)

可視化:

在此處輸入圖片說明

查詢整個報價生命周期:

MATCH (Q:Quote {name:'Quote1', text:'Quote1 text'})<-[:talk_about]-(T:Talk)
WITH Q, T
MATCH (P1:Person)<-[:has_speaker]-(T)-[:has_audience]->(P2) 
WITH Q, T, P1 as speaker, collect(P2.name) as audience ORDER BY T.time ASC
RETURN Q as quote, 
       collect( {time: T.time, 
                 speaker: speaker.name, 
                 audience: audience} 
       ) as quoteTimeline

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM