テーブル拡張とクラス
1 つまたは複数の子テーブルがフィールドとレコードを親テーブルと共有できるようにします。管理者とアプリケーション開発者は、テーブルの作成中にのみテーブルを拡張できます。
| 元のテーブル | 元のテーブルから拡張した関連テーブル |
|---|---|
| タスク [task] |
|
| 構成アイテム [cmdb_ci] |
|
別のテーブルを拡張するテーブルは「子クラス」と呼ばれ、これが拡張するテーブルが「親クラス」になります。テーブルは同時に親クラスと子クラスになり、他のテーブルを拡張したり、他のテーブルに拡張を提供したりすることができます。別のテーブルの拡張ではない親クラスは、「基底クラス」と呼ばれます。
- スキーママップ
- システム辞書
- テーブルモジュール
- 新しいテーブルを拡張テーブルにリンクします。
- 新しいテーブルにシステムフィールドを作成します。
- 親クラスと子クラスを格納するデータベーステーブルを 1 つまたは複数作成します。システムが作成するテーブルの数は、テーブルの作成時に選択した拡張モデルによって異なります。
拡張モデル
- クラス別テーブル
- 階層別テーブル
- パーティション別テーブル
- 作成されたデータベーステーブルの数
- 親クラスからのフィールドの派生
- 子クラスからのレコードの複製
クラス別テーブル
- 作成されたテーブル
- 親クラスと子クラスごとに個別のデータベーステーブルを作成します。
- 親クラスから派生したフィールド
- 子クラスは、親クラスからフィールドを派生させます。
- 親クラス用に作成された辞書レコード
- 親クラスには、コレクションと、そこから派生可能な各フィールドの辞書レコードがあります。たとえば、契約 [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] テーブルなど、その子クラスのすべてのレコードが含まれています。