サブデータベースを指定する最終更新日: 2020年8月10日

メインデータベースとサブデータベース

Wagbyではモデル単位でどのデータベースを利用するかを指定することができます。一つ目を「メインデータベース」と呼び、二つ目以降を「サブデータベース」と呼びます。

サブデータベースの用途は、既存システムのマスタデータを直接、Wagbyアプリケーションが利用することです。

両者の違いは次のとおりです。

メインデータベース(標準) サブデータベース
設定できる数 1つだけです。 オプションという位置付けです。5つまでのサブデータベースを指定できます。
機能 読み込みと書き込みができます。書き込みはトランザクション制御にも対応しています。 読み込みと書き込みができます。(*1)
メインデータベースとサブデータベースの両方の更新を一つのトランザクションとすることはできません。それぞれの書き込み処理は独立して行われます。(*2)
*1 R8.1.0よりサブデータベースの書き込みが行えるようになりました。それ以前の Wagby は読み込みのみとなります。
*2 トランザクション境界はデータベースごととなります。そのため、例えばメインデータベースとサブデータベースの両方を更新したいが、サブデータベースの更新が失敗したらメインデータベースの更新も失敗させ、このトランザクション全体をロールバックするという指定を行うことはできません。どちらか一方が成功すれば更新は完了となります。

サブデータベース利用時の制約

サブデータベースを使うモデルには次の制約があります。

  • テーブルの作成は行えない。(既存テーブルの再利用を想定している)
  • 全文検索機能は利用できない。
  • ワークフローは利用できない。
  • メインモデル、サブモデルは利用できない。(メインモデルとサブモデルで別々のデータベースを指定することはない。)
  • 登録、更新、削除などの更新系ボタンは標準で無効になる。(登録や更新処理を行う場合は、手動でこれを再設定すること。)
  • システムモデル(juserなど)をサブデータベースに指定することはできない。
  • 内蔵データベース(HSQLDB)は利用できない。
  • 参照先モデルがサブデータベースに存在する場合、"参照連動項目を参照先モデルに保存する"機能の利用は行わないようにすること。これはトランザクション境界が分かれているため。
  • 参照先モデルがサブデータベースに存在する場合、参照連動項目(DB保存なし)を検索項目として指定することはできない。データベースをまたがる検索になるため。
  • サブデータベースのテーブルにスキーマを含めることはできない。
  • サブデータベースへ登録処理を行う場合、順序を利用することはできない。そのため順序の利用は無効にする必要がある。
  • 親子モデルのいずれも(同じ)サブデータベースを利用しているとき、その親子モデルの同時更新はトランザクション対象にならない。つまり親と子はそれぞれ独立にコミットされる。 R8.4.2で改善されました。

キャッシュの扱い

サブデータベースを利用しているモデルのキャッシュは標準では有効となっていますが、利用状況に応じてキャッシュを無効にすることを検討して下さい。

キャッシュを有効としても良いケース
サブデータベースで参照しているテーブルのデータが別システムから変更されない、または、データの変更頻度が少ない場合。 データの変更頻度に応じてジョブを使ってキャッシュをクリアすることで、(リアルタイムではありませんが)最新の情報を利用できます。
キャッシュを無効とした方が良いケース
リアルタイムでの最新データの表示が必要なモデルではキャッシュは無効として下さい。

定義方法

データベースの設定

「環境>データベース」から、メインデータベースとサブデータベースの指定を行います。

図1 メインデータベースの設定(標準)

サブデータベースは最大5つまで指定できます。

図2 サブデータベースの設定。

モデルの設定

モデル毎に、どのデータベースを利用するかを指定できます。設定したサブデータベースのみ選択肢に用意されます。

空白時(標準)はメインデータベースを利用します。

図3 データベースを指定する

R8.4.0/R8.4.1の場合

R8.4.0/R8.4.1のみ必要な設定があります。(R8.3.xまで、ならびにR8.4.2以降はこの設定は不要です。)[詳細...]

サブデータベースの設定を無効にする

サブデータベースの設定を無効にするには、環境タブのサブデータベース設定を消去することに加え、サブデータベースを利用しているモデル側の設定も解除してください。

スクリプトを使ってサブデータベースで順序を利用する

サブデータベースにデータを登録する場合、Wagbyが標準で提供する「順序」の設定は無効にする必要があります。(Wagbyが提供する「順序」はメインデータベースのみを対象にしています。)

なお、スクリプトを使ってサブデータベースの登録時に順序を使うことはできます。