複数表のキャッシュ・グループ

複数表のキャッシュ・グループは、1つのルート表および1つ以上の子表を定義するキャッシュ・グループです。

キャッシュ・グループに含めることのできるルート表は、1つのみです。ルート表は外部キー制約のある表を参照しません。

TimesTenに複数のキャッシュ表を含むキャッシュ・グループでは、各子表は、外部キー制約を使用して、同じキャッシュ・グループ内のルート表または別の子表について、主キーまたは一意索引を参照する必要があります。複数表のキャッシュ・グループで定義されたキャッシュ表は、外部キー制約によってTimesTen内で相互に関連している必要があります。ただし、Oracle Database内の対応する表は、必ずしも相互に関連している必要はありません。Oracle Databaseの表は、次のように関連付けることができます。

  • 外部キー制約を使用して関連付けます。

  • 外部キー制約を使用しないで関連付けます。外部キー制約によって関連付けられていない表がOracle Databaseにある場合があります。ただし、これらの個別の表内のデータをTimesTenにキャッシュする必要があります。ユーザー・アプリケーションは、Oracle Databaseの外部キー制約によって強制されない表間の関係を維持できます。

図4-2に、customerordersおよびorder_itemの各表をキャッシュする複数表のキャッシュ・グループcustomer_ordersを示します。customer_ordersキャッシュ・グループ内の各親表が持つ主キーは、外部キー制約を介して子表によって参照されます。customer表は外部キー制約を使用してキャッシュ・グループ内の表を参照していないため、この表がキャッシュ・グループのルート表です。ルート表の主キーは、キャッシュ・グループの主キーとみなされます。orders表は、customerルート表の子表です。order_item表は、orders子表の子表です。

図4-2 複数表のキャッシュ・グループ

図4-2の説明が続きます。
「図4-2 複数表のキャッシュ・グループ」の説明

複数表のキャッシュ・グループ内の表階層で、子表を他の子表の親に指定できます。子表は2つ以上の親表を参照できません。ただし、親表は2つ以上の子表から参照されることがあります。

図4-3に、不適切なキャッシュ表階層を示します。customer表およびproduct表は、どちらも外部キー制約を介してキャッシュ・グループ内の表を参照していません。これにより、キャッシュ・グループは2つのルート表を持つことになるため無効です。

図4-3 問題: 2つのルート表を含むキャッシュ・グループ

図4-3の説明が続きます。
「図4-3 問題: 2つのルート表を含むキャッシュ・グループ」の説明

この問題を解決してすべての表をキャッシュするには、図4-4に示すように、customerordersおよびorder_itemの各表を含むキャッシュ・グループと、productおよびinventoryの各表を含む2つ目のキャッシュ・グループを作成します。

図4-4 解決策: 2つのキャッシュ・グループの作成

図4-4の説明が続きます。
「図4-4 解決策: 2つのキャッシュ・グループの作成」の説明