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::=
graph_options::=
セマンティクス
IF NOT EXISTS
IF NOT EXISTS
を指定すると、次の効果が得られます。
-
プロパティ・グラフが存在しない場合は、文の最後に新しいプロパティ・グラフが作成されます。
-
プロパティ・グラフが存在する場合、既存のプロパティ・グラフは文の最後にあります。古いものが検出されるため、新しいものは作成されません。
IF EXISTS
をCREATE
とともに使用すると、「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
から別のグラフ要素表を定義するために使用したものと同じ主キーを使用することで、別のグラフ要素表の定義に使用できます。そのため、前述の例では、ALTVT2
にPK4
ではなく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);
制限事項
主キー制約に適用される制限は、頂点表とエッジ表のキーにも適用されます。
-
頂点表またはエッジ表のキーの定義には、組込みデータ型
VARCHAR2
、NVARCHAR2
、NUMBER
、BINARY_FLOAT
、BINARY_DOUBLE
、CHAR
、NCHAR
、DATE
、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
は、キーワードのSOURCE
とDESTINATION
を使用することで、エッジのソースになる頂点表とエッジの宛先になる頂点表を明示的に定義するために使用します。
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
への頂点表参照は、どちらも暗黙的に宣言されます。この構文を使用する場合、ユーザーはデータベースに依存して、E1
とVT1
およびVT2
の間の既存の外部キー制約からソースと宛先のキーを推定します。この場合、E1
とVT1
(およびVT2
のそれぞれ)には、外部キー制約のみが存在していることが必要です。
そうでない場合は、エラーが発生します。外部キー制約は、エッジ表と、そのソースおよび宛先の頂点表の間の外部キー関係の推定にのみ使用されます。この推論の結果として、外部キー制約への依存性が作成されることはありません。そのため、この制約は、グラフを無効することや定義に影響を与えることなく後で削除できます。
一方、エッジ表E2
からの頂点表参照は、それぞれソース頂点表VT1
と宛先頂点表VT2
の両方が明示的に宣言されています。この構文は、E2
とその参照先の頂点表の間に外部制約が定義されていない場合や複数ある場合に必須になります。
エッジ表E3
とE4
について示したように、暗黙的および明示的な構文は混在させることができます。その場合、前者はソース表の明示的な構文のみを使用し、後者は宛先表に対してのみこれを使用します。
参照先頂点表の基礎となるオブジェクトの列を参照キーとして扱う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_name
がcolumn_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
を定義します(暗黙的に)。オブジェクト名VT1
がHR.VT1
に解決される場合、両方の頂点表ALTVT1
とVT1
は、同じ基礎となるオブジェクトHR.VT1
から同じ列を公開します。 -
頂点表
VT2
では、基礎となるオブジェクトVT2
のすべての表示可能列を公開する単一のラベルfoo
を定義します。 -
頂点表
VT3
では、プロパティなしの単一ラベルVT3
を定義します(暗黙的に)。基礎となるオブジェクトVT3
からは列が公開されません。 -
頂点表
VT4
では、基礎となるオブジェクトVT4
の列C1
を公開する単一のプロパティC1
を持つ単一ラベルVT4
を定義します(暗黙的に)。 -
頂点表
VT5
では、基礎となるオブジェクトVT5
の列C1
とC2
のそれぞれを公開する2つのプロパティC1
とP2
を持つ単一ラベルVT5
を定義します(暗黙的に)。 -
頂点表
VT6
では、bar
とweighted
という2つのラベルを定義します。ラベルbar
は基礎となるオブジェクトVT6
のすべての表示可能列をプロパティとして公開しますが、ラベル"weighted
"にはプロパティがありません。 -
頂点表
VT7
では、基礎となるオブジェクトVT3
の列C3
以外のすべての列を公開する単一ラベルbar
を定義します。 -
頂点表
VT8
では、2つのラベルbar2
とVT8
(DEFAULT LABEL
による)を定義します。前者にはプロパティがありませんが、後者はすべての列をプロパティとして公開します。 -
頂点表
VT9
では、2つのプロパティPX
とPZ
を持つ単一ラベルVT9
を定義します(暗黙的に)。PX
は基礎となるオブジェクトVT9
の列Cx
とCy
に対する式を公開し、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操作
操作 | 説明 |
---|---|
次の文の ALTER TABLE t DROP CONSTRAINT pkc; ALTER TABLE t DISABLE CONSTRAINT pkc; ALTER TABLE t ENABLE NOVALIDATE CONSTRAINT pkc; |
|
次の文の ALTER TABLE t DROP CONSTRAINT fkc; ALTER TABLE t DISABLE CONSTRAINT fkc; ALTER TABLE t ENABLE NOVALIDATE CONSTRAINT fkc; |
|
ALLOWまたはDISALLOW MIXED PROPERTY TYPES
DISALLOW
は、同じ名前のプロパティの型は、どのラベルからのものであっても完全に同じであることを意味します。DISALLOW
は、すべてのラベルにわたって特定のプロパティが同じ型を持つようにする場合に使用します。
ALLOW
は、異なるラベルで公開される同じ名前のプロパティの型を個別に設定でき、同じラベルからの同じ名前のプロパティの型がUNION
互換になるようにすることを意味します。
DISALLOW MIXED PROPERTY TYPES
を指定する場合、特定の名前のプロパティは、すべてのラベルで完全に同じタイプであることが必要です。このオプションでは、複数のグラフ要素表に関連付けられたラベルを同じデータ型で定義する必要もあることに注意してください。
この表は、互換性ルールの概要を示しています。
表14-2 混合プロパティ型の互換性ルール
オプション | ALLOW | DISALLOW |
---|---|---|
同じラベルの異なる定義で同じ名前を持つプロパティ |
型は |
型は一致することが必要です |
異なるラベルからの同じ名前のプロパティ |
すべて |
型は一致することが必要です |
DISALLOW MIXED PROPERTY TYPES
はデフォルトです。
プロパティ・グラフとその基礎となるオブジェクトの間の依存性
プロパティ・グラフは、その基礎となるオブジェクト、表、マテリアライズド・ビューまたは表やマテリアライズド・ビューのシノニムに依存します。こうした基礎となるオブジェクトの変更により、プロパティ・グラフが無効になることがあります。基礎となるオブジェクトに依存するカーソルも無効になります。無効な状態の無効なプロパティ・グラフに対する問合せはエラーになります。
次に、プロパティ・グラフが無効になる原因の依存オブジェクトに対する操作について概要を示します。
表14-3 プロパティ・グラフが無効になる依存オブジェクトに対する操作
操作 | 結果 |
---|---|
DROP TABLE t ; DROP [PUBLIC] SYNONYM t; DROP MATERIALIZED VIEW t; CREATE OR REPLACE [PUBLIC] SYNONYM t; |
|
RENAME t TO t2; |
|
表 ALTER TABLE |
|
ALTER TABLE t RENAME C TO C2; |
|
表 |
|
依存表、ビューまたはシノニムを変更するその他のDDL操作では、プロパティ・グラフは無効になりません
また、マテリアライズド・ビューを使用してプロパティ・グラフの頂点表またはエッジ表を定義すると、マテリアライズド・ビューのスキーマ・オブジェクトに直接ではなく、ビューのコンテナ表への依存性が作成される点に注意してください。これは次のような意味合いを持ちます:
-
マテリアライズド・ビューを削除しても、その表を保存すると(つまり、
PRESERVE TABLE
を使用すると)、プロパティ・グラフは有効の状態が維持されます。 -
マテリアライズド・ビューの定義に使用された表、ビューまたはシノニムのいずれかを削除すると、そのマテリアライズド・ビューは無効になりますが、プロパティ・グラフはコンテナ表にのみ依存するため有効の状態が維持されます。
この動作は、マテリアライズド・ビューに対して定義されたビューの動作に似ています。
プロパティ・グラフの再検証
プロパティ・グラフの基礎となるオブジェクトを変更すると、グラフが無効になることがあります。無効な状態は、プロパティ・グラフのメタデータが、プロパティ・グラフのデータ・モデルに関して正しくない定義を記述していることを示します。
プロパティ・グラフは、CREATE OR REPLACE PROPERTY GRAPH
を使用して再定義することで再検証できます。
ただし、実際には有効なときに、グラフが無効な状態を報告することがあります。これは、グラフの基礎となるオブジェクトへの依存性が低すぎる場合に発生します。この場合は、グラフを再定義するのではなく、ALTER PROPERTY GRAPH COMPILE
を使用してグラフを再検証できます。
関連項目:
例
例: 明示的なラベルまたはプロパティのないプロパティ・グラフ
この例では、プロパティ・グラフmyGraph
が、ラベルまたはプロパティなしで作成されます。名前がmytable
のラベルは、オブジェクトmyschema
に対して定義した頂点表mytable
に自動的に関連付けられます。名前がT2
のラベルは、オブジェクトmytable2
に対して定義した頂点表T2
に自動的に関連付けられます。
基礎となる表mytable
とT2
のすべての列がプロパティとして公開されます。プロパティ名は列名になります。
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
を関連付けています。
mytable1
とmytable2
のすべての列が、プロパティとして公開されます。
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” );