エッジ・ラベル・スキーマの作成
エッジ・ラベル・データベース・スキーマの作成
「データ・モデル」で説明されているように、エッジ・ラベルは、エッジ・ラベルの名前、エッジで接続された内向きと外向きの頂点ラベル、およびエッジの関連プロパティ・キーを定義します。Property keysとvertex labelsは、エッジ・ラベルの作成で使用する前に作成する必要があります。create()
を使用してエッジ・ラベル・スキーマを作成することができます。また、add()
を使用してプロパティ・キーまたは接続を既存のスキーマに追加することができます。エッジ・ラベルのカーディナリティは、デフォルトでは複数のカーディナリティですが、単一のカーディナリティを割り当てることができます。特定の存続時間(TTL)値を使用してエッジ・ラベルを作成するか、ifNotExists()
を使用してエッジ・ラベルが以前に存在していたかどうかをチェックすることができます。
エッジ・ラベルの重要なコンポーネントは、エッジ・ラベルを使用してエッジに接続されている2種類の頂点を識別するconnection()
です。接続には、リストの最初にある外向き頂点ラベルから2番目にある内向き頂点ラベルへの方向性があります。
始める前に
手順
単一および複数のカーディナリティ・エッジ・ラベル
-
複数のカーディナリティ・エッジ・ラベルを定義します。
edgeLabelの名前はateです。
multiple()
で複数のカーディナリティーを明示的に指定して定義します。schema.edgeLabel('ate').multiple().create()
複数のカーディナリティがデフォルトであるため、multiple()
は省略できます。schema.edgeLabel('ate').create()
作成する前にエッジ・ラベルが既に存在するかどうかを確認するには、ifNotExists()
を使用します。schema.edgeLabel('knows').multiple().create().ifNotExists().create()
-
単一のカーディナリティ・エッジ・ラベルを定義します。
edgeLabelの名前はhasです。単一のカーディナリティーを使用して定義します。
単一のカーディナリティはデフォルトではないため、schema.edgeLabel('has').single().create()
single()
を含める必要があります。
プロパティ・キーとエッジ・ラベルの関連付け
-
プロパティは、
create()
またはadd()
ステートメントで定義できます。
またはschema.edgeLabel('ate').multiple().create() schema.edgeLabel('ate').properties('mealDate').add()
schema.edgeLabel('ate').multiple().properties('mealDate').create()
重要: カーディナリティ(single
またはmultiple
)またはproperties()
を指定する場合、それらのオプションは、スキーマ・ステートメントのconnection()
オプションの前に指定しなければなりません。
接続
-
接続は、
create()
またはadd()
ステートメントで定義できます。
またはschema.edgeLabel('ate').multiple().create() schema.edgeLabel('ate').connection('person', 'meal').add()
schema.edgeLabel('ate').multiple().connection('person', 'meal').create()
-
同じエッジ・ラベルに対して、頂点ラベルの間に複数の接続を作成できます。
これらのスキーマ・ステートメントにより、「recipes」と「meals」、「meals」と「books」、「recipes」と「books」の間にエッジラベルincludedInを使用するエッジを挿入することが可能になります。schema.edgeLabel('includedIn').connection('recipe','meal').add() schema.edgeLabel('includedIn').connection('meal','book').add() schema.edgeLabel('includedIn').connection('recipe','book').add()
順序の制限
-
カーディナリティ(
single
またはmultiple
)またはproperties()
を指定する場合、それらのオプションは、スキーマ・ステートメントのconnection()
オプションの前に指定しなければなりません。複数のステップ:schema.edgeLabel('includedIn').multiple().create() schema.edgeLabel('includedIn').properties('amount').add() schema.edgeLabel('includedIn').connection('recipe','meal').add() schema.edgeLabel('includedIn').connection('meal','book').add() schema.edgeLabel('includedIn').connection('recipe','book').add() schema.edgeLabel('includedIn').connection('ingredient','recipe').add()
単一のステップ:schema.edgeLabel('includedIn').multiple().properties('amount').connection('recipe','meal').connection('recipe','book').connection('ingredient','recipe').create()
Time-To-Live(TTL)を持つエッジ・ラベル
-
エッジ・ラベルはTime-To-Live(TTL)値で定義できます。指定した時間に達すると、値はグラフから削除されます。TTL付きのエッジ・ラベルを定義します。
ttl()
を使用してTTLが60秒、名前がcreateDateのエッジ・ラベルを定義します。schema.edgeLabel('createDate').ttl(60).create()
例
ドキュメント全体で使用されるDSE QuickStartの例に使用されるエッジ・ラベル:
// ********
// EDGE LABELS
// ********
// SYNTAX:
//schema.edgeLabel('edgeLabel').
// [ single() | multiple() ].
// [ connection( outVertex, inVertex) ].
// [ ttl ].
// [ properties(property[, property]) ].
// [ ifNotExists() ].
// [ create() | add() | describe() | exists() ]
// DEFAULT IS MULTIPLE CARDINALITY
// ********
schema.edgeLabel('ate').multiple().create()
schema.edgeLabel('ate').properties('mealDate').add()
schema.edgeLabel('ate').connection('person', 'meal').add()
schema.edgeLabel('knows').multiple().create()
schema.edgeLabel('knows').properties('since').add()
schema.edgeLabel('knows').connection('person','person').add()
schema.edgeLabel('includes').multiple().create()
schema.edgeLabel('includes').properties('numServ').add()
schema.edgeLabel('includes').connection('meal','meal_item').add()
schema.edgeLabel('includedIn').multiple().create()
schema.edgeLabel('includedIn').properties('amount').add()
schema.edgeLabel('includedIn').connection('recipe','meal').add()
schema.edgeLabel('includedIn').connection('meal','book').add()
schema.edgeLabel('includedIn').connection('recipe','book').add()
schema.edgeLabel('includedIn').connection('ingredient','recipe').add()
schema.edgeLabel('created').multiple().create()
schema.edgeLabel('created').properties('createDate').add()
schema.edgeLabel('created').connection('person', 'recipe').add()
schema.edgeLabel('reviewed').multiple().create()
schema.edgeLabel('reviewed').properties('time','year','stars','comment').add()
schema.edgeLabel('reviewed').connection('person','recipe').add()
schema.edgeLabel('authored').multiple().create()
schema.edgeLabel('authored').connection('person', 'book').add()
schema.edgeLabel('contains').multiple().ttl(60800).create()
schema.edgeLabel('contains').properties('expireDate').add()
schema.edgeLabel('contains').connection('fridgeSensor','ingredient').add()
schema.edgeLabel('isStockedWith').multiple().ttl(60800).create()
schema.edgeLabel('isStockedWith').properties('expireDate').add()
schema.edgeLabel('isStockedWith').connection('store','ingredient').add()
schema.edgeLabel('isLocatedAt').multiple().create()
schema.edgeLabel('isLocatedAt').connection('home','location').add()
schema.edgeLabel('isLocatedAt').connection('store','location').add()
schema.edgeLabel('isLocatedAt').connection('fridgeSensor','home').add()