ストレージエイリアス
ServiceNow AI Platform でのデータ操作とフィールド作成においてストレージエイリアスが果たす役割について説明します。
ストレージエイリアスを理解することは、特にタスク [task] テーブルのような複雑なテーブル階層を扱う場合に、ServiceNow AI Platform での効果的なデータ管理とスキーマのカスタマイズのために重要です。
デフォルトでは、アドミニストレーターはインスタンス内のストレージ列エイリアス [sys_storage_alias] テーブルにアクセスできます。ただし、アドミニストレーターがこのテーブルに対するトランザクションプロセスをユーザーインターフェイスから実行することはできません。
テーブル階層とモデル
ストレージエイリアシングを理解するには、[階層別テーブル] と [クラス別テーブル] の 2 つのモデルを含むタスク [task] テーブル内のテーブル階層に関する知識が必要です。
- 階層別テーブル
- このモデルでは、タスク階層内のすべての列がタスクテーブルにのみ存在するフラット化された階層を特徴とする、単一の物理テーブルであるタスク [task] テーブルを使用します。たとえば、変更要求に関連するフィールドは、個別の変更要求 [change_request] テーブルにはありませんが、タスク [task] テーブルに統合されています。テーブル [sys_db_object] テーブルの拡張モデルフィールドを確認することで、テーブルが階層別テーブルであるかどうかを確認できます。テーブルの親がタスク [task] テーブルの直接の子である場合、テーブルは [階層別テーブル] を使用します。
拡張テーブルは、その親の階層を継承します。たとえば、IMAC [change_request_imac] テーブルは、タスク [task] テーブルを拡張する変更要求 [change_request] テーブルの子テーブルです。変更要求 [change_request] テーブルが [階層別テーブル] であるため、IMAC [change_request_imac] テーブルモデルも [階層別テーブル] です。インシデント [incident] テーブル、変更要求 [change_request] テーブル、問題 [problem] テーブルなどの従来のテーブルはすべて、フラット化されたタスク [task] テーブル階層の一部です。
- クラス別テーブル
- このモデルは、データベースに物理的に存在するテーブルに適用されます。これは、タスクの行数が 100 万行を超えたときに、タスク [task] テーブルから直接拡張される新しいテーブルに使用されます。階層別テーブルとは異なり、クラス別テーブルはフラット化された階層内で動作しないため、グロミングは使用されません。
ストレージエイリアス定義
ストレージエイリアスは、インスタンス内のテーブルのすべてのフィールドに作成されます。ストレージ列エイリアス [sys_storage_alias] テーブルのキーフィールドについて理解しておいてください。
- 要素名
- フィールドがユーザーにどのように表示されるかを示します。これは、ユーザーインターフェイスのインタラクションとスクリプティングにとって重要です。
- ストレージエイリアス
- フィールドのデータが格納されている正確な物理列を示します。ストレージエイリアス値は、操作するデータを識別するために table_name 値と組み合わせて使用されます。ストレージエイリアス値は、タスク [task] テーブルの実際の物理列です。
- ストレージテーブル名
- 要素を格納する物理テーブルを指定します。階層別テーブルの場合、値は常にタスクです。[クラス別テーブル] テーブルの場合、値は物理テーブルの名前です。
- テーブル
- 物理タスク [task] テーブルの各要素がリンクする論理クラスを指定します。Table 要素は、クラス識別子である table_name 値を保持します。
この例では、cab_delegate 要素のストレージエイリアスは a_ref_2 で、データが格納される物理ストレージテーブルは task です。この例は、タスク [table] 上の異なる論理クラスにある 10 個の論理要素を示しており、それらはすべて物理タスク [task] テーブル上の同じエイリアス a_ref_2 にリンクしています。
兄弟要素はグロムされています。つまり、タスク [task] テーブルの 1 つの物理列を共有しています。次のようなクエリを使用して、論理要素 cab_delegate からデータをクエリできます。
SELECT a_ref_2 from task WHERE sys_class_name='change_request' AND a_ref_2 IS NOT NULL
クエリは、物理列 a_ref_2 にデータを指定します。クラス識別子 change_request は、物理タスク [task] テーブルの論理クラス change_request から cab_delegate 論理要素を照会するために、ストレージエイリアス a_ref_2 と組み合わせて使用されます。
実際の物理テーブルで作成されるフィールドの命名規則は、フィールドのタイプによって異なる場合があります。この例では、a_ref_2 は参照フィールドの値を保持するタスク [task] テーブルのエイリアスです。
機能と使用法
ストレージエイリアスには複数の目的があります。
- マッピング
- エイリアスは、論理要素 (階層別テーブル) または物理要素 (クラス別テーブル) をバックエンド データベース内の実際の物理列にマッピングします。論理要素は、論理要素の max_length よりも大きい物理列にグロムすることができます。
- グロミング
- エイリアスを使用すると、複数の兄弟要素が階層別テーブルモデルの 1 つの物理列を共有できます。
- ラベルマッピング
- エイリアスは、sys_documentation (ラベル) レコードをそれぞれの要素に関連付け、フォーム、レポート、リストビューでの可視化を高めます。
制限とルール
- 同じクラス内の 2 つの論理要素が物理列を共有できません。たとえば、インシデント [incident] テーブルに作成された 2 つの文字列フィールドは、データベース内の同じ物理列にマッピングできません。
- 親要素とその子は、物理列を共有できません。たとえば、インシデント [incident] テーブルに作成されたフィールドは、物理列がすでにタスク [task] テーブルのフィールドにマッピングされている場合、物理列にマッピングできません。
- 兄弟要素のみが物理列を共有できます。たとえば、変更要求 [change_request] テーブルの参照フィールドとインシデント [incident] テーブルの参照フィールドは、どちらも同じ物理列にマッピングできます。
- タスク [task] テーブル (sys_class_name は「task」) に直接作成されたフィールドはグロミングできません。