2017-11-17 20 views
0

OrientDBのデータをモデル化しようとしています。私はグラフデータベースが初めてです。私はモデリング中に疑問を抱いています(RDBMSからGraphDataへのパラダイムの変更)。
グラフデータベース(OrientDB)の3次モデル(三角形間、つまり3頂点間)の関係はどのようになりますか?例は以下の通りである:複数の頂点間のOrientDbエッジ

  1. 顧客Aは、銀行C.
  2. 従業員Aに顧客Bを導入し、従業員B社の従業員C D.
  3. 悪鬼A友人Cに友人Bを紹介を参照しました。
  4. 者Aは、住宅ローン会社C.
  5. 人物A & Bは、エージェントC.
  6. から保険会社「メットライフ」のポリシータイプ「生命保険」を購入した中の人BのローンアカウントのGranterです

現在、私は(のようなはじめ-処理)関連するすべての頂点と辺

(カスタマーA '間IntroducedBy'エッジ '' と' Inroduction・プロセスの間に頂点を使用してい'; 「顧客B」と「インプロダクションプロセス」の間の「紹介された」エッジ「 」および「銀行C」と「インプロダクションプロセス」の間の「紹介済み」エッジ)。

これは間違いないですか他の選択肢がありますか?

列挙値の表現方法は?たとえば、顧客口座タイプ。 現在AccountTypeのクラスを作成し、頂点の数を固定しています(Enum値と同じです)。AccountからAccountTypeへのリンクを作成します。 Enumeration in Graph-databaseをモデル化するためのより良いオプションはありますか?

ありがとうございます。

答えて

1

何がハイパーグラフ機能を実装していない(OrientDBを含む)市場でHypergraph

すべての主要なグラフデータベースと呼ばれるに言及されているので、あなたが今donigているとして、あなたが、間に頂点を使用する必要があります。

列挙の方法は正しいかもしれませんが、素早くスーパーノード(多くの接続を持つ頂点)になります。これはあなたが望むものではありません。

ほとんどの場合、表現と列挙値には本格的な頂点は必要ありませんが、通常は文字列(または数値)で十分です。 OrientDBでは、値の制限されたセットにプロパティを制約するには、スキーマ内の検証ルールを定義することができる(例えば正規表現)を、代わりに、これらのエッジを作成するhttp://orientdb.com/docs/2.2.x/SQL-Alter-Property.html

+0

ありがとうLuigiとAmin。 3ウェイ関係の場合、私は余分な頂点を使い続けます。 Enum値については、私は現在2つのアプローチを使用しています: 1. enum値が変更されると思われる場合は、Aminが提案したようにLINKプロパティを使用しています。 2. enumが非常に固定されている場合、RegExp制約で文字列値を使用しています。 –

0

を参照してください、あなたはLINKSETデータ型を使用することはできません?余分なエッジを作成せずに必要な参照を保存するのに役立ちます。

私はOrientDBを初めて使っていて間違っているかもしれませんが、@Luigiのようにスーパーノードの問題に遭遇し、リンクセットを使用して解決しました。

私の場合、それは処方箋と薬といくつかの一般的に使われている薬の医療データベースで、スーパーノードを作成していました。

+0

はい、リンクセットを使用する単方向の関係があるときは問題ありません。しかし、OrientDBはリンクとリンクセットの参照整合性を管理していないので、リンクされたレコードを削除するとリンクは削除されません(何も指し示されません)。他の明白な欠点は、リンクが一方向にのみ移動できることです –

関連する問題