論理結合の定義
論理表間の関係は、論理結合によって表されます。
論理結合は、物理的な結合ではなく概念上の結合です。論理結合は特定のキーまたは列を結合しません。1つの論理結合が可能な多くの物理結合に対応する場合があります。
論理結合の重要なプロパティの1つがカーディナリティです。カーディナリティは、ある表内の行が結合先の表の行とどのように関連するかを表します。1対多のカーディナリティは、最初の論理ディメンション表の各行に対応する行が、2つ目の論理表には0個、1個または多数あることを意味します。管理ツールでは、ある表が、その他の論理表に対応しているすべての論理結合において多の側である場合、その表は論理ファクト表と見なされます。
Oracle BIサーバーで必要なメタデータによってビジネス・モデルに対する論理リクエストが物理データ・ソースに対するSQL問合せに変換されるように、論理表結合を指定する必要があります。論理結合情報によって、Oracle BIサーバーに、論理表間の多対1関係の情報が提供されます。この論理結合情報は、Oracle BIサーバーで基礎となるデータベースに対する問合せが生成されるときに使用されます。
次の両方が当てはまる場合、ビジネス・モデルとマッピング・レイヤーで論理結合を作成する必要はありません。
-
必要な物理表すべてをビジネス・モデルとマッピング・レイヤーに同時にドラッグ・アンド・ドロップすることによって論理表を作成する場合
-
論理結合が物理レイヤーの結合と同じである場合
ビジネス・モデルとマッピング・レイヤーでいくつかの論理結合を作成する必要が生じる場合があります。非常に単純なモデルの場合を除いて、すべての物理表を同時にドラッグ・アンド・ドロップすることはできません。
結合マネージャまたはビジネス・モデル図を使用して、論理結合を作成できます。物理レイヤーで複合結合を作成する場合は、式、および結合を作成する特定の列を指定できます。ビジネス・モデルとマッピング・レイヤーで論理結合を作成する場合は、式も結合を作成する列も指定できません。物理レイヤーに結合が存在するからといって、ビジネス・モデルとマッピング・レイヤーに一致する結合が必要なわけではありません。
論理表には外部キーを指定しないことをお薦めします。ただし、「オプション」ダイアログで「論理外部キー結合作成の許可」を選択した場合は、下位互換性のために、結合マネージャを使用して、論理外部キー結合を作成できます。ファクト表の論理キーは、属性表に結合するキー列を使用して構成します。特定のサード・パーティの問合せおよびレポート作成ツールのODBCデータ・ソースとしてOracle BIサーバーを使用する場合に、論理外部キー結合が必要なことがあります。
このセクションには次のトピックが含まれます:
ビジネス・モデル図を使用した論理結合の定義
ビジネス・モデル図には、論理表とそれらの表の間に定義されている結合が表示されます。
ビジネス・モデル図で、結合は、選択した2つの表の間の線で表され、結合の「1」側が矢印になっています。この図は、ビジネス・モデル図での結合を示しています。
ビジネス・モデル図を使用して、表の間に論理結合を定義できます。駆動表の指定を参照してください。
この駆動表オプションは、一方の表が非常に小さく、他方の表が非常に大きな場合に、Oracle BIサーバーでマルチデータベースの内部結合を処理する方法の最適化に有用です。マルチデータベース結合が発生する場合を除き、駆動表は選択しないでください。
重要:
駆動表を指定するかどうかの決断には、十分な注意を払ってください。駆動表は、まれな状況で、駆動表が非常に小さい(1,000行未満)場合にのみ問合せの最適化に使用します。駆動表を間違って選択すると、重大なパフォーマンス低下をまねくおそれがあります。
- 管理ツールで、ビジネス・モデルを右クリックして、「ビジネス・モデル図」を選択し、「図全体」を選択します。
- 「図」メニューから、管理ツールのツール・バーにある「新規結合」ボタンをクリックします。
- 「ビジネス・モデル図」で、結合の1つ目の表(1対多結合の多を表す表)をクリックして選択します。
- 結合に使用する表(1対多結合の1を表す表)にカーソルを移動し、2つ目の表をクリックして選択します。
- オプション: キーに駆動表を指定するには、「駆動表」リストから表を選択し、適切なカーディナリティを指定します。
- 「タイプ」リストから結合タイプを選択するか、デフォルト値をそのまま使用します。
- 結合の両側に「カーディナリティ」を設定するか、デフォルト値をそのまま使用します。
- 「OK」をクリックします。
結合マネージャを使用した論理結合の定義
結合マネージャを使用して、論理結合の関係の表示と論理結合の作成を実行できます。
また、お薦めできませんが、「オプション」ダイアログで「論理外部キー結合作成の許可」を選択した場合は、結合マネージャを使用して、論理外部キー結合を作成できます。
このセクションには次のトピックが含まれます:
結合マネージャを使用した論理結合の作成
ビジネス・モデルとマッピング・レイヤーでは、論理外部キー結合よりも論理結合をお薦めします。
駆動オプションを使用して、一方の表が非常に小さく、他方の表が非常に大きな場合に、Oracle BIサーバーでマルチデータベースの内部結合を処理する方法の最適化します。マルチデータベース結合が発生する場合を除き、駆動表は選択しないでください。
ノート:
駆動表を指定するかどうかの決断には、十分な注意を払ってください。駆動表は、まれな状況で、駆動表が非常に小さい(1,000行未満)場合にのみ問合せの最適化に使用します。駆動表を間違って選択すると、重大なパフォーマンス低下をまねくおそれがあります。
駆動表の指定を参照してください。
- 管理ツールで、「管理」を選択して、「結合」を選択します。
- 結合マネージャで、「アクション」を選択し、「新規」を選択して、次に、「論理結合」を選択します。
- 「論理結合」ダイアログで、論理結合の名前を入力します。
- ダイアログの右側と左側にある「表」リストで、論理結合で参照する表を選択します。
- オプション: キーに駆動表を指定するには、駆動リストから表を選択し、適切なカーディナリティを指定します。
- 「タイプ」リストから結合タイプを選択するか、デフォルト値をそのまま使用します。
- 結合の両側に「カーディナリティ」を設定するか、デフォルト値をそのまま使用します。
- 「OK」をクリックします。
結合マネージャを使用した論理外部キー結合の作成
特定のサード・パーティの問合せおよびレポート作成ツールのODBCデータ・ソースとしてOracle BIサーバーを使用する予定の場合に、論理外部キー結合が必要なことがあります。
論理外部キーは作成しないでください。駆動表の指定を参照してください。
この駆動表オプションは、一方の表が非常に小さく、他方の表が非常に大きな場合に、Oracle BIサーバーでマルチデータベースの内部結合を処理する方法の最適化に有用です。マルチデータベース結合が発生する場合を除き、駆動表は選択しないでください。
重要:
駆動表を指定するかどうかの決断には、十分な注意を払ってください。駆動表は、まれな状況で、駆動表が非常に小さい(1,000行未満)場合にのみ問合せの最適化に使用します。駆動表を間違って選択すると、重大なパフォーマンス低下をまねくおそれがあります。
- 管理ツールで、「ツール」を選択し、「オプション」を選択します。
- 「オプション」ダイアログの「一般」タブで、「論理外部キー結合の許可」を選択します。
- 「OK」をクリックします。
- 「管理」を選択し、「結合」を選択して結合マネージャを表示します。
- 「アクション」を選択し、「新規」を選択して、次に、「論理外部キー」を選択します。
- 「参照」ダイアログで、表をダブルクリックします。
- 「論理外部キー」ダイアログで、外部キーの名前を入力します。
- ダイアログの左側にある「表」リストで、外部キーで参照する表を選択します。
- 左の表から、外部キーで参照する列を選択します。
- 右の表から、外部キー列を構成する列を選択します。
- (オプション)キーに駆動表を指定するには、駆動リストから表を選択し、適切なカーディナリティを指定します。
- 「タイプ」リストから結合タイプを選択するか、デフォルト値をそのまま使用します。
- 結合の両側に「カーディナリティ」を設定するか、デフォルト値をそのまま使用します。
- 式ビルダーで、結合の式を入力します。
- 「OK」をクリックして、作業を保存します。
駆動表の指定
駆動表は、一方の表が非常に小さく、他方の表が非常に大きな場合に、Oracle BIサーバーでクロスデータベース結合を処理する方法の最適化に有用です。
駆動表の指定は、駆動表から選択された行数が結合先の表の行数よりはるかに少ない場合にのみ、問合せの最適化に使用できます。
重要:
問題が発生しないように、駆動表は、非常に小さい、つまり1,000行未満の場合にのみ指定します。
「論理結合」ウィンドウから論理結合に駆動表を指定できます。駆動表を指定した場合、Oracle BIサーバーでは、問合せ計画で駆動表の使用によって問合せ処理が最適化されると判断された場合に駆動表が使用されます。小さな表(駆動表)がスキャンされ、パラメータ化された問合せが大きな表に発行されて一致する行が選択されます。その後で、その他の表が、その他の駆動表を含めて、一緒に結合されます。
重要:
駆動表から行が多数選択された場合、駆動表の指定によって重大なパフォーマンス低下をまねくおそれがあり、MAX_QUERIES_PER_DRIVE_JOIN
の制限値を超えた場合は、問合せが終了します。
駆動表は、内部結合に使用し、駆動表が左外部結合の左の表である場合、または右外部結合の右の表である場合は、外部結合に使用します。駆動表は、完全外部結合には使用されません。駆動表を指定する手順は、論理結合の定義を参照してください。
駆動表のパフォーマンスを制御およびチューニングする機能として、データベース機能表に2つのエントリがあります。
-
MAX_PARAMETERS_PER_DRIVE_JOIN
これは、パフォーマンス・チューニング・パラメータです。値が大きいほど、生成されるパラメータ化された問合せの数が少なくなります。値が大きすぎると、バックエンド・データベース制限によりパラメータ化問合せが失敗します。値を0 (ゼロ)に設定すると、駆動表結合がオフになります。
-
MAX_QUERIES_PER_DRIVE_JOIN
これは、リソース集中型の駆動表結合を防ぐために使用します。パラメータ化問合せの数がこの値を超えると、問合せが終了し、エラー・メッセージがユーザーに返されます。
結合トリミングを決定する要因
物理問合せからOracle BIサーバーがトリミングできる結合を決定する際に、Oracle BIサーバーではこの項で説明する要因が考慮されます。
次の結合トリミングのルールが、論理表ソース内の表に対して施行されます。
-
結合の外部性(内部、左外部、右外部、または完全外部)。
-
結合カーディナリティ({0..1、1、N、不明}対{0..1、1、N、不明})。たとえば、0..1対Nはゼロまたは1対複数の結合を表します。結合の少なくとも片側には、不明カーディナリティを除き、9つの結合カーディナリティの組合せがあります。
-
論理表ソースにWHERE句のフィルタが含まれているかどうか。
-
物理結合が複合結合または外部キー結合であるかどうか。
Oracle BIサーバーで結合をトリミングする場合、次の基準を満たす必要があります。
-
トリミングされた表の参照は、列の予測されるリストやWHERE句の中など、問合せ内のどの場所にも存在しません。
-
トリミングされた表によって結果セットのカーディナリティが変更されることがあってはいけません。結合を削除することによって選択した行数が変更される可能性がある場合、Oracle BIサーバーでは結合をトリミングしません。
次の条件のいずれかがtrueである場合、結合には、結果セットの行数を変更する可能性があるものと見なされます。次の条件のいずれでもtrueである場合、結合は問合せからトリミングされません。
-
この結合は完全外部結合です。内部結合、左外部結合および右外部結合のみがトリミングの候補です
-
いずれかの側で結合カーディナリティが不明です。
-
トリミングする表が結合の複数の側にあります。つまり、マスター/詳細の関係で詳細表はトリミングされません
-
トリミングする表のカーディナリティが0..1であり、結合が内部結合です。カーディナリティ0..1は、表内に一致する行が存在する可能性があることを意味します。一方の側に0..1のカーディナリティが設定されている結合は、実質的にフィルタのように機能します。選択した行数を変更しないと、Oracle BIサーバーで表をトリミングできません。
-
トリミングする表が、左外部結合の左側、または右外部結合の右側にあり、行を維持する表は決してトリミングされません。このルールでは、DISTINCT句が問合せに追加される属性のみを選択する問合せに対して、例外が1つあります。DISTINCT句であるため、行を維持する表をトリミングしてもNull指定の表から返される行数に影響はありません。属性に対する個別の問合せの特殊なケースでは、外部結合からの行を維持する表をトリミングできます。
-
次の表に、Oracle BIサーバーで問合せから結合をトリミングできる例を示します。
シナリオ | 結果 |
---|---|
![]() 従業員 内部結合 部門 |
部門は内部結合の1の側にあるため、Oracle BIサーバーでトリミングできます。 従業員は内部結合の複数の側にあるため、Oracle BIサーバーでトリミングできません。 |
![]() 従業員 左外部結合 部門 |
部門は結合の1の側にあり、左外部結合の右側、Nullを指定する表にあるため、Oracle BIサーバーでトリミングできます。 従業員は複数の側にあり、左外部結合の左側、行を維持する表にあるため、Oracle BIサーバーでトリミングできません。 |
![]() 従業員 右外部結合 部門 |
部門は右外部結合の右側、行を維持する表にあるため、Oracle BIサーバーでトリミングできません。 従業員は結合の複数の側にあるため、Oracle BIサーバーでトリミングできません。 |
![]() 従業員 内部結合 従業員情報 |
両方の表が内部結合の1の側にあるため、Oracle BIサーバーで両側ともトリミングできます。 |
![]() 従業員 左外部結合 従業員情報 |
従業員情報は結合の1の側にあり、左外部結合の右側、Nullを指定する表にあるため、Oracle BIサーバーでトリミングできます。 従業員は左外部結合の左側、行を維持する表にあるため、Oracle BIサーバーでトリミングできません。 |
![]() 従業員 右外部結合 従業員情報 |
従業員情報は右外部結合の右側、行を維持する表にあるため、Oracle BIサーバーでトリミングできます。 従業員は結合の1の側にあり、右外部結合の左側、Nullを指定する表にあるため、トリミングできます。 |
![]() 従業員 内部結合 部門 |
部門は内部結合の0..1の側にあるため、Oracle BIサーバーでトリミングできます。 従業員は内部結合の複数の側にあるため、Oracle BIサーバーでトリミングできます。 |
![]() 従業員 左外部結合 部門 |
部門は外部結合の0..1の側にあり、左外部結合の右側、Nullを指定する表にあるため、Oracle BIサーバーでトリミングできます。 Oracle BIサーバーでは、外部結合の0..1の側にあるNullを指定する表をトリミングでき、その理由は、この場合は問合せから部門をトリミングしても、従業員表から選択した行数が変更されないためです。 従業員は外部結合の複数の側にあるため、Oracle BIサーバーでトリミングできます。 |
![]() 従業員 完全外部結合 部門 |
結合は完全外部結合なので、Oracle BIサーバーでは両側ともトリミングできません。 |
![]() 従業員 複数対複数 プロジェクト |
結合は多対多であるため、Oracle BIサーバーでは両側ともトリミングできません。 |
![]() 従業員 不明 部門 |
結合のカーディナリティが不明であるため、Oracle BIサーバーでは両側ともトリミングできません。 |
論理オブジェクトにマップする物理表の特定
物理図には、選択した論理オブジェクトにマップする物理表と、各表間の物理結合が示されます。
結合オプションの1つである「ビジネス・モデル内のオブジェクトと直接結合」は、論理レイヤーに特有のオプションです。このオプションによって、次の両方の条件を満たす表の物理図が作成されます。
-
選択されたオブジェクト内の表、および直接結合する表
-
ビジネス・モデル内でマップされている(ビジネス・モデルの論理表ソースに存在する)表
- 管理ツールの「ビジネス・モデルとマッピング」レイヤーで、ビジネス・モデル、論理表または論理表ソースを右クリックします。
- 「物理図」を選択して、いずれかの結合オプションを選択します。
- 1対多などの関係線をより明確に表示するには、任意のオブジェクトをクリックしてドラッグします。