1

時間依存関係をモデル化して反復する正しい方法は何ですか?

例えば:

  • ジョンは 1969 年 7 月 3 日にエリザベスと結婚し、73 年 5 月 12 日に離婚しました。その後、1982 年 3 月 18 日にコリーと結婚し、現在も結婚しています。
  • Mark は IBM (特定の日付間隔)、次に MSFT (その他の時間間隔) などで働きました。

時間に依存する他の多くの関係があります。

  • に住んでいました
  • のために働いた
  • に報告した
  • などに所属していました。

これらをモデル化する正しい方法は何ですか? 典型的なクエリは、「現在の」パラメーターを使用してトラバーサルを検索することです。たとえば、「1974 年 1 月 1 日現在のジョンの配偶者は誰ですか?」

4

4 に答える 4

1

追加のノードを使用して、特定の結婚または雇用期間をカレンダー サブグラフと組み合わせて表すことを検討できます。たとえば、ジョンの結婚は次のようにモデル化できます。

(John)-[:MARRIAGE]->(John+Liz)
(Liz)-[:MARRIAGE]->(John+Liz)
(John+Liz)-[:START_DATE]->(07/03/69)
(John+Liz)-[:END_DATE]->(05/12/73)
(John)-[:MARRIAGE]->(John+Corrie)
(Corrie)-[:MARRIAGE]->(John+Corrie)
(John+Corrie)-[:START_DATE]->(03/18/82)

これにより、各人が引き受ける可能性のある結婚の数と、END_DATE存在するかどうかの両方で柔軟性が得られます.

お役に立てれば

にげ

于 2013-01-10T09:47:02.037 に答える
1

これは、インデックスを使用して簡単に実行できます。インデックス/プロパティはプリミティブしか使用できないため、Date オブジェクトを long 値に変換してから、その値にインデックスを付けることができます。インデックスを特別な数値型として保存する必要がありますが、その後は範囲に基づいて検索できるため、「前」または「後」または「間」タイプのクエリを実行できます。

于 2013-01-10T01:47:03.303 に答える
0

すべてのタイプに対して常に 2 種類の関係を構築することを想定しています。as of パラメータのクエリは次のようになります。

START n=node({John}) 
MATCH n-[r:spouse_of_s]-m, n-[?r2:spouse_of_e]-m
WHERE r2.time? < {timestamp} AND r.time > {timestamp}
RETURN m;

(r2のクエリにタイプミスがあるかも?、テストせずに書いてみました)

@nicholasが書いたインデックスを使用することをお勧めします

于 2013-01-10T09:03:20.137 に答える
0

通常、on_date 属性でタイムスタンプを追加します。

YYYYMMDD の形式で日付をエンコードすることもお勧めします。その後、コードに比較を簡単に追加できます。例えば:

ジョンは 1969 年 7 月 3 日にエリザベスと結婚し、73 年 5 月 12 日に離婚しました。その後、1982 年 3 月 18 日にコリーと結婚し、現在も結婚しています。

ジョンが結婚しているかどうか、誰と結婚しているかを知りたい場合は、単純に日付を比較して、終了ノードを取得できます。

于 2013-01-16T08:39:55.163 に答える