2017-11-22 12 views
1

ここは私のシナリオです。私はあらかじめ定義されたデータ型構造を持っています。簡単にするために例として挙げてみましょう。構造は下のイメージのようになります。 ラベル付きプロパティグラフであり、情報は自己説明されています。 このデータ型構造は固定ですが、変更できません。私はちょうどそれを使用します。 1冊の本があった場合このシナリオでグラフデータベースを設計するにはどうすればよいですか?

DTR Example

、のはそれハリー・ポッターを呼ぶことにしましょう、システムでは、以下のようになります。

DTR 1 book

だから、この本には、独自の性質を持っています(ID、名前、...)、フィールドタイプMandatoryDataも含まれています。このグラフを見ることで、本のすべての情報を知ることができます。この場合

DTR 2 Books

強調されているように、これらの情報をグラフDBと呼ばれる別の本がある:私はこのようになりますシステム、内2冊の本を持っている場合

問題が起こります。

どの情報がどの書籍に属しているのかわかりません。たとえば、publishedYearをこれ以上区別することはできません。

私の質問はこの問題を解決する方法ですか?各書籍に1 MandatoryDataを作成する必要がありますか?あなたは私に何かデザインを提案できますか?

私はNeo4jとCypherを使用しています。ご協力ありがとうございました!

+0

このモデルから外れるような柔軟性はありますか?値の意味を与えるキーまたはコンテキストとは別のノードとして値を持つことは理にかなっていません。グラフは、ノード間の接続、特にそれらの間で共通するデータ(特に、Author、:Publisher、おそらくPublishedYearは多くの書籍に接続されている潜在的な共通ノードです)に関するものです。他の一般的なデータは、おそらくそのように(著者名やブックのタイトルなど)モデル化されているわけではなく、索引の検索とフィルタリングによって最も適切に処理されるべきです。 – InverseFalcon

+0

コメントありがとうございます。はい、私はこのモデルから逸脱することができます。あなたのアイデアから、私は 'Value'ノードを削除し、そのプロパティをそれを指し示すノードの中に置く方が良いと思います。 – AnhTriet

答えて

0

UPDATE

コメント(@AnhTrietによる)から:あなたの提案のための

感謝。しかし、私はそれらの本の間にいくつかの種類の接続 を持っていたいです。新しいMandatoryDataを作成すると、それらの書籍は に完全に分離されます。 (...)同じ著者や出版年があれば、2つの本は 同じノードを指しているはずですか?

コメントの中でいくつかの説明をした後、データベース内の各プロパティに対してMandatoryDataノードを作成することをお勧めします。次に、ブックのプロパティの数に応じて、特定のブックを様々なMandatoryDataノードに接続します。

同じ著者の2冊の本は、同じMandatoryDataノードに接続されます。


あなたは、データモデルを変更することはできませんので、私は強くシステムに追加された各新しい本のための新しいMandatoryDataノードを作成することをお勧めいたします。

あなたのようなクエリで特定の書籍に関する情報を取得することができますこの方法:

// Get the author's name of the book with ID = 1 
MATCH (:Book {ID : 1})-->(:MandatoryData)-->(:Author)-->(:Name)-->(v:Value) 
RETURN v.value 

あなたの質問で提案されたモデルが実行可能でない特定のプロパティの所有者を特定する方法がないので、あなたに示されているように。

+0

あなたの提案をありがとう。しかし、私はそれらの本の間にいくつかの並べ替えをしたい。新しいMandatoryDataを作成すると、それらの本は完全に分離されます。 – AnhTriet

+0

@AnhTrietそして、本の間に関係を追加することはできませんか? '(:Book) - [CONNECTED_TO] - >(:Book)' –

+0

私はできますが、意味がありません。同じ著者や出版年があれば、2つの本が同じノードを指しているはずですね。 – AnhTriet

関連する問題