6.2.2 クラスの追加

クラスを追加する場合,追加するクラスの定義を記述した定義情報ファイルを作成します。そして,作成した定義情報ファイルを指定してメタ情報の追加コマンド(EDMAddMeta)で,メタ情報へのクラスの定義の追加,および追加するクラスに対応する表を作成するデータベース定義文の生成を実行します。

<この項の構成>
(1) クラスの追加手順
(2) メタ情報の追加コマンド(EDMAddMeta)が出力する定義系SQL

(1) クラスの追加手順

クラスを追加する手順を次に示します。

  1. 定義情報ファイルを作成します。
    追加するクラスの定義を記述した定義情報ファイルを作成します。作成した定義情報ファイルは,メタ情報の追加コマンド(EDMAddMeta)の-fオプションに指定します。
    定義情報ファイルの作成については,「4.7 定義情報ファイル」を参照してください。
  2. インデクス情報ファイルを作成します。
    追加するクラスのプロパティにインデクスを定義する場合,インデクス情報ファイルを作成します。メタ情報の追加コマンド(EDMAddMeta)の-iオプションに,作成したインデクス情報ファイル名を指定して実行することで,インデクス情報ファイルの内容を基に,データベース定義文に定義系SQL「CREATE INDEX」が出力されます。なお,データベース定義文は,-oオプションで指定するデータベース定義文格納ファイルに出力されます。
    インデクス情報ファイルの作成については,「4.9 インデクス情報ファイル」を参照してください。
  3. RDエリア定義情報ファイルを作成します。
    データベース定義文中のRDエリア名称を,ユーザが指定したRDエリア名で出力させるためには,RDエリア定義情報ファイルを作成します。
    メタ情報の追加コマンド(EDMAddMeta)の-rオプションに,作成したRDエリア定義情報ファイル名を指定することで,RDエリア定義情報ファイルの内容がデータベース定義文のRDエリア名に反映されます。なお,データベース定義文は,-oオプションで指定するデータベース定義文格納ファイルに出力されます。
    RDエリア定義情報ファイルの作成については,「4.8 RDエリア定義情報ファイル」を参照してください。
  4. メタ情報のバックアップを取得します。
    メタ情報を更新する前に,メタ情報ファイルの出力コマンド(EDMPrintMeta)でメタ情報のバックアップを取得します。
    メタ情報ファイルの出力コマンド(EDMPrintMeta)には,-Fオプションおよび-lオプションを指定します。-lオプションには,メタ情報のバックアップを出力するディレクトリ名を指定して,データベースからメタ情報を出力します。
  5. データベースのバックアップを取得します。
    クラスに対応する表を作成するので,データベースのバックアップを取得します。バックアップを取得する必要のあるRDエリアについては,マニュアル「HiRDB システム運用ガイド」の,障害発生に備えた運用に関する説明での,定義系SQL「CREATE TABLE」の実行についての記述を参照してください。
  6. メタ情報の追加コマンド(EDMAddMeta)を実行します。
    手順1.~手順3.で作成した定義情報ファイル,インデクス情報ファイル,およびRDエリア定義情報ファイルを指定して,メタ情報の追加コマンド(EDMAddMeta)を実行して,クラスの定義をメタ情報へ追加します。
    メタ情報の追加コマンド(EDMAddMeta)の-oオプションで,追加するクラスに対応する表を作成する定義系SQL「CREATE TABLE」を格納するデータベース定義文格納ファイルを指定します。
    次に,出力されたデータベース定義文格納ファイルの修正について説明します。
    出力されたデータベース定義文格納ファイルの修正
    メタ情報の追加コマンド(EDMAddMeta)は,データベース定義文格納ファイルへ定義系SQL「CREATE TABLE」のすべてのオプションを出力しません。このため,必要なオプションは,データベース定義文格納ファイルをテキストエディタなどで修正して追加してください。メタ情報の追加コマンド(EDMAddMeta)が出力する定義系SQLについては,「(2) メタ情報の追加コマンド(EDMAddMeta)が出力する定義系SQL」を参照してください。
    次に,基本単位がVariableArray型のプロパティを定義した場合,データベース定義文格納ファイルに出力されるデータベース定義文について説明します。
    基本単位がVariableArray型のプロパティの定義
    メタ情報の追加コマンド(EDMAddMeta)は,追加するクラスのプロパティとして,次に示す条件を満たすプロパティを定義している場合,基本単位がVariableArray型のプロパティの要素を格納するために定義するedmClass_Structクラスのサブクラスに対応する表を作成する定義系SQL「CREATE TABLE」を出力します。
    ・基本単位がVariableArray型のプロパティが存在する。
    ・基本単位がVariableArray型のプロパティの要素を,クラスに対応する表とは別の表に格納するように指定する。
    ・基本単位がVariableArray型のプロパティは,新規に追加するプロパティの定義である。
    ただし,基本単位がVariableArray型のプロパティの要素を格納するedmClass_Structクラスのサブクラスの追加は,クラスの追加(ここで説明している作業)の前に行ってください。
    基本単位がVariableArray型のプロパティを定義するクラスの定義を行う場合にメタ情報の追加コマンド(EDMAddMeta)が出力するデータベース定義文については,「6.2.7 メタ情報の追加・削除コマンドの動作」を参照してください。
  7. データベース定義ユティリティを実行します。
    手順6.で作成したデータベース定義文を入力ファイルとして指定し,HiRDBのデータベース定義ユティリティ(pddef)を実行して定義するクラスに対応する表を追加します。データベース定義ユティリティ(pddef)は,DocumentSpace構成定義ファイルのPdUserエントリに指定するユーザが実行してください。
    HiRDBのデータベース定義ユティリティ(pddef)については,マニュアル「HiRDB コマンドリファレンス」を参照してください。
  8. クラス定義情報ファイルを作成します。
    追加したクラスの定義を反映したクラス定義情報ファイルを作成するため,クラス定義情報ファイルの作成コマンド(EDMCrtSimMeta)を実行します。作成したクラス定義情報ファイルをDocumentBroker オブジェクト操作ツールの動作環境に配置します。
    クラス定義情報ファイルの作成については,「4.10 クラス定義情報ファイル」を参照してください。
  9. 表へオブジェクトを格納します。
    追加したクラスのオブジェクトを作成するには,次の方法があります。
    • DocumentBroker Object Loaderを使用したオブジェクトの登録
      大量のオブジェクトを作成するにはDocumentBroker Object Loaderを使用します。
      オブジェクトを登録するためには,DocumentBroker Object Loaderの実行に必要な入力データを作成する必要があります。入力データは,DocumentBroker Object Loaderが提供する入力ファイル生成ユティリティ(EDMCrtLDFコマンド,EDMCrtLCFコマンド)で作成してください。入力ファイル生成ユティリティについては,マニュアル「DocumentBroker Object Loader Version 3」を参照してください。
    • UAPによるオブジェクトの作成
      UAPによるオブジェクトの作成方法については,マニュアル「DocumentBroker Version 3 クラスライブラリ C++ 解説」を参照してください。
    • DocumentBroker オブジェクト操作ツールによるオブジェクトの作成
      DocumentBroker オブジェクト操作ツールによるオブジェクトの作成方法については,マニュアル「DocumentBroker Version 3 オブジェクト操作ツール」を参照してください。

(2) メタ情報の追加コマンド(EDMAddMeta)が出力する定義系SQL

メタ情報の追加コマンド(EDMAddMeta)が出力する,HiRDBのデータベース定義ユティリティ(pddef)の入力となる定義系SQLを示します。下線が付いている個所は,メタ情報の追加コマンド(EDMAddMeta)が出力しない定義系SQLを示します。

(a) メタ情報の追加コマンド(EDMAddMeta)が出力する定義系SQL「CREATE TABLE」

CREATE FIX TABLE 〔認可識別子.表識別子(表要素〔,表要素〕…)
   {IN{表格納用RDエリア名
       (表格納用RDエリア名)
       ((表格納用RDエリア名)格納条件,〕…
       (表格納用RDエリア名)格納条件)}
      PARTITIONED BY 列名
       IN((表格納用RDエリア名)境界値,〕…
          (表格納用RDエリア名)境界値,
          (表格納用RDエリア名))
      |〔FIX HASH ハッシュ関数名 BY 列名 ,列名〕…
        IN(表格納用RDエリア名,表格納用RDエリア名,)}〕
   表オプション
   表制約定義
表要素::={列定義表制約定義}
  列定義::=列名 データ型〔ARRAY [最大要素数]〕
     〔{列データ抑制指定〔列回復制約〕
       {IN {LOB列格納用RDエリア名
          (LOB列格納用RDエリア名)
          ((LOB列格納用RDエリア名)
          ,(LOB列格納用RDエリア名))}
         |抽象データ型定義内LOB格納用RDエリア指定}}〕
        〔プラグイン指定〕
        列制約…
  列データ抑制指定::=SUPPRESS
  列回復制約::=〔RECOVERY〔{ALL|PARTIAL|NO}〕〕
列制約::={非NULL値制約指定
      単一列一意性制約定義インデクスオプション}
  非NULL値制約指定::={NULLNOT NULLWITH DEFAULT〕〕
          |〔〔NOT NULL WITH DEFAULT}
  単一列一意性制約定義::=
  UNIQUE CLUSTER KEY{ASCDESC}
       IN{インデクス格納用RDエリア名
        (インデクス格納用RDエリア名)
        ((インデクス格納用RDエリア名)
        |〔,(インデクス格納用RDエリア名)〕…)}
  インデクスオプション::={PCTFREE=未使用領域の比率
             UNBALANCED SPLIT}
表制約定義::=複数列一意制約定義
     インデクスオプションインデクスオプション〕〕
 複数列一意性制約定義::=
      UNIQUE CLUSTER KEY(列名{ASCDESC}
      ,列名{ASCDESC}〕…)
      IN{インデクス格納用RDエリア名
        (インデクス格納用RDエリア名)
        ((インデクス格納用RDエリア名)
          ,(インデクス格納用RDエリア名)〕…)}
格納条件::=列名{=<>^=!=<>=>>=}
      {定数|(定数〔,定数〕…)}
 ハッシュ関数名::={HASH1HASH2HASH3HASH4HASH5HASH6}
表オプション::=
 PCTFREE={未使用領域の比率
     (未使用領域の比率,
        セグメント内の空きページ比率)}
 LOCK{ROWPAGE}
 SUPPRESSDECIMAL〕〕
 WITHOUT ROLLBACK
抽象データ型定義内LOB格納用RDエリア指定::=
ALLOCATE(属性名..属性名〕…
  IN {LOB属性格納用RDエリア名
    (LOB属性格納用RDエリア名)
    ((LOB属性格納用RDエリア名)
      ,(LOB属性格納用RDエリア名))}
   ,属性名..属性名〕…
         IN {LOB属性格納用RDエリア名
           (LOB属性格納用RDエリア名)
           ((LOB属性格納用RDエリア名)
              ,(LOB属性格納用RDエリア名))}〕…)
プラグイン指定::=PLUGIN プラグインオプション

(b) メタ情報の追加コマンド(EDMAddMeta)が出力する定義系SQL「CREATE INDEX 形式1」

CREATE 〔UNIQUE〕 INDEX 認可識別子.インデクス識別子
 ON 認可識別子.表識別子(列名〔{ASC|DESC}〕
          〔,列名〔{ASC|DESC}〕〕…)
〔IN{RDエリア名
    (RDエリア名)
    ((RDエリア名),(RDエリア名)〕…)}〕
〔インデクスオプション〕
インデクスオプション::={PCTFREE=未使用領域の比率
           UNBALANCED SPLIT
           EMPTY
           |除外値指定}
除外値指定::=EXCEPT VALUES (NULL〔,NULL〕…)

(c) メタ情報の追加コマンド(EDMAddMeta)が出力する定義系SQL「CREATE INDEX 形式2」

CREATE INDEX 認可識別子.インデクス識別子
  USING TYPE 認可識別子.インデクス型識別子
  ON 認可識別子.表識別子(列名)
  IN{RDエリア名
    (RDエリア名)
    ((RDエリア名),(RDエリア名)〕…)}
 〔PLUGIN プラグインオプション〕