[英]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.