テーブル拡張とクラス

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:6分
  • 1 つまたは複数の子テーブルがフィールドとレコードを親テーブルと共有できるようにします。アドミニストレーターとアプリケーション開発者は、テーブルの作成中にのみテーブルを拡張できます。

    アドミニストレーターとアプリケーション開発者は通常、テーブルを拡張して、情報を共有する一連の関連レコードを作成します。たとえば、ベースシステムでは、タスクテーブルと構成アイテムテーブルに複数の拡張があります。
    表 : 1. ベースシステムのサンプル拡張テーブル
    元のテーブル 元のテーブルから拡張した関連テーブル
    タスク [task]
    • インシデント [incident]
    • 問題 [problem]
    • 変更要求 [change_request]
    構成アイテム [cmdb_ci]
    • アプリケーション [cmdb_ci_appl]
    • コンピューター [cmdb_ci_computer]
    • データベース [cmdb_ci_database]

    別のテーブルを拡張するテーブルは「子クラス」と呼ばれ、これが拡張するテーブルが「親クラス」になります。テーブルは同時に親クラスと子クラスになり、他のテーブルを拡張したり、他のテーブルに拡張を提供したりすることができます。別のテーブルの拡張ではない親クラスは、「基底クラス」と呼ばれます。

    アドミニストレーターは、これらのツールを使用してクラス間の関係を確認できます。
    • スキーママップ
    • システム辞書
    • テーブルモジュール
    テーブルの拡張:
    • 新しいテーブルを拡張テーブルにリンクします。
    • 新しいテーブルにシステムフィールドを作成します。
    • 親クラスと子クラスを格納するデータベーステーブルを 1 つまたは複数作成します。システムが作成するテーブルの数は、テーブルの作成時に選択した拡張モデルによって異なります。

    拡張モデル

    Now Platform には次のような拡張モデルがあります。
    • クラス別テーブル
    • 階層別テーブル
    • パーティション別テーブル
    拡張モデルによってこれらの属性が決まります。
    • 作成されたデータベーステーブルの数
    • 親クラスからのフィールドの派生
    • 子クラスからのレコードの複製

    クラス別テーブル

    作成されたテーブル
    親クラスと子クラスごとに個別のデータベーステーブルを作成します。
    親クラスから派生したフィールド
    子クラスは、親クラスからフィールドを派生させます。
    親クラス用に作成された辞書レコード
    親クラスには、コレクションと、そこから派生可能な各フィールドの辞書レコードがあります。たとえば、契約 [ast_contract] テーブルには、テーブルとそのフィールドを定義する 59 件の辞書レコードがあります。
    子クラス用に作成された辞書レコード
    各子クラスには、そのクラスに固有のフィールドの辞書エントリのみがあります。
    複製されたレコード
    親クラスは、子クラスに格納されている各レコードを複製します。各子クラスには、クラスに固有のレコードのみが格納されます。複製されたレコードには、各テーブルに同じ Sys ID 値があります。子レコードに加えた変更は、親テーブル内の一致するレコードに複製されます。たとえば、契約 [ast_contract] テーブルは、リース [ast_lease] テーブルと保証 [ast_warranty] テーブルのレコードを複製します。

    階層別テーブル

    作成されたテーブル
    親クラスに対して 1 件のデータベーステーブルを作成します。親クラスと子クラスのレコードは、すべてここに格納されます。子クラスには個別のデータベーステーブルはありません。
    親クラスから派生したフィールド
    子クラスは、親クラスからフィールドを派生させます。たとえば、インシデントテーブルはタスクテーブルからフィールドを派生させます。
    親クラス用に作成された辞書レコード

    親クラスには、コレクションと、そこから派生可能な各フィールドの辞書レコードがあります。たとえば、タスクテーブルは、テーブルとそのフィールドを定義する 66 件の辞書レコードを含む親クラスです。

    親クラスの辞書エントリには、各レコードが属する子クラスを示す値を含む sys_class_name 列が含まれています。たとえば、インシデントレコードの sys_class_name 値は incident で、変更レコードの sys_class_name 値は change です。

    子クラス用に作成された辞書レコード
    各子クラスには、そのクラスに固有のフィールドの辞書エントリのみがあります。たとえば、インシデントテーブルには、タスクテーブルでまだ定義されていない 22 件の辞書レコードしかありません。
    複製されたレコード
    親クラスは「階層」に属するすべてのレコードを格納するため、レコードの複製は必要ありません。たとえば、タスクテーブルには、変更テーブル、インシデントテーブル、問題テーブルなど、その子クラスのすべてのレコードが含まれています。

    パーティション別テーブル

    作成されたテーブル
    親クラスに対して 1 件のデータベーステーブルを作成します。親クラスと子クラスのレコードは、すべてここに格納されます。子クラスには個別のデータベーステーブルはありません。データベーステーブルがストレージの上限に達すると、ストレージテーブル (「パーティション」) が動的に追加され、追加のレコードが格納されます。
    親クラスから派生したフィールド
    子クラスは、親クラスからフィールドを派生させません。代わりに、各子クラスにはフィールドの独自のリストがあります。たとえば、ベース構成アイテム [cmdb]、構成アイテム [cmdb_ci]、およびハードウェア [cmdb_ci_hardware] テーブルはすべて、独自のフィールド定義があります。
    親クラス用に作成された辞書レコード

    親クラスには、コレクションと、そこに関連する各フィールドの辞書レコードがあります。たとえば、ベース構成アイテム [cmdb] テーブルは、48 件の辞書レコードを持つ親クラスです。

    親クラスの辞書エントリに加えられた変更は、子クラスの辞書エントリに複製されます。たとえば、親クラスのベース構成アイテム [cmdb] テーブルの [名前] 列を変更すると、構成アイテム [cmdb_ci] テーブルやハードウェア [cmdb_ci_hardware] テーブルなどの子クラスの辞書エントリに複製されます。

    親クラスの辞書エントリには、各レコードが属する子クラスを示す値を含む sys_class_name 列と sys_class_path 列が含まれています。たとえば、ハードウェアレコードの sys_class_name 値は cmdb_ci_hardware で、コンピューターレコードの sys_class_name 値は cmdb_ci_computer です。

    データベーステーブルがストレージの上限に達すると、システムは親クラスの辞書エントリを更新し、sys_storage_alias と storage_table_name の列を含めます。これらのストレージ列の辞書エントリにより、アドミニストレーターは親クラスとそのストレージテーブルを単一の論理ユニットとして管理できます。

    子クラス用に作成された辞書レコード
    各子クラスには、コレクションと、それに関連する各フィールドの辞書レコードがあります。たとえば、ハードウェアテーブルには、親クラスの列を複製するレコードを含む 73 件の辞書レコードがあります。
    複製されたレコード
    親クラスは「階層」に属するすべてのレコードを格納するため、レコードの複製は必要ありません。たとえば、ベース構成アイテム [cmdb] テーブルには、アプリケーション [cmdb_ci_appl]、コンピューター [cmdb_ci_computer]、ハードウェア [cmdb_ci_hardware] テーブルなど、その子クラスのすべてのレコードが含まれています。