4.3.12 データモデルの設計

データモデルの設計では、データモデルの定義を行います。

(表)データモデル設計項目と概要

項目 定義手段 設計のポイント
Datamodel YAMLファイル 目的によりデータモデルの種類や構成を検討します。
また、管理しておくデータレコードを整理し、テーブル、カラムなどのデータモデルを設計します。

データモデルでは、1つのデータモデルの枠組みの中で複数のテーブルをまとめて管理できます。
データモデルで定義したテーブルは、UI(UIバージョン1.1)のYAML定義とひもづけることにより、ユーザーが作成するアプリケーションやワークフローの各ステップから参照できます。
UIのYAML定義の設定は以下で行います。

  • dataSourceラベル
  • Formコンポーネントのfieldsのsourceラベル、またはTableコンポーネントのcolumnsのsourceラベル

UIのYAML定義の詳細は「UI(UIバージョン1.1)」を参照してください。
また、ユーザーが定義したデータモデルと登録されたレコードは、データモデルアプリケーションから確認できます。詳細は「データモデルの管理」を参照してください。


(1)データモデルの種類

データモデルには以下の3種類があります。DatamodelのYAMLファイルで設定できます。DatamodelのYAML定義の詳細は「Datamodel」を参照してください。

  • カスタムテーブル:単一のテーブル
    tablesラベルで定義します。
  • カスタムビュー:複数のカスタムテーブルを結合した閲覧のみ可能なテーブル
    viewsラベルで定義します。
  • Schemaデータモデル:JSON Schemaファイルで設定
    schemasラベルで定義します。

カスタムビューは、単一のカスタムテーブル、または結合した複数のカスタムテーブルにより構成されます。カスタムビューには以下の特徴があります。

  • 閲覧のみ可能
  • カスタムテーブルと同様に任意のカラムで表示できる(columnsラベル)
  • 単一のカスタムテーブルをひもづけることができる(fromラベル)
  • 複数のカスタムテーブルを結合し、お互いの配置を選択できる(fromラベル、joinラベル)
  • 結合するための条件を設定できる(conditionsラベル)
  • 結合したカスタムテーブルの表示条件を設定できる(whereラベル)

定義例は「カスタムビューの定義例」を参照してください。

メモメモ
  • カスタムビューはカスタムテーブルと結合できません。
  • デフォルトで用意されたuserテーブルとgroupテーブルをカスタムテーブルに結合できます。
    例えば、カスタムテーブルにユーザーのIDしか表示されておらず、どのようなユーザーなのか一目でわからない場合などに使用します。その場合、カスタムテーブルのユーザーのIDとデフォルトで用意されたuserテーブルを結合し、ユーザー名や会社名などをカスタムテーブルに表示させることができます。
    userテーブルについては「(表)userテーブル」を、groupテーブルについては「(表)groupテーブル」を参照してください。


【データモデルのレコードへのACL適用】

カスタムテーブルおよびカスタムビューのレコードに対してACLを適用できます。
ACLの定義は、GraphQL API(/api/v1/graphql)のObject認可のACLのYAMLファイルとStatementのYAMLファイルを定義することで行います。
StatementのYAMLファイルでGraphQLのObject名またはMutation Field名を指定する値(resources.graphqlQuery.value)に、ACLを適用するデータモデルの内部名が一致するように定義します。
これにより、GraphQLがレコードを操作する際の条件(resources.conditions)に合致するレコードに効果(resources.effect)が適用されます。
ここで()内の記載は、StatementのYAMLファイルのラベル名を表します。ACL、StatementのYAML定義の詳細は「ACL、Statement」を参照してください。また、GraphQL APIの詳細は「JP1 Cloud Service 運用統合 APIリファレンス」の「APIリファレンス詳細>標準提供API」を参照してください。

カスタムビューのデータに対しては、以下の順番でACLが適用されます。適用の過程でレコードに対して「allow」と「deny」と相反する効果が適用される場合は、明示的拒否になり「deny」が適用されます。

  1. 結合前のカスタムテーブルのレコードを操作するGraphQL APIに適合したACLが、結合前のレコードに適用される
  2. カスタムビュー自体のレコードを操作するGraphQL APIに適合したACLが、結合後のレコードに適用される

【データモデルのレコードの顧客分離】

データモデルのレコードには、レコードを作成したユーザーの顧客の設定が反映されます。また、カスタムテーブルについては、データモデルアプリケーションの[レコード詳細]画面から顧客の設定を変更できます。
カスタムビューのレコードには、カスタムビューに結合しているカスタムテーブルのレコードに設定されている顧客の中で、共通の顧客が設定されます。


(2)データモデルの管理

ユーザーが作成したデータモデルのうち、カスタムテーブルとカスタムビューは、データモデルアプリケーションで管理できます。
データモデルアプリケーションでは、以下が実施できます。

  • カスタムデータモデルの一覧の参照
  • カスタムテーブルのレコードの参照、追加、更新、削除
  • カスタムビューのレコードの参照

カスタムビューは参照のみ可能で、レコードの変更はできません。
また、ワークフローにひもづくデータモデルの変更はできません。
データモデルアプリケーションの操作の詳細については「カスタムデータモデル」を参照してください。
データモデルの定義を行うDatamodelのYAMLファイルの詳細は「Datamodel」を参照してください。

データモデルアプリケーションを利用するには、Primitiveロール「custom_data_model_admin」が付与されている必要があります。

注意事項注意事項

データモデルに対するグループ、顧客によるアクセス制御はできません。Primitiveロール「custom_data_model_admin」が付与されたユーザーは、表示可能なデータモデルすべてにアクセスできます。


【カスタムテーブルのレコードのインポート】

Ops Iの導入時などにカスタムテーブルのレコードが記載されたCSVファイルからレコードを一括でインポートし、新規作成、更新ができます。インポートするには、事前にImportのYAMLファイルを登録する必要があります。登録されたImportのYAMLファイルの設定で、アップロードするCSVファイルとDatamodelのYAMLファイルで設定されたカスタムテーブルのカラムをマッピングし、バリデーションチェックします。画面の詳細は「カスタムテーブルのレコードのインポート」を、ImportのYAMLファイルの詳細は「Import」を参照してください。


(3)ワークフローにひもづくデータモデル

データモデルでは、1つのデータモデルの枠組みの中で複数のテーブルをまとめて管理できます。そのためには複数の申請で共有するデータ項目をYAMLファイルで定義する必要があります。申請対応に必要な情報を各カラムで定義し、それをテーブルとして管理します。

(図)データモデルの概念図

(図)データモデルの概念図 (図)データモデルの概念図


VM貸出申請業務でVM貸出台帳をデータモデル設計する場合、VM貸出申請のカタログアイテムを作成し、申請に必要な情報を洗い出し、VM貸出台帳としてデータモデルのYAML定義をします。申請に必要な情報としては、申請の通し番号やVMを利用するシステム名、また、貸出したVM名などがあります。
以下に情報とカラムの一覧を例として示します。

(表)VM貸出台帳記載カラム一覧の例

テーブル カラム 説明 データ形式 デフォルト値 NULL入力 enumリスト
VM貸出台帳 申請番号 申請の通し番号 文字列
varchar(32)
- -
システム名 VMを利用するシステム名 リスト
enum
- 受注管理システム
顧客管理システム
生産管理システム
VM名 貸出したVM名 文字列
varchar(32)
- -
OS種別 WindowsまたはLinuxを選択 リスト
enum
- Windows
Linux
CPU VMで利用するvCPUコア数 数値
integer
- -
メモリ VMで利用するメモリ容量 数値
integer
- -
ストレージ VMで利用するストレージ容量 数値
integer
- -
利用申請者 VM貸出の申請者名 文字列
varchar(256)
- -
利用開始日 VMの利用開始日 日付
date
- -
申し送り事項 申し送り事項 文字列
text
- -
チェックリスト(ファイル) 記入済みのチェックリスト ファイル
document
- -
チェックリスト(URL) 記入済みのチェックリストのURL 文字列
text
- -

上記一覧で定義された内容が画面上どのように表現されるかについては、「UI設計」のVM貸出の申請を例に説明している箇所を参照してください。