ストレージエイリアス

  • リリースバージョン: Yokohama
  • 更新日 2025年01月30日
  • 所要時間:5分
  • Now Platformでのデータ操作とフィールドの作成でストレージエイリアスが果たす役割について説明します。

    ストレージエイリアスを理解することは、特にタスク [task] テーブルのような複雑なテーブル階層を扱う場合に、 Now Platform で効果的にデータ管理とスキーマをカスタマイズするために重要です。

    デフォルトでは、アドミニストレーターはインスタンス内のストレージ列エイリアス [sys_storage_alias] テーブルにアクセスできます。ただし、このテーブルに対するトランザクションプロセスは、アドミニストレーターがユーザーインターフェイスから実行することはできません。

    テーブル階層とモデル

    ストレージのエイリアシングを理解するには、タスク [task] テーブル内のテーブル階層に関する知識が必要です。これには、階層別テーブルとクラス別テーブルの 2 つのモデルが含まれます。

    階層別テーブル
    このモデルでは、タスク [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 です。[クラス別テーブル] テーブルの場合、値は物理テーブルの名前です。
    テーブル
    物理タスク [task] テーブルで各要素がリンクする論理クラスを指定します。Table 要素は、クラス識別子であるtable_name値を保持します。
    図 : 1. ストレージ列エイリアス
    タスクテーブルのストレージエイリアスa_ref_2要素。

    この例では、cab_delegate 要素のストレージエイリアスは a_ref_2 で、データが格納される物理ストレージテーブルは task です。この例は、タスク [テーブル] 上の異なる論理クラスの 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は、ストレージ別名 a_ref_2 と組み合わせて使用され、物理タスク [task] テーブルの論理クラスchange_requestから論理要素cab_delegateをクエリーします。

    実際の物理テーブルに作成されるフィールドの命名規則は、フィールドのタイプによって異なる場合があります。この例では、a_ref_2 は参照フィールドの値を保持するタスク [task] テーブルのエイリアスです。

    機能と使用法

    ストレージエイリアスには複数の目的があります。

    マッピング
    エイリアスは、論理要素 (階層別テーブル) または物理要素 (クラス別テーブル) をバックエンド データベースの実際の物理列にマップします。論理要素は、論理要素のmax_lengthよりも大きい物理列に表示できます。
    グロミング
    エイリアスを使用すると、複数の兄弟要素が階層モデルごとにテーブル内の 1 つの物理列を共有できます。
    ラベルマッピング
    エイリアスは、sys_documentation (ラベル) レコードをそれぞれの要素に関連付けることで、フォーム、レポート、リストビューでの可視化を高めます。

    制限事項とルール

    • 同じクラス内の 2 つの論理要素は、物理列を共有できません。たとえば、インシデント [incident] テーブルで作成された 2 つの文字列フィールドを、データベース内の同じ物理列にマッピングすることはできません。
    • 親要素とその子は物理列を共有できません。たとえば、インシデント [incident] テーブルで作成されたフィールドは、その物理列がタスク [task] テーブルのフィールドに既にマッピングされている場合には、その物理列にマッピングすることはできません。
    • 兄弟要素のみが物理列を共有できます。たとえば、変更要求 [change_request] テーブルの参照フィールドとインシデント [incident] テーブルの参照フィールドは、どちらも同じ物理列にマッピングできます。
    • タスク [task] テーブル (sys_class_nameは「task」) に直接作成されたフィールドは、glomed できません。