リモートデータベースがデータを共有している場合、データ分割は重複となります。たとえば、営業担当者は、担当者間で顧客を共有します。
3 つのテーブル Customers、Policy、SalesReps に、営業担当者と顧客間の対話に関する情報が格納されているとします。各営業担当者は複数の顧客を担当していますが、複数の営業担当者と取り引きしている顧客もいます。Policy テーブルには、Customers と SalesReps の両テーブルへの外部キーがあります。Customers と SalesReps 間には、多対多の関係があります。
次の表では、Customers、Policy、SalesReps の各データベーステーブルについて説明します。詳細については、重複分割を参照してください。
テーブル | 説明 | ||
---|---|---|---|
Customers |
会社と取引があるすべての顧客。Customers テーブルには、次のカラムがあります。
次の文で、このテーブルが作成されます。
|
||
Policy |
顧客と営業担当者間の多対多の関係を管理する、3 つのカラムで構成されたテーブル。Policy テーブルには次のカラムがあります。
次の文で、このテーブルが作成されます。
|
||
SalesReps |
社内のすべての営業担当者。SalesReps テーブルには、次のカラムがあります。
次の文で、このテーブルが作成されます。
|
顧客と営業担当者間の多対多の関係では、適切に情報を共有するための新しい問題が発生します。
営業担当者は、次の情報を提供するパブリケーションに対してサブスクライブする必要があります。
SalesReps テーブル全体 このアーティクルに対応した修飾子はありません。このため、SalesReps テーブル全体がパブリケーションに含まれます。
... TABLE SalesReps, ... |
データに対してサブスクライブされた営業担当者を含む、取り引きを記録した Policy テーブルのロー このアーティクルは、SUBSCRIBE BY サブスクリプション式を使用して、営業担当者間でデータの分割に使用するカラムを指定します。
... TABLE Policy SUBSCRIBE BY rep_key, ... |
このサブスクリプション式によって、rep_key カラムの値がサブスクリプションで指定された値に一致するテーブルのローのみを、各営業担当者が受信します。
Policy テーブルの分割は「切断」です。複数のサブスクライバが共有するローはありません。
データに対してサブスクライブされた営業担当者と取り引きする顧客をリストした、Customers テーブルのロー Customers テーブルには、データを分割するサブスクリプションで使用される営業担当者の値への参照はありません。パブリケーションでサブクエリを使用して、この問題に対処できます。
Customers テーブルの各ローが、SalesReps テーブルの複数のローと関連付けされ、複数の営業担当者のデータベースで共有されている場合があります。つまり、重複しているサブスクリプションがあります。
サブクエリを持つサブスクリプション式は、分割を定義するときに使用します。このアーティクルは、次のように定義されます。
... TABLE Customers SUBSCRIBE BY ( SELECT rep_key FROM Policy WHERE Policy.cust_key = Customers.cust_key ), ... |
Customers テーブルの分割は「非切断」です。複数のサブスクライバが共有するローがいくつかあります。
次の文では、完全なパブリケーションが作成されます。
CREATE PUBLICATION SalesRepData ( TABLE SalesReps, TABLE Policy SUBSCRIBE BY rep_key, TABLE Customers SUBSCRIBE BY ( SELECT rep_key FROM Policy WHERE Policy.cust_key = Customers.cust_key ) ); |
Customers アーティクルのサブクエリは、その結果セットに単一のカラム (rep_key) を返します。ただし、特定の顧客を担当する営業担当者全員に対応して、複数のローを返す場合があります。サブスクリプション式に複数の値がある場合は、この値のいずれかに一致するサブスクリプションを持つすべてのサブスクライバにローがレプリケートされます。複数の値を持つサブスクリプション式の場合、テーブルの分割を重複にできます。
サブスクライバ間でローを再割り当てする場合の参照整合性の維持
多対多の関係における subscribe_by_remote オプション
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |