CREATE PROPERTY GRAPH

目的

CREATE PROPERTY GRAPHは、既存のスキーマ・オブジェクトからプロパティ・グラフを作成する場合に使用します。スキーマ・オブジェクトは、表、外部表、マテリアライズド・ビューにするか、表、外部表またはマテリアライズド・ビューのシノニムにします。

前提条件

自分のスキーマにプロパティ・グラフを作成する場合は、CREATE PROPERTY GRAPH権限が必要です。SYSおよびAUDSYS以外のスキーマのプロパティ・グラフを変更する場合は、CREATE ANY PROPERTY GRAPH権限が必要です。

構文

vertex_tables_clause::=

graph_element_name_and_key::=

graph_element_object_name::=

graph_element_key::=

graph_table_label_and_properties::=

graph_table_label_properties_clause::=

graph_table_properties_alternatives::=

column_name_list::=

column_or_expression::=

graph_table_label_clause::=

edge_tables_clause::=

vertex_table_reference::=

セマンティクス

IF NOT EXISTS

IF NOT EXISTSを指定すると、次の効果が得られます。

  • プロパティ・グラフが存在しない場合は、文の最後に新しいプロパティ・グラフが作成されます。

  • プロパティ・グラフが存在する場合、既存のプロパティ・グラフは文の最後にあります。古いものが検出されるため、新しいものは作成されません。

IF EXISTSCREATEとともに使用すると、「CREATE文のIF NOT EXISTS句が正しくありません。」というエラーが発生します。

プロパティ・グラフは、vertex_tables_clauseを使用して作成する必要があります。

プロパティ・マップを含むスキーマを指定します。スキーマを省略すると、Oracle Databaseによって自分のスキーマにグラフが作成されます。

プロパティ・グラフは表およびビューに使用されるネームスペースを共有するため、プロパティ・グラフの名前を同じスキーマ内の別のオブジェクトに使用しないでください。名前の競合があると、ORA-00955が発生します。

OR REPLACEを指定すると、既存のプロパティ・グラフを再作成できます。この句を使用した場合、以前に付与されたオブジェクト権限を削除、再作成、再付与しなくても、既存のプロパティ・グラフの定義を変更できます。

すべてのマテリアライズド・ビューがプロパティ・グラフに依存している場合、そのマテリアライズド・ビューにはUNUSABLEというマークが付けられ、これらを使用可能な状態にリストアするためにフル・リフレッシュが必要になります。無効なマテリアライズド・ビューはクエリー・リライトで使用されることはなく、また、再コンパイルされるまでリフレッシュされません。

vertex_tables_clause

vertex_tables_clauseを使用すると、プロパティ・グラフの1つ以上の頂点表を定義できます。vertex_table_definitionは、基礎となるオブジェクト名を指定する必要があります。オプションで、次に示すように、追加の項目(ラベルやプロパティなど)を指定できます。

プロパティ・グラフの定義には、グラフ要素表の定義に使用される基礎となるオブジェクトの名前のみを指定することもできます。この場合は、基礎となる表と同じ名前のデフォルト・ラベルが作成され、すべての列がグラフ・プロパティとして公開されます。

オブジェクト名は、表、外部表、マテリアライズド・ビューの名前にするか、表またはマテリアライズド・ビューのシノニムにします。

オブジェクト名は、そのオブジェクトが存在するスキーマを指定することで修飾できます。つまり、グラフ要素表の定義に、別のスキーマのオブジェクトを使用できるということです。オプションが指定されていない場合は、指定したオブジェクトの名前がグラフ要素表の名前として使用されます。

例: 頂点表を使用したプロパティ・グラフの作成

次の例では、頂点表の名前my_table_1は、基礎となるオブジェクトmy_table_1の名前です。

CREATE PROPERTY GRAPH “myGraph” VERTEX TABLES (my_table_1);

例: スキーマ修飾頂点表を使用したプロパティ・グラフの作成

次の例では、名前my_table_1はスキーマother_schemaで修飾され、頂点表名は基礎となるオブジェクトmy_table_1の名前です。

CREATE PROPERTY GRAPH “myGraph” VERTEX TABLES (other_schema.my_table_1);

graph_element_name_and_key

graph-element-name-and-key句を使用すると、次を指定できます:

  • グラフ要素表の定義に使用されるスキーマ・オブジェクトの名前。AS句を使用して代替名を指定しない場合、グラフ要素表の名前は、スキーマ修飾なしでgraph_element_object_nameにデフォルト設定されます。

  • 基礎となるオブジェクトのどの列を使用してその基礎となるオブジェクトの行を識別するかを明示的に指定するために使用される1つ以上の列名。

グラフ要素表の名前は、プロパティ・グラフに固有のネームスペースで定義されます。スキーマ・オブジェクトの名前や、他のプロパティ・グラフで定義されたグラフ要素表の名前と競合することはありません。これは、エッジ表が頂点表の名前を使用できないことも意味しています。グラフ要素表の名前は、その他の識別子と同じルールに従います。大/小文字の区別を示す場合は引用符で囲み、デフォルトでは128文字までに制限されています。DDL文のグラフ要素表への後続の記号参照では、基礎となるオブジェクトの名前ではなく、グラフ要素表名を使用する必要があります。特に、エッジ表のソースと宛先の頂点表を定義するときには、グラフ要素表名を使用する必要があります。

graph_element_object_nameでは、表またはマテリアライズド・ビューを直接的に特定するか、表またはマテリアライズド・ビューのシノニムを使用して間接的に特定します。

graph-element-key句は、次の場合に省略できます。

  • graph_element_object_name句では、単一の主キー制約を持つ実表を特定します。主キー制約は、同時に定義されている可能性がある一意キーよりも優先されます。

  • graph_element_object_name句では、主キーのない実表と、すべての列がNULL値可能でない単一の一意キー制約を特定します。

object_nameでマテリアライズド・ビューを特定する場合は、graph-element-keyの指定が必要です。

この例は、graph-element-keyの使用方法を示しています。頂点表VT3では、基礎となる表の複数の列で構成されるコンポジット・キーを指定するために使用されています。頂点表ALTVT2は、頂点表VT2の定義に使用したものと同じ基礎となるオブジェクトから定義されていますが、そのオブジェクトの別の列(PK4)が頂点の識別子として指定されています。頂点表VT1には、主キー制約またはNULL列以外の一意キーがあると仮定しています。

CREATE PROPERTY GRAPH “myGraph” 
     VERTEX TABLES (
       VT1,
       VT2 KEY(PK2),
       VT3 KEY(PK31, PK32),
       VT2 AS ALTVT2 KEY(PK4)
     );

同じ基礎となるオブジェクトVT2は、VT2から別のグラフ要素表を定義するために使用したものと同じ主キーを使用することで、別のグラフ要素表の定義に使用できます。そのため、前述の例では、ALTVT2PK4ではなくPK2を指定できます。

graph-element-key句が存在する場合、宣言されたすべての列名は、グラフ要素表の基礎となるオブジェクトの列名と一致することが必要です。

graph-element-key句を省略すると、データベースは基礎となるオブジェクトの制約から列を推定します。そのオブジェクトに複数の主キー制約または一意キー制約が定義されていると、キーの推定に失敗してエラーが発生します。主制約は、グラフ要素表のキーを推定するためにのみ使用され、この推論の結果として制約への依存性は作成されない点に注意してください。そのため、この制約は、グラフを無効することや定義に影響を与えることなく後で削除できます。

この動作を変更して、ENFORCED MODEオプションを使用して制約への依存性を作成できます。

同じオブジェクトから、複数のグラフ要素表を定義できます。たとえば、ある表が同じグラフ内で異なるエッジ表として機能する場合があります。異なるスキーマの同じ名前の表からでグラフを定義することもできます。どちらの場合も、オプションのAS句で代替のグラフ要素表名を指定して、名前の競合を回避するように注意することが必要です。

例: AS句を使用したプロパティ・グラフの作成

CREATE PROPERTY GRAPH “myGraph” VERTEX TABLES (my_table_1, other_schema.my_table_1 AS my_table2); 

制限事項

主キー制約に適用される制限は、頂点表とエッジ表のキーにも適用されます。

  • 頂点表またはエッジ表のキーの定義には、組込みデータ型VARCHAR2NVARCHAR2NUMBERBINARY_FLOATBINARY_DOUBLECHARNCHARDATE INTERVAL (YEAR TO MONTH DAY TO SECONDの両方)およびTIMESTAMP (TIMESTAMP WITH TIME ZONE以外)の列を使用できます。

  • コンポジット・キーは、32列を超えることはできません。

edge_tables_clause

edge_tables_clauseは、1つ以上のedge_table_definition句を指定する場合に使用します。それぞれのedge_table_definition句では、グラフのエッジ表を定義するために使用する基礎となるオブジェクトを指定します。

edge_table_definition

edge_table_definitionは、キーワードのSOURCEDESTINATIONを使用することで、エッジのソースになる頂点表とエッジの宛先になる頂点表を明示的に定義するために使用します。

vertex_table_reference

エッジのソースと宛先では、vertex_table_referenceを指定します。vertex_table_referenceでは、次の3つのコンポーネントを指定します。

  • 頂点表のグラフ要素名graph_element_name

  • 外部キーとして扱われるエッジ表の列のリストgraph_element_key

  • 参照キーとして扱われる参照先頂点表の列のリストcolumn_name_list

vertex_table_reference句のgraph_element_nameは、その前のvertex_tables_definition句で定義されている必要があります。vertex_tables_definitionで定義した頂点表の名前は、エッジのソース、宛先またはその両方として複数のエッジ表定義の定義に使用できます。

次のように定義されている頂点表があるとします。

CREATE PROPERTY GRAPH “myGraph” 
     VERTEX TABLES (
       VT1,
       VT2 KEY(PK2),
       VT3 KEY(PK31, PK32),
       VT2 AS ALTVT2 KEY(PK4)
     )
     EDGE TABLES (
       E1 SOURCE VT1  
          DESTINATION VT2,
       E2 SOURCE      KEY(FK1) REFERENCES VT1 (PK1) 
          DESTINATION KEY(FK2) REFERENCES VT2 (PK2),
       E3 SOURCE      KEY(FK1) REFERENCES VT1 (PK1) 
          DESTINATION VT2,
       E4 SOURCE VT1  
          DESTINATION KEY(FK5) REFERENCES VT2(RK5))
;

エッジ表E1からソース表VT1と宛先表VT2への頂点表参照は、どちらも暗黙的に宣言されます。この構文を使用する場合、ユーザーはデータベースに依存して、E1VT1およびVT2の間の既存の外部キー制約からソースと宛先のキーを推定します。この場合、E1VT1 (およびVT2のそれぞれ)には、外部キー制約のみが存在していることが必要です。

そうでない場合は、エラーが発生します。外部キー制約は、エッジ表と、そのソースおよび宛先の頂点表の間の外部キー関係の推定にのみ使用されます。この推論の結果として、外部キー制約への依存性が作成されることはありません。そのため、この制約は、グラフを無効することや定義に影響を与えることなく後で削除できます。

一方、エッジ表E2からの頂点表参照は、それぞれソース頂点表VT1と宛先頂点表VT2の両方が明示的に宣言されています。この構文は、E2とその参照先の頂点表の間に外部制約が定義されていない場合や複数ある場合に必須になります。

エッジ表E3E4について示したように、暗黙的および明示的な構文は混在させることができます。その場合、前者はソース表の明示的な構文のみを使用し、後者は宛先表に対してのみこれを使用します。

参照先頂点表の基礎となるオブジェクトの列を参照キーとして扱うcolumn_name_list句は、参照先頂点表を定義した頂点定義句のgraph-element-key副次句で指定した列とは必ずしも一致しない点に注意してください。これについては、前述の例のエッジ表E4で示されています。VT2に指定された参照キーはRK5ですが、VT2の頂点表定義句で指定されたキーはPK2でした。

graph_table_label_and_properties

graph_table_label_and_propertiesは、グラフのラベルとプロパティを指定するために使用します。その後、グラフのラベルとそのラベルで定義されたプロパティを使用して、グラフ問合せを作成できます。

グラフのラベルとプロパティ

グラフ要素表は、基礎となるオブジェクトの列をプロパティとして公開するラベルに関連付けることができます。ラベルには名前があり、ラベルによって特定のグラフ要素表の基礎となるオブジェクトの列とプロパティ名のマッピングを宣言します。ラベルを使用すると、グラフ問合せ内で同じラベル名を使用して1つ以上のグラフ要素表を参照できます。プロパティを使用すると、同じプロパティ名(またはラベル修飾されたもの)を使用して1つ以上のグラフ要素表の列を参照できます。

このラベルを共有するすべてのグラフ要素表が同じプロパティ名を宣言している場合は、複数のグラフ要素表に1つのラベルを関連付けることができます。同じプロパティ名で公開される列または値式には、関係演算子互換の型が必要です。

グラフ要素表は複数のラベルに関連付けできます。

グラフ要素表は、少なくとも1つのラベルに常に関連付けられます。明示的に定義されていない場合、ラベルは自動的にグラフ要素表と同じ名前で割り当てられます。

ラベルとプロパティの宣言はオプションです。プロパティとラベルを明示的に宣言する場合は、次のすべての方法が有効です。

  • graph_table_label_properties_clauseを使用したプロパティのみ

  • graph_table_label_clauseを使用したラベルのみ

  • graph_table_label_properties_clauseを使用したプロパティとラベルの両方

  • プロパティまたはラベルなし

graph_table_label_properties_clause

プロパティは、グラフ要素表の定義に使用された基礎となるオブジェクトの列またはその列のSQL値式から導出されます。デフォルトでは、すべての表示可能列がプロパティにマップされ、プロパティの名前は、それらの列の名前にデフォルト設定されます。疑似列は、プロパティとして公開できません。

graph_table_label_properties_clauseのオプションは次のとおりです。

  • PROPERTIES [ ARE ] ALL COLUMNS

    グラフ要素表のすべての表示可能列は、列名と同じ名前が付いたラベルのプロパティとして公開されます。(これは、プロパティが指定されていない場合のデフォルトです)。キーとして使用されているすべての表示可能列もプロパティとして公開されることに注意してください。

  • PROPERTIES [ ARE ] ALL COLUMNS EXCEPT(column_name_list)

    すべての表示可能列は、明示的にリストされた列を除いて、ラベルのプロパティとして公開されます。このオプションは、プロパティとして公開されることのない列の数が、プロパティとして公開される列の数に比べて少ない場合に便利です。

  • PROPERTIES (column_name_list)

    明示的にリストした列のみが、列名と同じ名前が付いたラベルのプロパティになります。このオプションは、プロパティとして公開される列の数が、プロパティとして公開されることのない列の数に比べて少ない場合や、ユーザーが非表示の列を公開する場合に便利です。また、次に示すように、プロパティの一部またはすべての名前を変更する必要がある場合にも役立ちます。

  • PROPERTIES(column_name_list AS property_name )

    明示的にリストした列のみがラベルのプロパティになります。AS property_namecolumn_nameに追加されていると、プロパティ名としてproperty_nameが使用されます。それ以外の場合、プロパティ名はデフォルトで列名に設定されます。プロパティ名は、ラベルごとに1回のみ定義できます。AS句は、複数のグラフ要素表に1つのラベルを関連付ける場合に便利です。

  • PROPERTIES (value_expression AS property_name, ...)

    プロパティは、グラフ要素表の定義に使用した基礎となるオブジェクトの列に対する式として定義することもできます。この場合、AS句は必須です。値式は、スカラー式、ファンクション式または式リストになります。次の形式の式のみを含めることが可能です。

    • 基礎となるオブジェクトの列

    • 定数: 文字列または数値

    • DETERMINISTICファンクション: SQL組込みファンクションまたはPL/SQLファンクションのどちらか

      その他の式形式は有効ではありません(特に、副問合せ式および集計ファンクションは無効です)。式はスカラー・データ型のみを返すことができます。式で使用するSQL演算子は確定的であることが必要です

  • NO PROPERTIES

    このラベルでは、グラフ要素表に関連付けられた基礎となるオブジェクトの列は公開されません。

所定の頂点表またはエッジ表に対して、この頂点表またはエッジ表に適用された様々なラベルで公開されるプロパティは同じ定義であることが必要な点に注意してください。

graph_table_properties_alternatives

プロパティとして表示される列は、graph_table_properties_alternatives句のオプションを使用して明示的に制御できます。

暗黙的な句(ALL COLUMNSなど)では、公開される列のリストがグラフの作成時に決定される点に注意してください。グラフの作成後に別の列を追加した場合、たとえば仮想列を追加した場合は、その仮想列はグラフに反映されません。

次の例は、グラフ要素表(ここでは頂点表のみ)とそのプロパティに関連付けるラベルを宣言する場合の様々なgraph_table_label_and_propertiesの使用方法を示しています。

CREATE PROPERTY GRAPH “myGraph”
  VERTEX TABLES ( 
    HR.VT1, 
    VT1  AS ALTVT1,
    VT2  LABEL “foo” ,
    VT3  NO PROPERTIES,
    VT4  PROPERTIES(C1), 
    VT5  PROPERTIES(C1, C2 as P2),
    VT6  LABEL “bar” LABEL “weighted” NO PROPERTIES,
    VT7  LABEL “bar2” ALL COLUMNS ARE PROPERTIES EXCEPT (C3),
    VT8  LABEL “weighted” NO PROPERTIES DEFAULT LABEL,
    VT9  PROPERTIES(Cx + Cy * 0.15 AS PX, Cz AS PZ),
    VT10 PROPERTIES(JSON_VALUE(JCOL, 
      ‘$.person.creditScore[0]’ returning number) AS CREDITSCORE,
    VT11 PROPERTIES(XMLCAST(XMLQUERY(‘/purchaseOrder/poDate’ 
       PASSING XCOL RETURNING CONTENT) AS DATE) AS PURCHASEDATE
 );

この例の各頂点表定義の意味は次のとおりです。

  • 頂点表VT1では、基礎となるオブジェクトHR.VT1のすべての表示可能列を公開する単一のラベルVT1を定義します(暗黙的に)。これは、ラベルまたはプロパティを指定するオプションが使用されていない場合のデフォルトです。

  • 頂点表ALTVT1では、基礎となるオブジェクトVT1のすべての表示可能列を公開する単一のラベルALTVT1を定義します(暗黙的に)。オブジェクト名VT1HR.VT1に解決される場合、両方の頂点表ALTVT1VT1は、同じ基礎となるオブジェクトHR.VT1から同じ列を公開します。

  • 頂点表VT2では、基礎となるオブジェクトVT2のすべての表示可能列を公開する単一のラベルfooを定義します。

  • 頂点表VT3では、プロパティなしの単一ラベルVT3を定義します(暗黙的に)。基礎となるオブジェクトVT3からは列が公開されません。

  • 頂点表VT4では、基礎となるオブジェクトVT4の列C1を公開する単一のプロパティC1を持つ単一ラベルVT4を定義します(暗黙的に)。

  • 頂点表VT5では、基礎となるオブジェクトVT5の列C1C2のそれぞれを公開する2つのプロパティC1P2を持つ単一ラベルVT5を定義します(暗黙的に)。

  • 頂点表VT6 では、barweightedという2つのラベルを定義します。ラベルbarは基礎となるオブジェクトVT6のすべての表示可能列をプロパティとして公開しますが、ラベル"weighted"にはプロパティがありません。

  • 頂点表VT7では、基礎となるオブジェクトVT3の列C3以外のすべての列を公開する単一ラベルbarを定義します。

  • 頂点表VT8では、2つのラベルbar2VT8 (DEFAULT LABELによる)を定義します。前者にはプロパティがありませんが、後者はすべての列をプロパティとして公開します。

  • 頂点表VT9では、2つのプロパティPXPZを持つ単一ラベルVT9を定義します(暗黙的に)。PXは基礎となるオブジェクトVT9の列CxCyに対する式を公開し、PZは列Czを公開します。

  • 頂点表VT10では、JSON型の列JCOLから数値データ型としてcreditScore値を抽出する単一プロパティCREDITSCOREを定義します。

  • 頂点表VT11では、XMLtypeの列XCOLから日付データ型として発注日の値を抽出する単一プロパティPURCHASEDATEを定義します。

graph_options

OPTIONS句は、オプションのカンマ区切りリストを指定する場合に使用します。各オプションの出現は1回にかぎられます。グラフのモードは、ENFORCEDまたはTRUSTEDのどちらかに指定できます。同じ名前のプロパティでの複合型を許可または禁止できます。

ENFORCEDまたはTRUSTEDモード

プロパティ・グラフのオプションENFORCEDは、ENABLE VALIDATE状態の制約を通じてグラフ全体に保証が適用されることを意味します。

ENFORCEDを指定しない場合、モードはTRUSTEDになります。これがデフォルト・モードです。

次の場合に、プロパティ・グラフはENFORCEDモードになります。

  • そのすべてのグラフ要素表が、既存のENABLE VALIDATE主キー制約に一致する主キーで定義されているか、すべての列がNULL値不可のENABLE VALIDATE状態の一意キー制約で定義されている場合。

  • エッジ表からのすべての頂点表参照が、エッジ表と頂点表の基礎となるオブジェクトの間に既存のENABLE VALIDATE外部キー制約と一致する外部キーを使用して定義されていて、その外部キー制約がソースまたは宛先の頂点表参照を定義する場合。さらに、外部キー列にはNOT NULL制約が必要であり、ENABLE VALIDATE主キー制約または一意制約と非NULL制約の両方がソース表と宛先表のそれぞれの参照キーに対して定義されている必要があります。

これらの条件のいずれにも該当しない場合、プロパティ・グラフはTRUSTEDモードになります。これがデフォルト・モードです。

例: 強制モードのプロパティ・グラフの作成

CREATE PROPERTY GRAPH “mygraph” 
  VERTEX TABLES (VT1, VT2 KEY(PK2)),
  EDGE TABLES ( 
    ET1 SOURCE VT1 DESTINATION VT2, 
    ET2 SOURCE KEY(FK2) REFERENCES VT2 (PK2) DESTINATION VT1) 
 OPTIONS(ENFORCED MODE); 

次のいずれかに該当する場合、この例のDDLは失敗します。

  • ENFORCED MODEオプションに関係なく、頂点表VT1、エッジ表ET1またはエッジ表ET2に主キー制約が見つからないか、NULL値不可の列に対する厳密に1つの一意キー制約が見つからない場合。

  • ENFORCED MODEオプションに関係なく、ET1とその参照表VT1およびVT2間、またはET2とその参照表VT1の間に厳密に1つの外部キーが存在しない場合。

  • ENFORCED MODEオプションの結果として、VT2.PK2に対する単一の主キー制約も、VT2.PK2に対する一意キー制約とNOT NULL制約も見つからない場合。

  • ET2.FK2とその参照表VT2.PK2の間に外部キー制約が見つからず、ENFORCED MODEオプションの結果として、VT2.PK2に対する主キー制約または一意キーとNOT NULL制約の両方が存在しない場合。

プロパティ・グラフの基礎となるオブジェクトを形成する表の制約に対するDDL操作は、ENFORCED MODEオプションで正常に作成されたものであればグラフを無効にすることがあり、TRUSTED MODEオプションで正常に作成されたものであればグラフに影響を与えません。

表14-1 ENFORCED MODEオプションを使用して作成したグラフが無効になる原因の制約に対するDDL操作

操作 説明

次の文のpkcPRIMARY KEY制約です。

ALTER TABLE t DROP CONSTRAINT pkc;
ALTER TABLE t DISABLE CONSTRAINT pkc;
ALTER TABLE t ENABLE NOVALIDATE CONSTRAINT pkc;

tGのグラフ要素表eであり、pkceのキーとして使用される列に対する主キー制約または一意キー制約であり、GENFORCEDモードであった場合に、GTRUSTEDモードに変更されます。

tGの頂点表eであり、pkcが1つ以上のエッジ表で外部キー制約の参照キーを定義するために使用された列に対する主キーまたは一意キー制約であり、GENFORCEDモードであった場合に、GTRUSTEDモードに変更されます。

次の文のfkcFOREIGN KEY制約です。

ALTER TABLE t DROP CONSTRAINT fkc;
ALTER TABLE t DISABLE CONSTRAINT fkc;
ALTER TABLE t ENABLE NOVALIDATE CONSTRAINT fkc;

tGのエッジ表eであり、fkcが頂点表vの列を参照するeのソース・キーまたは宛先キーとして使用される列に対する外部キー制約であり、GENFORCEDモードであった場合に、GTRUSTEDモードに変更されます

ALLOWまたはDISALLOW MIXED PROPERTY TYPES

DISALLOWは、同じ名前のプロパティの型は、どのラベルからのものであっても完全に同じであることを意味します。DISALLOWは、すべてのラベルにわたって特定のプロパティが同じ型を持つようにする場合に使用します。

ALLOWは、異なるラベルで公開される同じ名前のプロパティの型を個別に設定でき、同じラベルからの同じ名前のプロパティの型がUNION互換になるようにすることを意味します。

DISALLOW MIXED PROPERTY TYPESを指定する場合、特定の名前のプロパティは、すべてのラベルで完全に同じタイプであることが必要です。このオプションでは、複数のグラフ要素表に関連付けられたラベルを同じデータ型で定義する必要もあることに注意してください。

この表は、互換性ルールの概要を示しています。

表14-2 混合プロパティ型の互換性ルール

オプション ALLOW DISALLOW

同じラベルの異なる定義で同じ名前を持つプロパティ

型はUNION互換であることが必要です

型は一致することが必要です

異なるラベルからの同じ名前のプロパティ

すべて

型は一致することが必要です

DISALLOW MIXED PROPERTY TYPESはデフォルトです。

プロパティ・グラフとその基礎となるオブジェクトの間の依存性

プロパティ・グラフは、その基礎となるオブジェクト、表、マテリアライズド・ビューまたは表やマテリアライズド・ビューのシノニムに依存します。こうした基礎となるオブジェクトの変更により、プロパティ・グラフが無効になることがあります。基礎となるオブジェクトに依存するカーソルも無効になります。無効な状態の無効なプロパティ・グラフに対する問合せはエラーになります。

次に、プロパティ・グラフが無効になる原因の依存オブジェクトに対する操作について概要を示します。

表14-3 プロパティ・グラフが無効になる依存オブジェクトに対する操作

操作 結果
DROP TABLE t ; 
DROP [PUBLIC] SYNONYM t;
DROP MATERIALIZED VIEW t;
CREATE OR REPLACE [PUBLIC] SYNONYM t;

tを使用してグラフGのグラフ要素表eを定義すると、Gが無効になります。

RENAME t TO t2;

tを使用してグラフGのグラフ要素表eを定義した場合は、Gが無効になります

tの未使用の列Cを削除する場合のALTER TABLE

ALTER TABLE 

tを使用してグラフGのグラフ要素表eを定義した場合は、Gが無効になります

ALTER TABLE t RENAME C TO C2;

tを使用してグラフGのグラフ要素表eを定義した場合は、eに適用した少なくとも1つのラベルでSQL演算子式としてプロパティを定義すると、Gが無効になります

tの列Cの型を変更する場合のALTER TABLE

tを使用してグラフGのグラフ要素表eを定義した場合は、Gが無効になります

依存表、ビューまたはシノニムを変更するその他のDDL操作では、プロパティ・グラフは無効になりません

また、マテリアライズド・ビューを使用してプロパティ・グラフの頂点表またはエッジ表を定義すると、マテリアライズド・ビューのスキーマ・オブジェクトに直接ではなく、ビューのコンテナ表への依存性が作成される点に注意してください。これは次のような意味合いを持ちます:

  • マテリアライズド・ビューを削除しても、その表を保存すると(つまり、PRESERVE TABLEを使用すると)、プロパティ・グラフは有効の状態が維持されます。

  • マテリアライズド・ビューの定義に使用された表、ビューまたはシノニムのいずれかを削除すると、そのマテリアライズド・ビューは無効になりますが、プロパティ・グラフはコンテナ表にのみ依存するため有効の状態が維持されます。

この動作は、マテリアライズド・ビューに対して定義されたビューの動作に似ています。

プロパティ・グラフの再検証

プロパティ・グラフの基礎となるオブジェクトを変更すると、グラフが無効になることがあります。無効な状態は、プロパティ・グラフのメタデータが、プロパティ・グラフのデータ・モデルに関して正しくない定義を記述していることを示します。

プロパティ・グラフは、CREATE OR REPLACE PROPERTY GRAPH を使用して再定義することで再検証できます。

ただし、実際には有効なときに、グラフが無効な状態を報告することがあります。これは、グラフの基礎となるオブジェクトへの依存性が低すぎる場合に発生します。この場合は、グラフを再定義するのではなく、ALTER PROPERTY GRAPH COMPILEを使用してグラフを再検証できます。

関連項目:

ALTER PROPERTY GRAPH

例: 明示的なラベルまたはプロパティのないプロパティ・グラフ

この例では、プロパティ・グラフmyGraphが、ラベルまたはプロパティなしで作成されます。名前がmytableのラベルは、オブジェクトmyschemaに対して定義した頂点表mytableに自動的に関連付けられます。名前がT2のラベルは、オブジェクトmytable2に対して定義した頂点表T2に自動的に関連付けられます。

基礎となる表mytableT2のすべての列がプロパティとして公開されます。プロパティ名は列名になります。

CREATE PROPERTY GRAPH “myGraph” 
      VERTEX TABLES (“myschema”. “mytable”, “mytable2” AS T2);
      

例: 明示的なラベルを持つプロパティ・グラフ

この例では、頂点表mytableはラベルpersonに関連付けられています。

mytableのすべての列が、プロパティとして公開されます。

CREATE PROPERTY GRAPH “myGraph”
     VERTEX TABLES (“myschema”. “mytable” LABEL “person”);

グラフ要素表の名前が付いたラベルも必要な場合は、personラベルに加えて、そのラベルを明示的に宣言する必要があります。これは、グラフ要素表の名前を付けた別の明示的なラベルを宣言するか、DEFAULT LABELを追加することで実施します。

次の頂点表の宣言は意味的に同じものであり、グラフ要素表mytableをラベルmytableに関連付けます。

CREATE PROPERTY GRAPH “myGraph”
  VERTEX TABLES (“myschema”. “mytable” LABEL “mytable”);
CREATE PROPERTY GRAPH 
  VERTEX TABLES (“myschema”. “mytable” DEFAULT LABEL);
CREATE PROPERTY GRAPH 
  VERTEX TABLES (“myschema”. “mytable” AS “mytable”); 
CREATE PROPERTY GRAPH 
  VERTEX TABLES (“myschema”. “mytable”);  

例: 複数ラベルの付いたプロパティ・グラフ

同じグラフ要素に複数のラベルを関連付けできます。この例の頂点表mytableは、2つのラベルfooおよびbarに関連付けられています。

mytableのすべての列が、プロパティとして公開されます。

CREATE PROPERTY GRAPH “myGraph”
  VERTEX TABLES (“myschema”. “mytable” LABEL “foo” LABEL “bar”); 

例: 複数のグラフ要素を関連付ける1つのラベルを持つプロパティ・グラフ

この例は、プロパティ・グラフmygraphを示しています。この例では、共有weightedラベルは2つの頂点表mytable1およびmytable2と、2つのエッジ表E1およびE2を関連付けています。

mytable1mytable2のすべての列が、プロパティとして公開されます。

CREATE PROPERTY GRAPH “myGraph”
    VERTEX TABLES ( 
      “mytable1” LABEL “foo” LABEL “weighted”, 
      “mytable2” LABEL “weighted”), 
    EDGE TABLES ( 
      "E1" SOURCE  “mytable1” DESTINATION “mytable2” LABEL “weighted”
      "E2" SOURCE  “mytable2” DESTINATION “mytable1” LABEL “weighted”
  );