4.1 SQLプロパティ・グラフの作成

CREATE PROPERTY GRAPH DDL文を使用すると、Oracle Databaseでプロパティ・グラフ・オブジェクトを直接作成できます。

例4-1 CREATE PROPERTY GRAPH DDL文を使用したSQLプロパティ・グラフの作成

この例では、グラフの基礎となるデータベース表としてpersonsuniversityfriendsおよびstudent_ofを使用して、SQLプロパティ・グラフstudents_graphを作成します。

この例を実行するには、次のことを確認してください:

  1. 「データベースでのサンプル・データの設定」の説明に従って、データベースにサンプル表を設定します。
  2. SQLプロパティ・グラフの作成に必要な権限があることを確認するには、「SQLプロパティ・グラフに対するシステム権限およびオブジェクト権限の付与」を参照してください。

次の図は、students_graphを示しています。

対応するSQLプロパティ・グラフDDL文を次に示します。

CREATE PROPERTY GRAPH students_graph
  VERTEX TABLES (
    persons KEY (person_id)
      LABEL person
        PROPERTIES (person_id, name, birthdate AS dob)
      LABEL person_ht
        PROPERTIES (height),
    university KEY (id)
  )
  EDGE TABLES (
    friends
      KEY (friendship_id)
      SOURCE KEY (person_a) REFERENCES persons(person_id)
      DESTINATION KEY (person_b) REFERENCES persons(person_id)
      PROPERTIES (friendship_id, meeting_date),
    student_of
      SOURCE KEY (s_person_id) REFERENCES persons(person_id)
      DESTINATION KEY (s_univ_id) REFERENCES university(id)
      PROPERTIES (subject)
  );

実行時に、前述の例では、スキーマの表を使用してグラフ要素表を定義するSQLプロパティ・グラフ・オブジェクトを作成します。新しいSQLプロパティ・グラフ・オブジェクトを作成すると、プロパティ・グラフ・メタデータのみが格納され、基礎となるデータベース・オブジェクトからグラフ要素表にデータがコピーされることはありません。これは、SQLプロパティ・グラフを問い合せると、データベース内の現在のグラフ・データに対してすべてのグラフ問合せが実行されることを意味します。十分な権限がある場合は、SQLプロパティ・グラフを含む別のスキーマを指定することもできます。

この例のグラフ定義は、次で構成されるグラフを作成します:
  • 2つの頂点グラフ要素表:
    • persons: 表には明示的に定義された一意キーperson_idがあり、次の2つのラベルに関連付けられています:
      • person: このラベルは、person_idnameおよびbirthdateをプロパティとして公開します。
      • person_ht: このラベルは、heightプロパティのみを公開します。
    • university: 表のラベルは暗黙的に推測され、デフォルトでは、基礎となるデータベース表の表示列はすべてプロパティとして公開されます。
  • 2つのエッジ・グラフ要素表:
    • friends: エッジ表は、ソースと宛先の両方の頂点表の基礎となるデータベース表としてpersonsを参照します。エッジ表のソース・キーと宛先キー(person_aおよびperson_b)は、それぞれソースと宛先の頂点表の一意キーに対応します。エッジ表のラベルは、グラフ要素表の名前(この場合はfriends)から自動的に推測され、friendship_idおよびmeeting_dateがプロパティとして公開されます。
    • student_of: エッジ表は、ソースおよび宛先の頂点表の基礎となるデータベース表としてそれぞれpersonsおよびuniversityを参照します。エッジ表のソース・キーと宛先キー(s_person_idおよびs_univ_id)は、それぞれソースと宛先の頂点表の一意キーに対応します。エッジ表のラベルは、グラフ要素表の名前(この場合はstudent_of)から自動的に推測され、subjectがプロパティとして公開されます。
SQLプロパティ・グラフの作成後は、グラフ定義を変更できないことに注意してください。ただし、CREATE PROPERTY GRAPH DDL文のOR REPLACE句を使用して、SQLプロパティ・グラフを再定義できます。この句を使用すると、以前に付与されたオブジェクト権限を削除、再作成および再付与することなく、既存のSQLプロパティ・グラフの定義を変更できます。

関連項目:

『Oracle Database SQL言語リファレンス』CREATE PROPERTY GRAPH

次の各項では、グラフ要素表、キー、ラベルおよびプロパティの概念について説明します:

4.1.1 頂点およびエッジ・グラフ要素表について

基礎となるデータベース・オブジェクトから定義されたSQLプロパティ・グラフの頂点およびエッジは、グラフ要素表に格納されます。

グラフ要素表は、頂点表またはエッジ表のいずれかです。

次の項を簡単に理解するには、例4-1のグラフ定義を参照してください:

頂点グラフ要素表

  • 頂点表は、VERTEX TABLES句を使用して定義されます。
  • 頂点表の各行は、グラフの頂点に対応します。
  • 頂点グラフ要素表には、基礎となるデータベース・オブジェクトの名前と無関係の名前があります。
  • デフォルトでは、頂点グラフ要素表の名前は基礎となるデータベース・オブジェクトの名前と同じです。
  • 頂点表名はグラフに対して一意である必要があります。同じデータベース・オブジェクトの複数のグラフ要素表を含むSQLプロパティ・グラフを定義する場合は、AS句を使用して代替グラフ要素の表名を指定する必要があります。

エッジ・グラフ要素表

  • エッジ表は、EDGE TABLES句を使用して定義されます。
  • それぞれの頂点表をREFERENCESするSOURCEおよびDESTINATIONキーワードを使用して、ソース頂点表と宛先頂点表の間の直接的な関係を指定します。
  • エッジ表の各行は、グラフのエッジに対応します。
  • エッジ・グラフ要素表には、基礎となるデータベース・オブジェクトの名前と無関係の名前があります。
  • デフォルトでは、エッジ・グラフ要素表の名前は、基礎となるデータベース・オブジェクトの名前と同じです。
  • エッジ表名はグラフに対して一意である必要があります。エッジ表名は、頂点表または別のエッジ表と共有できません。

4.1.2 頂点およびエッジ表キーについて

SQLプロパティ・グラフ定義で使用される各頂点およびエッジ表には、SQLプロパティ・グラフで一意の頂点またはエッジを識別するためのキーが必要です。

キーは、基礎となる表の1つ以上の列から定義されます。キーは、既存の主キー、または基礎となる表に定義された一意制約に基づいて暗黙的に推測することも、明示的に定義することもできます。キーは一意である必要があります。

ただし、ENFORCED MODEでグラフを作成する場合は、キー列の一意性制約が必要です。それ以外の場合は、一意性制約がないキー列を使用して、TRUSTED MODEでグラフを作成できます。グラフの作成時に適用できる様々なモードの詳細は、「グラフ・オプションを使用したSQLプロパティ・グラフの作成」を参照してください。

頂点またはエッジ表キーは、次の組込みデータ型列のいずれかに対して定義できます:

  • VARCHAR2
  • NVARCHAR2
  • NUMBER
  • BINARY_FLOAT
  • BINARY_DOUBLE
  • CHAR
  • NCHAR
  • DATE
  • INTERVAL (YEAR TO MONTHDAY TO SECONDの両方)
  • TIMESTAMP

TIMESTAMP WITH TIME ZONEデータ型はサポートされていません。

次の項を簡単に理解するには、例4-1のSQLプロパティ・グラフ定義を参照してください:

頂点表キー

  • デフォルトでは、頂点表のキーは、基礎となるデータベース・オブジェクトの単一のPRIMARY KEYまたはUNIQUEキー制約から自動的に識別されます。両方が存在する場合、PRIMARY KEY制約はUNIQUEキー制約よりも優先されます。
  • 頂点表キーが単一のUNIQUEキーに基づいて自動的に推測される場合、そのUNIQUEキーの一連の列もNOT NULLである必要があります。
  • 基礎となるデータベース・オブジェクトに一意性を強制するための一意制約が含まれていない場合は、頂点表の一意キーを定義する列を識別するために、VERTEX TABLES句にKEY副句を明示的に定義する必要があります。列名は基礎となるデータベース・オブジェクトの列名と一致する必要があります。
  • コンポジット頂点表キーもサポートされています。

エッジ表キー

  • デフォルトでは、エッジ表のキーは、基礎となるデータベース・オブジェクトの単一のPRIMARY KEYまたはUNIQUEキー制約から自動的に識別されます。両方が存在する場合、PRIMARY KEY制約はUNIQUEキー制約よりも優先されます。
  • エッジ表キーが単一のUNIQUEキーに基づいて自動的に推測される場合、そのUNIQUEキーの一連の列もNOT NULLである必要があります。
  • 基礎となるデータベース・オブジェクトに一意性を強制するための一意制約が含まれていない場合は、エッジ表の一意キーを定義する列を識別するために、EDGE TABLES句にKEY副句を明示的に定義する必要があります。列名は基礎となるデータベース・オブジェクトの列名と一致する必要があります。
  • デフォルトでは、SOURCEおよびDESTINATION表キーは、それぞれ、エッジ表と基礎となるソース表と宛先表の間にある単一のFOREIGN KEY制約から自動的に取得されます。
  • ただし、次のいずれかに該当する場合は、SOURCEおよびDESTINATION頂点表に対してKEY副句を明示的に指定する必要があります:
    • エッジと参照されている頂点表の間にFOREIGN KEY制約はありません。
    • エッジと参照される頂点表の間に複数のFOREIGN KEY制約があります。
    • エッジ表とそのソースおよび宛先の頂点表の基礎となるデータベース・オブジェクトは、マテリアライズド・ビューまたは外部表です。

ノート:

データベース・オブジェクトの主キー制約に適用されるすべての制限は、頂点およびエッジ表のキーにも適用されます。

4.1.3 ラベルとプロパティについて

ラベルを1つ以上のグラフ要素表に関連付け、グラフ定義を拡張できます。ラベルは、プロパティの有無に関係なく定義できます。

オプションで、グラフの頂点およびエッジ表に対してLABELSおよびPROPERTIESを定義できます。指定しない場合、グラフ要素表にグラフ要素表の名前を持つラベルが自動的に割り当てられ、列名をプロパティ名として使用して、すべての表示列がプロパティとして公開されます。

次の項を簡単に理解するには、例4-1のSQLプロパティ・グラフ定義を参照してください:

ラベル

  • デフォルトでは、頂点およびエッジ表には、それぞれのグラフ要素表の名前を持つラベルが自動的に割り当てられます。
  • DEFAULT LABEL副句を使用して、前述のルールを明示的に適用することもできます。
  • LABEL副句を使用して、新しいラベル名を頂点またはエッジ・グラフ要素表に明示的に割り当てることができます。
  • 同じグラフ要素表に複数のラベルを関連付けることができます。
  • 同じラベルを複数のグラフ要素表で共有できます。

    次の条件が当てはまる場合、ラベルを複数のグラフ要素表(共有ラベル)に関連付けることができます:

    • このラベルを共有するすべてのグラフ要素表は、同じプロパティ名のセットを宣言します。ラベル定義では、プロパティの順序は重要ではありません。
    • 同じプロパティ名で公開される異なる列または値式には、論理和互換の型があります。
  • また、詳細は、「プロパティ・タイプを決定するためのタイプ互換性ルール」を参照してください。

プロパティ

  • デフォルトでは、ラベル宣言がない場合、またはプロパティ・グラフ定義でDEFAULT LABEL副句が使用されている場合、頂点またはエッジ表のすべての表示列がプロパティとして自動的に公開されます。プロパティ名は、基礎となるデータベース・オブジェクトの列名と同じです。
  • Oracle組込みデータ型の列は、SQLプロパティ・グラフでラベルのプロパティとして公開できます。これには、仮想列、JSONデータ型列、CLOBおよびBLOBデータ型が含まれています。

    ただし、次はサポートされていません:

    • XMLTypeおよびSDO_GEOMETRY型の列はサポートされていません。
    • バイナリXMLとして格納されたXMLType列に対するSQL/XML値式、およびSDO_GEOMETRYオブジェクト・データ型列に対するSDO_GEOMETRY組込み関数は、プロパティでサポートされている型の値を返すかぎり許可されます。一般オブジェクト・データ型とユーザー定義データ型、およびそれらに対する対応するSQL演算子値式はサポートされません。
    • ANYTYPE型の列は、プロパティとして公開できません。
  • SQLプロパティ・グラフの作成時に、頂点またはエッジ・プロパティのデータ型は次のように決定されます:
  • ラベルの頂点またはエッジ・プロパティを明示的に定義する場合、次のプロパティ宣言がサポートされています:
    • PROPERTIES [ARE] ALL COLUMNS: グラフ要素表のすべての表示列をラベル・プロパティとして公開します。ただし、ソース・データベース・オブジェクトで列が追加または削除された場合、SQLプロパティ・グラフの作成後にこれらの列はグラフに反映されません。
    • PROPERTIES [ARE] ALL COLUMNS EXCEPT(<column_names_list>): グラフ要素表のすべての表示列を、明示的にリストされている列を除き、ラベル・プロパティとして公開します。
    • PROPERTIES(<list_of_column_names>): ラベル・プロパティとして明示的にリストされているグラフ要素表の列のみを公開します。プロパティ名はデフォルトで列名になります。
    • PROPERTIES(<column_name AS property_name,...>): 前述のオプションと同じです。ただし、AS property_namecolumn_nameに追加すると、property_nameがプロパティ名として使用されます。
    • PROPERTIES(<column_expressions AS property_name,...>): 列に対する式であるプロパティを宣言します。この場合、AS句は必須です。値式は、スカラー・データ型の列に対して定義されたSQL演算子式またはJSON式のいずれかです。JSON式の使用例については、「SQLプロパティ・グラフでのJSONのサポート」を参照してください。
    • NO PROPERTIES: ラベルの列は公開されません。
  • 疑似列は、ラベル・プロパティとして公開できません。

4.1.4 グラフ・オプションを使用したSQLプロパティ・グラフの作成

グラフ・オプションを使用して、SQLプロパティ・グラフの作成時の動作を制御できます。

グラフ・オプションは、CREATE PROPERTY GRAPH DDL文の最後にOPTIONS句を使用して指定できます。必要に応じて、MODEオプションまたはMIXED PROPERTY TYPESオプション、あるいはその両方を使用できます。

オプションを使用したグラフのモードの指定

SQLプロパティ・グラフの作成時に次のいずれかのオプション値を使用して、グラフのMODEを指定できます:
  • ENFORCED MODE: これにより、基礎となるデータベース表に一意キー制約への依存関係が確保されます。SQLプロパティ・グラフの作成時にCREATE PROPERTY GRAPH文を使用すると、次のいずれかの条件が当てはまる場合にエラーがスローされます:
    • グラフ要素表の指定された頂点またはエッジ表KEYが、NOT NULL列で定義されたPRIMARY KEYキーでもUNIQUEキーでもありません。
    • グラフ要素表に明示的な頂点またはエッジ表KEYが定義されておらず、基礎となるデータベース表のNOT NULL列に単一のPRIMARY KEYまたは単一のUNIQUEキー制約がないため、デフォルトの頂点またはエッジ・キーを自動的に識別できません。
    • 指定されたエッジ・ソース・キーおよび対応するソース頂点キー、または指定されたエッジ宛先キーおよび対応する宛先頂点キーに対して、基礎となる表の間に対応するFOREIGN KEYが存在しません。
    • エッジ表にはソースまたは宛先に対する明示的なキーがなく、エッジ表と参照されるソース(または宛先)頂点表の間に単一のFOREIGN KEY制約がないため、システムがキーを暗黙的に推測できません。

    たとえば、主キー、一意キーまたはNOT NULL制約がないデータベース内の次のt1表について考えてみます。

    SQL> CREATE TABLE t1 (id NUMBER, name VARCHAR2(10));
    
    INSERT INTO t1 (id, name) VALUES (1,'John');
    INSERT INTO t1 (id, name) VALUES (2, 'Mary');

    次のように、OPTIONS(ENFORCED MODE)を使用してSQLプロパティ・グラフを作成します:

    CREATE PROPERTY GRAPH g
       VERTEX TABLES (
          t1 KEY (id)
             LABEL t PROPERTIES ARE ALL COLUMNS
       ) OPTIONS(ENFORCED MODE);

    一意性を強制するキー制約がないため、グラフの作成は次のエラーで失敗します:

    ORA-42434: グラフ要素の表キーを定義するために使用される列は、強制モードではNULL以外である必要があります

    前のグラフ定義のKEY句を省略すると、次のエラーがスローされます:

    ORA-42402: グラフ要素表T1のキーを推測できません

  • TRUSTED MODE (デフォルト): TRUSTEDモードを使用する場合、基礎となるデータベース表に対する一意キー制約への依存関係はありません。したがって、前述の例をTRUSTEDモードで実行しても、エラーはスローされません。これは、このオプションを使用することを選択した場合、各グラフ要素表の主キーの一意性、およびエッジ表とそのソース表と宛先表の間の有効な外部キー参照を保証する必要があることを意味します。そうしないと、予想される保証が満たされないため、グラフ問合せの結果が正しくなくなる可能性があります。

共有プロパティ名に対して異なるプロパティ・タイプを許可または禁止するオプションの使用

MIXED PROPERTY TYPESオプションは、次のいずれかの値を使用して指定できます:
  • ALLOW MIXED PROPERTY TYPES: これにより、次のことが保証されます:
    • 同じ名前の2つのプロパティが異なるラベルに属している場合は、完全に異なるタイプを持つことができます。

      たとえば、サンプル表personsおよびstudentsに加えて(「データベースでのサンプル・データの設定」を参照)、次の追加表を作成します:

      CREATE TABLE t2 (id NUMBER, height VARCHAR2(4),
      CONSTRAINT t2_pk PRIMARY KEY (id));
      
      INSERT INTO t2 (id, height) VALUES (1, '1.80');
      INSERT INTO t2 (id, height) VALUES (2, '1.65');
      
      CREATE TABLE t3 (id NUMBER, height BINARY_DOUBLE,
      CONSTRAINT t3_pk PRIMARY KEY (id));
      
      INSERT INTO t3 (id, height) VALUES (1, 1.80);
      INSERT INTO t3 (id, height) VALUES (2, 1.65);

      同じプロパティ名heightに3つの異なるラベルを使用する次のCREATE PROPERTY GRAPH DDL文を実行します。

      CREATE PROPERTY GRAPH g1
         VERTEX TABLES (
            persons
              LABEL person PROPERTIES (name, height),
            t2
              LABEL t2 PROPERTIES (height),
            t3
              LABEL t3 PROPERTIES (height)
         )OPTIONS(ALLOW MIXED PROPERTY TYPES);
      グラフが作成されると、関連付けられた頂点表のheightのプロパティ・タイプは、次のようになります:
      • LABEL personFLOATです
      • LABEL t2VARCHARです
      • LABEL t3BINARY_DOUBLEです

      ただし、このグラフを問い合せる場合、heightのプロパティ・タイプは、SQLグラフ問合せで使用されるラベル制約に依存します。詳細は、「ラベル・プロパティへのアクセス」を参照してください。

    • 共有ラベル内でプロパティ名を共有している場合は、すべての論理和互換型である必要があります。

      たとえば、共有ラベルt内でプロパティ名heightが使用されている次のCREATE PROPERTY GRAPH DDL文を実行します:

      CREATE PROPERTY GRAPH g2
         VERTEX TABLES (
            persons
              LABEL t PROPERTIES (height),
            t2
              LABEL t PROPERTIES (height)
         )OPTIONS(ALLOW MIXED PROPERTY TYPES);

    personsおよびt2の列heightのデータ型がそれぞれFLOATおよびVARCHARで、論理和の互換性がないため、グラフの作成が失敗します。したがって、次のエラーがスローされます:

    ORA-42414: プロパティHEIGHT (ラベルT)に複合型を使用することはできません

    ただし、FLOATおよびBINARY_DOUBLEが数値グループに属し、論理和互換であるため、次のグラフは正常に作成されます。

    CREATE PROPERTY GRAPH g3
       VERTEX TABLES (
          persons
            LABEL t PROPERTIES (height),
          t3
            LABEL t PROPERTIES (height)
       )OPTIONS(ALLOW MIXED PROPERTY TYPES);

    詳細は、「プロパティ・タイプを決定するためのタイプ互換性ルール」を参照してください。

  • DISALLOW MIXED PROPERTY TYPES (デフォルト): これにより、同じ名前のプロパティは厳密に同じデータ型である必要があります。これは、単一または複数のグラフ要素表に関連付けられているかどうかに関係なく、すべてのラベルに適用されます。

    たとえば、基礎となるデータベース表としてpersonsおよびt2を使用して、次のDDL文を実行します:

    CREATE PROPERTY GRAPH g4
       VERTEX TABLES (
          persons
            LABEL person PROPERTIES (name, height),
          t2
            LABEL t2 PROPERTIES (height)
       );

    前述のコードでは、デフォルトのDISALLOW MIXED PROPERTY TYPESグラフ・オプションが使用されるため、複合プロパティ・タイプがグラフ定義で使用されていると、エラーがスローされます:

    ORA-42414: プロパティHEIGHT (ラベルT2)に複合型を使用することはできません

次の表に、MIXED PROPERTY TYPESオプションに関する互換性ルールをまとめています

説明 許可 禁止
共有ラベルによって公開される同じ名前のプロパティ脚注1 論理和互換 型は一致することが必要です
共有プロパティ脚注2 任意 型は一致することが必要です

脚注1 同じ名前のラベルを複数のグラフ要素表に関連付けることができます。

脚注2 同じ名前のプロパティは、異なるラベルで公開できます。

4.1.5 SQLプロパティ・グラフに対するシステム権限およびオブジェクト権限の付与

SQLプロパティ・グラフに対する操作を実行するための新しいシステム権限およびオブジェクト権限について学習します。

表4-1 SQLプロパティ・グラフ・オブジェクトのシステム権限

システム権限 説明
CREATE PROPERTY GRAPH 権限受領者のスキーマにSQLプロパティ・グラフを作成します
CREATE ANY PROPERTY GRAPH SYSおよびAUDSYS以外の任意のスキーマにSQLプロパティ・グラフを作成します
ALTER PROPERTY GRAPH 権限受領者のスキーマのSQLプロパティ・グラフを変更します
ALTER ANY PROPERTY GRAPH SYSおよびAUDSYS以外の任意のスキーマのSQLプロパティ・グラフを変更します
READ PROPERTY GRAPH 権限受領者のスキーマのSQLプロパティ・グラフを問い合せます
READ ANY PROPERTY GRAPH SYSおよびAUDSY以外の任意のスキーマのSQLプロパティ・グラフを問い合せます
SELECT PROPERTY GRAPH 権限受領者のスキーマのSQLプロパティ・グラフを問い合せます
DROP ANY PROPERTY GRAPH SYSおよびAUDSYS以外の任意のスキーマのSQLプロパティ・グラフを削除します

表4-2 SQLプロパティ・グラフのオブジェクト権限

オブジェクト権限 説明
ALTER SQLプロパティ・グラフを変更します
READ SQLグラフ問合せを使用してSQLプロパティ・グラフを問い合せます
脚注3SELECT SQLグラフ問合せを使用してSQLプロパティ・グラフを問い合せます

脚注3

SELECT権限は、SQLプロパティ・グラフ・オブジェクトのREAD権限とまったく同様に動作することに注意してください。これは主に、プロパティ・グラフ・オブジェクトのSQL標準との互換性のために存在します。

次に、SQLプロパティ・グラフに関連する権限の付与および取消しの例を示します。次の権限を付与および取り消すSYSDBAアクセス権があることを確認してください:

GRANT CREATE PROPERTY GRAPH, CREATE ANY PROPERTY GRAPH, 
      ALTER ANY PROPERTY GRAPH, DROP ANY PROPERTY GRAPH, 
      READ ANY PROPERTY GRAPH TO <graphuser>;
REVOKE CREATE PROPERTY GRAPH, CREATE ANY PROPERTY GRAPH, 
      ALTER ANY PROPERTY GRAPH, DROP ANY PROPERTY GRAPH, 
      READ ANY PROPERTY GRAPH FROM <graphuser>;

次のように、データベース内のSQLプロパティ・グラフを別のユーザーと共有できます。

GRANT SELECT ON PROPERTY GRAPH <graph_name> TO <schema_user>;

4.1.6 SQLプロパティ・グラフのメタデータの取得

SQLプロパティ・グラフのメタデータには、一連のデータ・ディクショナリ・ビューを介してアクセスできます。

次の表に、SQLプロパティ・グラフのメタデータを取得するためにアクセスできるデータ・ディクショナリ・ビューの完全なリストを示します。表内の各カテゴリのメタデータは、ALL_USER_およびDBA_ビュー・セット全体に存在することに注意してください。権限のレベルに応じて、対応するビューにアクセスできます。

表4-3 SQLプロパティ・グラフのメタデータを取得するデータ・ディクショナリ・ビューのリスト

ビュー名脚注4 説明
データベース内のすべてのプロパティ・グラフを記述します。
データベース内のプロパティ・グラフのすべてのグラフ要素表を記述します。
エッジ関係の定義に使用されるすべての列を記述します。
グラフ要素表のキーとして使用されるすべての列を記述します。
データベース内のプロパティ・グラフのラベルを記述します。
データベース内のプロパティ・グラフのすべてのラベルのプロパティを記述します。
ラベルのプロパティの定義に使用されるすべての列式を記述します。
データベース内のプロパティ・グラフのすべてのグラフ要素表のすべてのラベルを記述します。

脚注4 ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

次の例では、「SQLプロパティ・グラフの作成」で作成したSQLプロパティ・グラフ(students_graph)に定義されたグラフ要素表を取得します。

SQL> SELECT * FROM USER_PG_ELEMENTS;

GRAPH_NAME           ELEMENT_NAME    ELEMENT_KIND    OBJECT_OWNER    OBJECT_NAME
-------------------- --------------- --------------- --------------- ---------------
STUDENTS_GRAPH       PERSONS         VERTEX          GRAPHUSER       PERSONS
STUDENTS_GRAPH       UNIVERSITY      VERTEX          GRAPHUSER       UNIVERSITY
STUDENTS_GRAPH       FRIENDS         EDGE            GRAPHUSER       FRIENDS
STUDENTS_GRAPH       STUDENT_OF      EDGE            GRAPHUSER       STUDENT_OF

4.1.7 DBMS_METADATAパッケージを使用したSQL作成DDLの取得

DBMS_METADATAパッケージを使用して、SQLプロパティ・グラフの作成DDLを取得できます。

次の例では、DBMS_METADATAパッケージを使用して「SQLプロパティ・グラフの作成」で作成したグラフのDDLを表示します。

SQL> SELECT DBMS_METADATA.GET_DDL('PROPERTY_GRAPH', 'STUDENTS_GRAPH') FROM DUAL;

  CREATE PROPERTY GRAPH "GRAPHUSER"."STUDENTS_GRAPH"
  VERTEX TABLES (
   "GRAPHUSER"."PERSONS" AS "PERSONS" KEY ("PERSON_ID")
      LABEL PERSON PROPERTIES ("PERSON_ID", "NAME", "BIRTHDATE" AS "DOB")
      LABEL PERSON_HT PROPERTIES ("HEIGHT"),
   "GRAPHUSER"."UNIVERSITY" AS "UNIVERSITY" KEY ("ID")
      PROPERTIES ("ID", "NAME") )
  EDGE TABLES (
   "GRAPHUSER"."FRIENDS" AS "FRIENDS" KEY ("FRIENDSHIP_ID")
      SOURCE KEY("PERSON_A") REFERENCES PERSONS ("PERSON_ID")
      DESTINATION KEY("PERSON_B") REFERENCES PERSONS ("PERSON_ID")
     PROPERTIES ("FRIENDSHIP_ID", "MEETING_DATE"),
   "GRAPHUSER"."STUDENT_OF" AS "STUDENT_OF" KEY ("S_ID")
      SOURCE KEY("S_PERSON_ID") REFERENCES PERSONS ("PERSON_ID")
      DESTINATION KEY("S_UNIV_ID") REFERENCES PERSONS ("ID")
     PROPERTIES ("SUBJECT") )
  OPTIONS (TRUSTED MODE, DISALLOW MIXED PROPERTY TYPES)

4.1.8 SQLプロパティ・グラフの作成の制限事項

この項では、SQLプロパティ・グラフの作成時に適用されるいくつかの制限を示します。

  • ビューは、SQLプロパティ・グラフのグラフ要素表として使用できません。
  • ハイブリッド・パーティション表およびこれらの表から導出されたビューは、SQLプロパティ・グラフのグラフ要素表として使用できません。
  • データベース・リンク、およびこれらのリンクを使用して定義されたビューは、SQLプロパティ・グラフのグラフ要素表として使用できません。
  • オブジェクト表(CREATE TABLE x OF myObjectTypeで作成された表)およびオブジェクト・ビューは、SQLプロパティ・グラフのグラフ要素表として使用できません。
  • XMLType表(CREATE TABLE x OF XMLTYPE ...で作成された表)は、SQLプロパティ・グラフのグラフ要素表として使用できません。ただし、SQL/XML演算子(SQL値式としてプロパティを定義するためにバイナリXMLとして格納される、XMLType列に対するXMLExists()XMLCast(XMLQuery()))は、サポートされています。
  • ANYTYPE型の列は、プロパティまたはグラフ要素表のキーとして公開できません。
  • 疑似列は、プロパティまたはグラフ要素表のキーとして公開できません。
  • PL/SQL関数への呼出しを構成する列式は、プロパティとして公開できません。同様に、PL/SQL関数への呼出しを構成する列式に対して定義された仮想列は、プロパティとして公開できません。
  • SQLプロパティ・グラフはエディション化できません。
  • SQLプロパティのグラフ定義は、グラフの作成後は変更できません。ただし、CREATE PROPERTY GRAPH DDL文のOR REPLACE句を使用して、SQLプロパティ・グラフを再定義できます。
  • シャード・カタログでは、SQLプロパティ・グラフの作成はサポートされていません。ただし、ローカル・シャード内のシャード表に対してプロパティ・グラフを作成できます。