例1
注文処理の際、顧客の詳細情報を検索、表示する例です。
- まず、注文テーブルから顧客テーブルへのアクセス経路を定義します。最大レコード数は1とし、注文テーブルの「顧客コード」列をキーとします。
- その後事前結合列を追加し、LOOKUP演算により、顧客の詳細情報を検索するよう設定します。顧客テーブルの列名をそのまま事前結合列名として使ってもかまいません。また、必要に応じ、「保管数」属性を設定してください。
注文テーブルに対する入出力が発生すると、顧客の詳細情報を表す事前結合列にも値が入るので、RDMLを使って普通の仮想列と同じようにアクセスできます。顧客テーブルからの読み込み処理を明示的に記述する必要はありません。
頻繁にテーブル・アクセスが発生する場合、その内容が変化しないのであれば、「保管数」属性を適切に設定することにより、入出力負荷を軽減できます。
例2
「商品配送管理」テーブルに「配送元倉庫コード」と「配送先倉庫コード」の各列があって、倉庫に関する詳細情報を、事前結合列の機能により取得する例です。
- 例1と同様に、配送管理テーブルから倉庫テーブルへの2つのアクセス経路を定義します。ひとつは「配送元」倉庫のコード列、もう一方は「配送先」倉庫のコード列をキーとするアクセス経路です。
- 「配送元」については、例1と同様、アクセス元の列名をそのまま事前結合列名として使ってもかまいません。しかしこの場合、「配送先」についても同じようにして列名を決めると重複してしまうので、別の列名を指定する必要があります。
例3
いくつかの明細行の金額を検索し、合計値を求めて表示する例です。
- 注文の頭書きテーブルから明細行テーブルへのアクセス経路を定義します。最大レコード数は、1回の注文で扱える明細行の最大数になります。
- 事前結合列の定義に使うアクセス経路を選択してください。
- 次に、明細行テーブルのうち、商品金額を表す列を選択します。TOTAL演算を指定して、事前結合列を定義してください。同様にして、商品数を表す事前結合列も定義します。
するとRDMLエディターで、合計金額および商品数を表す列を使って処理を記述できるようになります。明細行を参照する処理を明示的に記述する必要はありません。
例4
注文の明細行ごとに金額を計算する例で、事前結合列と仮想列を使います。
- 明細行テーブルから製品テーブルに1対1(最大レコード数が1)のアクセス経路を定義し、製品コードをキーとして単価を求めるよう設定します。必要ならば「保管数」属性を設定し、さらに、「結合列設定」属性も設定して、金額(仮想列)よりも前に単価が求まるようにします。
- 金額を求めるために、数学演算を行う拡張定義型の仮想列を定義します。列値は、テーブルからデータを入力した後で求めるよう設定します。金額は、製品の個数(明細行テーブルから取得)と単価(製品テーブルから事前結合列の形で取得)を掛け合わせて計算することとします。
製品の単価(事前結合列)と金額(仮想列)を、RDMLのSELECTコマンドに埋め込んで定義することにより、それ以外のRDMLコードを記述することなく計算できます。
例5
人事管理システムのアプリケーション・データベースには、部門テーブル、部課テーブルを操作します。
部門テーブルの「説明」列と同じものを、「部門の説明」列として部課テーブル内にも設けてみましょう。さらに、部門テーブルに「部課数」列を設け、その部門に属する部課の数を求めることにします。このような目的には事前結合列が向いています。
まず、次の2つの仮想列をリポジトリに定義します。
- 部門の説明
- 部課数
部課テーブルから部門テーブルへのアクセス経路を設定し、これをもとに、部課テーブルに事前結合列「部門の説明」を追加します。その値は、部門テーブルの「説明」列を検索して求めることになります。「部門の説明」は仮想列なので、実際に部課テーブル中にデータが格納されているわけではありません。あるファンクション内でこの列を参照しようとすると、自動的に部門テーブルにアクセスして値を求めます。その際、アクセス経路の定義を参照します。
次に、部門テーブルから部課テーブルへのアクセス経路を設定し、これをもとに、部門テーブルに「部課数」列を追加します。その値は、部課テーブルの該当するレコードを数えて求めることになります。「部課数」は仮想列なので、実際に個数データが格納されているわけではありません。あるファンクション内でこの列を参照しようとすると、自動的に部課テーブルにアクセスして値を求めます。
次のトピックも参照してください。