「結合リンク」方式は、Magic xpaの機能と併せて、RDBMS の結合機能を使用して複数のデータベーステーブルの読込を行ったり、結合を行ったりする時に使用します。この方式では、1 対多のリレーションの作成が可能です。この「結合リンク」は、エンドユーザがレコードを更新したり、Magic xpaにより再計算が実行されると「照会リンク」として機能します。
「結合リンク」によって、関連する全てのテーブルにおいてSQL 内部結合のクエリが作成されます。これに対して、通常のリンクコマンド(「照会リンク」)の場合は、次のようなデータ処理によってリンクを実現します。
リンクテーブルがある場合、メインソースから行が読み込まれるたびに、Magic xpaによりSELECT ステートメントがもう1つ追加されます。このSELECTステートメントによって、リンクテーブルの行が取り出されます。
メインソースの行はループしながら、取り出し(フェッチ)処理が行われます。よって、リンクが設定されている時には、メインソースの行が取り出されるたびに別のカーソル(SELECT ステートメント)がオープンされ、リンクテーブルの行が取り出されることになります。
メインソースが2つのテーブルとリンクされている場合、まず、メインソースのカーソルがオープンされ、その後、ループで次のような処理が繰り返し実行されます。
メインソースの行が取り出されます。
最初のリンクテーブルのカーソルが開かれ、行が取り出されます。
2番目のリンクテーブルのカーソルが開かれ、行が取り出されます。
通常のリンクコマンド(「照会リンク」)と、「結合リンク」は次の点が異なります。
「結合リンク」の場合、結合テーブルに行が存在しない時には、行の取り出しは行われません。
複数のテーブルを結合すると、単一のテーブルになります。したがって、テーブルのカーソルは1 つで、このカーソルを使用して行の取り出しが行われます。
通常のリンク処理は、「結合リンク」よりも効率が悪くなります。これは、リンクの場合、結合に比較して、Magic xpaとSQL サーバとの間の通信量とリクエストが増えるためです。
以上の点から、複数のテーブルを使用して帳票出力や照会表示を行いたい場合、次のようにすると効率が上がります。
複数のテーブルを結合し、ビューを使用して帳票出力や照会表示を実行します。
リンクテーブルはキャッシュに置くようにします。特に、リンクテーブルに格納されている行の数が少ない時や、リンクテーブルの行の取り出しで同じ行が返る頻度が高い場合、リンクテーブルをキャッシュに置きます。
「結合リンク」は「照会リンク」と次の点で異なります。
「照会リンク」では、リンクテーブルの各行に対して取り出しが試みられます。ここで指定された行が見つからない場合でも、その行に対応するメインソースの行が有効になります。
「結合リンク」では、内部結合のSELECTステートメントを使用してメインソースとジョインテーブルが処理されます。このため、制約定義が重要になります。
「結合リンク」を指定した場合、タスクでデータビューが作成される際、Magic xpaにより結合テーブルに関するJOIN 構文が生成されます。また、定数と一致条件が入ったWhere句もMagic xpaによって作成され、このWhere 句では、メインソースと結合テーブルのカラムの名前が指定されます。次に残りのデータビューが構築されます。
「結合リンク」でJOIN 構文が生成されると、「結合リンク」からは戻り値として常に「True」が返ります。その後、「結合リンク」が「照会リンク」として機能した場合(つまり、エンドユーザによるレコードの更新やMagic xpaによる再計算が実行された場合)、リンクの作成が試みられ、その結果、リンクレコードの項目の値がレコードのデータビューに表示されます。
「結合リンク」を使用する場合の一般的な規則
結合テーブルのインデックスセグメントを全て[データビュー]エディタ内に定義する必要があります。また、各インデックスセグメントには、それぞれ、[位置付]特性を定義しなければなりません。
結合テーブルでは、厳密な範囲の指定が必要です。このため、[位置付 最小]と[位置付 最大]は同じ値を指定しなければなりません。
結合テーブルに対する[位置付]特性には、次の要素が指定できます。
定数
タスクのメインソースのデータ項目
タスクに定義された別の結合テーブルのデータ項目
簡単な式
「結合リンク」で使用されたキャッシュは、次の場合にクリアされます。
インデックスが変更された場合
結合テーブルのデータ項目の値が更新された場合
位置付、範囲、ソートが実行された場合
タスクモードが登録モードに変わった場合
注意: |
|
関連トピック: