6.3 Datamodel

以下にDatamodel定義と定義例を示します。データモデルの詳細については「ワークフロー」と「ワークフローの設計」を参照してください。

(表)Datamodel定義

ラベル デフォルト値 必須 説明
apiVersion: 1.0 Yes APIバージョン
kind: Yes データモデルの際はdatamodelを指定する
type: No データモデルの際はresourceのみ指定可能
name: Yes Datamodel定義の内部名。本YAMLファイルのディレクトリ名を指定
label: Yes YAMLファイルの表示名
includes: No このYAMLファイルで利用する関連YAMLファイルを記載
- kind: Yes 読み込むYAMLファイルの種類
  name: Yes 読み込むYAMLファイルの内部名
description: No 詳細説明
tables: Yes テーブルの詳細を設定。
- name: Yes テーブルの内部名
半角のa-z0-9、"_"のみ使用可能。先頭文字は半角のa-zのみ指定可能。
  label: Yes テーブルの表示名
  inherits: No 継承設定
table: No 本テーブルが継承するカスタムテーブル名
“includes”に含まれている必要がある。
  description: No 詳細説明
  documents: No テーブルに関連するドキュメント
- document: No テーブルに関連するドキュメントを指定。
  columns: Yes カラムについて設定。
- name: Yes カラムの内部名
半角のa-z0-9、"_"のみ使用可能。先頭文字は半角のa-zのみ指定可能。
  label: Yes カラムの表示名
  description: No カラムの詳細説明
  type: Yes カラムのタイプを指定。
指定できるタイプは「(表)カラムのタイプ」を参照。
  not-null: false No この値がtrueの場合、null以外の制約が本カラムに追加される。
  primary: false No この値がtrueの場合、本カラムはプライマリーキーとして扱う。
  foreign: false No この値がtrueの場合、本カラムは外部キーとして扱う。
  ref: No 指定したテーブルのカラム情報を参照するときに利用。foreignがtrueの場合はテーブル制約、falseの場合はカラム制約となる。この値は、次のようにドット表記形式で指定する必要がある。
<参照されるテーブル名>.<列名>
例)mytable.mycolumn
参照されるテーブルは、“includes”で指定されたドキュメントに含まれている必要がある。
  enum: No タイプが“enum”の時の選択肢を定義
- name: No 選択肢の内部名
半角のa-z0-9、"_"のみ使用可能。先頭文字は半角のa-zのみ指定可能。使用できる文字数の最大は63文字。
  label: No 選択肢の表示名
  default: No 本カラムのデフォルト値
  index: false No この値がtrueの場合、本カラムのインデックスが生成される。
  document: No テーブルに関連するドキュメント
カラムのタイプに”document”を選択した場合に指定。
コレクション型のドキュメントを指定する必要性がある。
kind: Yes ドキュメントの”kind”を設定。
name: Yes ドキュメントの”name”を設定。
  generate: No カラムの値を自動的に入力する。以下のものが設定可能。
”uuid”
”uuid”が指定された場合,自動でUUIDを作成。
  ref-sys: No Ops Iで用意されたテーブル(user,group,role)のカラムを参照する。
ref-sysに指定するカラムはforeign: trueのカラムを指定してしないでください。foreign:trueカラムを指定すると、ドキュメントとして登録されません。
<referred system table name> や <referred system table name>.<column name>のようにレコードそのものか特定のカラムだけを指定する。

※Datamodel定義で指定するテーブルの内部名は、システムを通して一意である必要があります。

refに指定するカラムはprimary: trueのカラムを指定してください。primary: trueではないカラムを指定すると、ドキュメントとして登録されません。

指定できるカラムのタイプは以下です。

(表)カラムのタイプ

カラムのタイプ
integer※1 numeric varchar※2 text timestamp※5 date※5 time boolean
enum inet※3 document※4 decimal uuid - - -

※1 -2,147,483,648~+2,147,483,647の数字を含む基本データ型で、数字に小数や指数を含むことはできません。
※2 デフォルトの文字列の最大値は40文字です。
※3 IPv6形式は未サポートです。
※4 Ops I独自のタイプ。Git上に保存したドキュメントを選択でき、実データとして保存パスが登録されます。
※5 timestampとdateのタイプに入力可能な日付は1900年01月01日 から 2099年12月31日 です。

テーブルやカラムのname属性の値には設定できる文字数に上限があります。
また、上限値はそれぞれ条件により異なります。
以下を参照し、条件に該当する制限を全て満たすように定義してください。

(表)テーブルおよびカラムのname属性の文字数制限

項番 条件 制限
1 常に テーブルのnameは最大45文字
2 常に カラムのnameは最大63文字
3 テーブルにforeign: true のカラムがある場合 該当テーブル名、該当カラム名前、参照先のテーブル名、参照先のカラム名の文字数の合計は最大53文字
4 テーブルにtype: enumのカラムがある場合 該当テーブル名、該当カラム名の文字数の合計は最大60文字
5 テーブルにtype: enumのカラムがある場合 該当enum名の選択肢のnameの文字数は最大63文字

Ops Iではデフォルトで以下のカラムが用意されています。

(表)デフォルトで用意されているカラム

カラム タイプ 説明
id uuid グローバルユニークID
created_on timestamp レコードが作成された日時
updated_on timestamp レコードが更新された日時
created_by varchar (256) レコードを作成したユーザー名
updated_by varchar (256) レコードを更新したユーザー名
approved boolean 承認したかどうかのフラグ
domain varchar (256) ドメイン
group varchar (256) 所属しているグループ

また、以下のテーブルがデフォルトで用意されています。

(表)userテーブル

カラム タイプ 説明
id varchar (36) グローバルユニークなID
username varchar (255) ユーザー名
first_name varchar (255) ファーストネーム
last_name varchar (255) ラストネーム
groups varchar ユーザーが所属するグループ名。JSON形式の配列で保存。
例) [ ”System”, ”Admin” ]
roles varchar ユーザーが保持するロール名。JSON形式の配列で保存。
例) [ ”Edit”, ”View” ]

(表)groupテーブル

カラム タイプ 説明
id varchar (36) グローバルユニークなID
name varchar (255) グループ名
users varchar グループに所属するユーザー名。JSON形式の配列で保存。
例) [ ”Jhon”, ”Ken” ]
roles varchar グループが保持するロール名。JSON形式の配列で保存。
例) [ ”Edit”, ”View” ]

(表)roleテーブル

カラム タイプ 説明
id varchar (36) グローバルユニークなID
name varchar (255) ロール名
users varchar このロールを持つユーザー名。JSON形式の配列で保存。
例) [ ”Jhon”, ”Ken” ]
groups varchar このロールを持つグループ名。JSON形式の配列で保存。
例) [ ”Edit”, ”View” ]

<定義例>

apiVersion: 1.0
kind: datamodel
type: resource
name: lend_vm_datamodel
label: lend_vm_datamodel
description: VM貸出台帳のデータモデルを定義

includes:
  - kind: attachment
    name: Evidence of VM creation

#カラムを定義 
tables:
  - name: lend_vm_table
    label: VM貸出台帳のテーブル
    columns: 
      - name: app_number
        label: 申請番号
        description: 申請の通し番号
        type: varchar(32)
        not-null: false
        primary: false
        foreign: false

      - name: sys_name
        label: システム名
        description: VMを利用するシステム名
        type: enum
        enum:
          - name: order_mgt_sys
            label: 受注管理システム
          - name: customer_mgt_sys
            label: 顧客管理システム
          - name: production_mgt_sys
            label: 生産管理システム
        not-null: false
        primary: false
        foreign: false
        
      - name: vm_name
        label: VM名
        description: 貸出したVM名
        type: varchar(32)
        not-null: false
        primary: false
        foreign: false
                
      - name: os_name
        label: OS種別
        description: WindowsまたはLinuxを選択
        type: enum
        enum:
          - name: Windows
            label: Windows
          - name: Linux
            label: Linux
        not-null: false
        primary: false
        foreign: false
        
      - name: cpu
        label: CPU
        description: VMで利用するvCPUコア数
        type: integer
        not-null: false
        primary: false
        foreign: false
        

(中省略)

                
      - name: start_date
        label: 利用開始日
        description: VMの利用開始日
        type: date   
        not-null: false
        primary: false
        foreign: false

      - name: applicant
        label: 利用申請者
        description: 利用申請者
        type: varchar(256)
        not-null: false
        primary: false
        foreign: false
        

(中省略)

        
      - name: notice
        label: お知らせ
        type: text
        not-null: false
        primary: false
        foreign: false
        default:
          <strong>システムメンテナンスのため、下記の時間帯にVM貸出サービスを停止します。<br>
          20XX年XX月XX日(水)9:00 ~ 12:00<br>
          ご不便をおかけいたしますが、よろしくお願いします。</strong>

似たセクションが続く箇所は(中省略)として省略しています。