5.1.1 プロパティ・グラフ表(詳細情報)
プロパティ・グラフがデータベースに確立された後、いくつかの表がユーザーのスキーマに自動的に作成され、接頭辞としてグラフ名が、接尾辞としてVT$またはGE$が付きます。たとえば、myGraph
という名前のグラフの場合、表myGraphVT$が作成されて頂点およびそのプロパティ(K/Vペア)が格納され、表myGraphGE$が作成されてエッジおよびそのプロパティが格納されます。
追加の内部表がIT$およびGT$の接尾辞で作成され、テキスト索引メタデータおよびグラフ・スケルトン(トポロジ構造)が格納されます。
表myGraphVT$およびmyGraphGE$の定義は次のとおりです。これらはSQLベースの分析およびSQLベースのプロパティ・グラフの問合せに重要です。VT$およびGE$表の両方で、VTS、VTEおよびFEは予約済の列で、列SLはセキュリティ・ラベル用、列K、T、V、VNおよびVTはグラフ要素のプロパティ(K/Vペア)に関する情報をまとめて格納します。VT$表で、VIDは頂点IDを格納するための長整数です。GE$表で、EID、SVIDおよびDVIDは、エッジID、出力(from)頂点IDおよび入力(to)頂点IDを格納するための長整数列です。
SQL> describe myGraphVT$
Name Null? Type
----------------------------------------- -------- ----------------------------
VID NOT NULL NUMBER
K NVARCHAR2(3100)
T NUMBER(38)
V NVARCHAR2(15000)
VN NUMBER
VT TIMESTAMP(6) WITH TIME ZONE
SL NUMBER
VTS DATE
VTE DATE
FE NVARCHAR2(4000)
SQL> describe myGraphGE$
Name Null? Type
----------------------------------------- -------- ----------------------------
EID NOT NULL NUMBER
SVID NOT NULL NUMBER
DVID NOT NULL NUMBER
EL NVARCHAR2(3100)
K NVARCHAR2(3100)
T NUMBER(38)
V NVARCHAR2(15000)
VN NUMBER
VT TIMESTAMP(6) WITH TIME ZONE
SL NUMBER
VTS DATE
VTE DATE
FE NVARCHAR2(4000)
簡単にするために、1つのグラフ名だけを許可し、大文字と小文字は区別されません。
VT$表とGE$表の両方で、列K、T、V、VN、VTはグラフ要素のプロパティ(K/Vペア)に関するすべての情報をまとめて格納し、SLはセキュリティラベルに使用され、VTS、VTEおよびFEは予約列になります。
プロパティ・グラフのスキーマ設計で、プロパティ値は数値データ型(long、int、double、float)の場合、VN列に格納され、タイムスタンプの場合、VT列に格納され、文字列、booleanおよびその他のシリアライズ可能データ型の場合、V列に格納されます。よりよいOracleテキスト問合せサポートのために、プロパティ値のリテラル表現は、データ型が数値またはタイムスタンプであっても、V列に格納されます。すべてのサポートされるデータ型を区別するために、整数IDはT列に格納されます。
VT$およびGE$表の両方のK列にはプロパティ・キーが格納されます。各エッジにはString型のラベルが必要で、そのラベルはGE$表のEL列に格納されます。
VT$表とGE$表のT列は、その列が示すプロパティの値のデータ型を表す数値です。たとえば、1は値が文字列、2は値が整数、などを意味します。T列に指定できる値および関連するデータ型の一部は次のとおりです。
-
1: STRING
-
2: INTEGER
-
3: FLOAT
-
4: DOUBLE
-
5: DATE
-
6: BOOLEAN
-
7: LONG
-
8: SHORT
-
9: BYTE
-
10: CHAR
-
20: 空間データ
頂点を格納するためのVT$表スキーマには、次の列があります。
-
VID: 頂点のIDを示す長い列。
-
VL: 頂点のラベルを表す文字列列。
-
K: プロパティの名前を示す文字列の列。頂点に関連付けられているプロパティがない場合、この列の値は空白にする必要があります。
-
T: プロパティのタイプを示す長い列。
-
V: プロパティの値を文字列として示す文字列の列。プロパティ・タイプが数値である場合、値の文字列書式バージョンがこの列に格納されます。同様に、プロパティがタイムスタンプ・ベースである場合、値の文字列書式バージョンが格納されます。
-
VN: 数値プロパティの値を示す数値列。この列には、プロパティ・タイプが数値である場合のみ、プロパティ値が格納されます。
-
VT: 日時プロパティの値を格納するタイムゾーン列のあるタイムスタンプ。この列には、プロパティ・タイプがタイムスタンプ・ベースである場合のみ、プロパティ値が格納されます。
-
SL: Oracle Label Securityを使用してセキュリティ・ラベル・セット用に予約された数値列(セキュリティ・ラベルの使用の詳細は、プロパティ・グラフ・データのアクセス制御(グラフレベルおよびOLS)を参照)。
-
VTS: 今後の拡張用として予約されているタイムゾーン列のタイムスタンプ。
-
VTE: 今後の拡張用として予約されているタイムゾーン列のタイムスタンプ。
-
FE: 今後の拡張用として予約されている文字列列。
次の例では、CONNECTIONSVT$という名前の表に行を挿入します。これには、(様々なデータ型を表す) 1から10のT列値が含まれます。
INSERT INTO connectionsvt$(vid,k,t,v,vn,vt) VALUES (2001, '1-STRING', 1, 'Some String', NULL, NULL);
INSERT INTO connectionsvt$(vid,k,t,v,vn,vt) VALUES (2001, '2-INTEGER', 2, NULL, 21, NULL);
INSERT INTO connectionsvt$(vid,k,t,v,vn,vt) VALUES (2001, '3-FLOAT', 3, NULL, 21.5, NULL);
INSERT INTO connectionsvt$(vid,k,t,v,vn,vt) VALUES (2001, '4-DOUBLE', 4, NULL, 21.5, NULL);
INSERT INTO connectionsvt$(vid,k,t,v,vn,vt) VALUES (2001, '5-DATE', 5, NULL, NULL, timestamp'2018-07-20 15:32:53.991000');
INSERT INTO connectionsvt$(vid,k,t,v,vn,vt) VALUES (2001, '6-BOOLEAN', 6, 'Y', NULL, NULL);
INSERT INTO connectionsvt$(vid,k,t,v,vn,vt) VALUES (2001, '7-LONG', 7, NULL, 42, NULL);
INSERT INTO connectionsvt$(vid,k,t,v,vn,vt) VALUES (2001, '8-SHORT', 8, NULL, 10, NULL);
INSERT INTO connectionsvt$(vid,k,t,v,vn,vt) VALUES (2001, '9-BYTE', 9, NULL, 10, NULL);
INSERT INTO connectionsvt$(vid,k,t,v,vn,vt) VALUES (2001, '10-CHAR', 10, 'A', NULL, NULL);
...
UPDATE connectionsVT$ SET V = coalesce(v,to_nchar(vn),to_nchar(vt)) WHERE vid=2001;
COMMIT;
エッジを格納するためのGE$表スキーマには、次の列があります。
-
EID: エッジのIDを示す長い列。
-
SVID: 出力(元の)頂点のIDを示す長い列。
-
DVID: 入力(宛先)頂点のIDを示す長い列。
-
EL: エッジのラベルを表す文字列列。
-
K: プロパティの名前を示す文字列の列。頂点に関連付けられているプロパティがない場合、この列の値は空白にする必要があります。
-
T: プロパティのタイプを示す長い列。
-
V: プロパティの値を文字列として示す文字列の列。プロパティ・タイプが数値である場合、値の文字列書式バージョンがこの列に格納されます。同様に、プロパティがタイムスタンプ・ベースである場合、値の文字列書式バージョンが格納されます。
-
VN: 数値プロパティの値を示す数値列。この列には、プロパティ・タイプが数値である場合のみ、プロパティ値が格納されます。
-
VT: 日時プロパティの値を格納するタイムゾーン列のあるタイムスタンプ。この列には、プロパティ・タイプがタイムスタンプ・ベースである場合のみ、プロパティ値が格納されます。
-
SL: Oracle Label Securityを使用してセキュリティ・ラベル・セット用に予約された数値列(セキュリティ・ラベルの使用の詳細は、プロパティ・グラフ・データのアクセス制御(グラフレベルおよびOLS)を参照)。
-
VTS: 今後の拡張用として予約されているタイムゾーン列のタイムスタンプ。
-
VTE: 今後の拡張用として予約されているタイムゾーン列のタイムスタンプ。
-
FE: 今後の拡張用として予約されている文字列列。
VT$およびGE$表に加えて、Oracle Spatial and Graphはその他の内部表も保持します。
GT$接尾辞を使用して定義された内部グラフ・スケルトン表は、グラフのトポロジ構造を格納するために使用され、次の列を含んでいます。
-
EID: エッジのIDを示す長い列。
-
EL: エッジのラベルを表す文字列列。
-
SVID: 出力(元の)頂点のIDを示す長い列。
-
DVID: 入力(宛先)頂点のIDを示す長い列。
-
ELH: エッジ・ラベルのハッシュ値を指定する未加工の列。
-
ELS: 合計文字数を基準にしてエッジ・ラベル・サイズを指定する整数列。
Oracleの内部専用として、SS$接尾辞を使用して定義された内部表が作成されます。