Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Remote » SQL Remote のレプリケーション設計 » SQL Remote のレプリケーション設計と設定

 

切断データ分割の使用

リモート・データベースがデータを共有していない場合、データ分割は切断となります。たとえば、各営業担当者には独自の顧客セットがあり、他の営業担当者と顧客を共有していません。

次の例では、3 つのテーブル Customers、Contacts、SalesReps に、営業担当者と顧客間の対話に関する情報が格納されています。各営業担当者は、複数の顧客に対して販売活動を行います。連絡先が 1 箇所だけの顧客もいれば、複数ある顧客もいます。

Contacts テーブルには、Customers テーブルへの外部キーがあります。Customers テーブルには、SalesReps テーブルへの外部キーがあります。
Contacts、Customers、SalesReps テーブルの説明

次の表では、Customers、Contacts、SalesReps の各データベース・テーブルについて説明します。詳細については、切断データ分割の使用を参照してください。

テーブル 説明 テーブル定義

Contacts

会社と取引があるすべての個別の連絡先。連絡先はそれぞれ 1 人の顧客に属します。Contacts テーブルには、次のカラムがあります。

  • contact_key   各連絡先の識別子。これがプライマリ・キーです。

  • name   各連絡先の名前。

  • cust_key   連絡先が関連する顧客の識別子。これが Customers テーブルへの外部キーです。

CREATE TABLE Contacts (
   contact_key  CHAR(12) NOT NULL,
   name  CHAR(40) NOT NULL,
   cust_key  CHAR(12) NOT NULL,
   FOREIGN KEY  REFERENCES Customers,
   PRIMARY KEY  (contact_key)
);

Customers

会社と取引があるすべての顧客。Customers テーブルには、次のカラムがあります。

  • cust_key   各顧客の識別子。これがプライマリ・キーです。

  • name   各顧客の名前。

  • rep_key   取引を行う営業担当者の識別子。これが SalesReps テーブルへの外部キーです。

CREATE TABLE Customers (
   cust_key CHAR(12) NOT NULL,
   name CHAR(40) NOT NULL,
   rep_key CHAR(12) NOT NULL,
   FOREIGN KEY REFERENCES SalesReps,
   PRIMARY KEY (cust_key)
);

SalesReps

社内のすべての営業担当者。SalesReps テーブルには、次のカラムがあります。

  • rep_key   各営業担当の識別子。これがプライマリ・キーです。

  • name   各営業担当の名前。

CREATE TABLE SalesReps (
   rep_key CHAR(12) NOT NULL,
   name CHAR(40) NOT NULL,
   PRIMARY KEY (rep_key)
);

営業担当者は、次の情報を提供するパブリケーションに対してサブスクライブする必要があります。

  • 社内のすべての営業担当者のリスト   次の文では、SalesRep テーブル全体をパブリッシュするパブリケーションを作成します。
    CREATE PUBLICATION SalesRepData (
       Table SalesReps ...)
    );  

  • 営業担当者に割り当てられている顧客のリスト    この情報は、Customers テーブルで取得できます。次の文では、Customers テーブルをパブリッシュするパブリケーションを作成します。このパブリケーションには、Customers テーブルの rep_key カラムの値に一致するローが含まれています。
    CREATE PUBLICATION SalesRepData (
       TABLE Customers SUBSCRIBE BY rep_key ...
    );

  • 割り当てられている顧客の窓口情報のリスト    この情報は、Contacts テーブルで取得できます。Contacts テーブルは営業担当者の間で分割する必要がありますが、SalesRep テーブルの rep_key 値への参照は含みません。この問題を解決するには、Customers テーブルの rep_key カラムを参照する Contacts アーティクルで、サブクエリを使用します。

    次の文では、Contacts テーブルをパブリッシュするパブリケーションを作成します。このパブリケーションには、Customers テーブルの rep_key カラムを参照するローが含まれています。

    CREATE PUBLICATION SalesRepData ( ...
       TABLE Contacts
          SUBSCRIBE BY (SELECT rep_key
             FROM Customers
             WHERE Contacts.cust_key = Customers.cust_key )
    );

    Customers テーブルの 1 つのローには、Contacts テーブルの現在のローの cust_key 値が含まれています。SUBSCRIBE BY 文の中で WHERE 句を使用すると、サブクエリは必ず単一の値のみを返します。

次の文では、完全なパブリケーションが作成されます。

CREATE PUBLICATION SalesRepData (
   TABLE SalesReps
   TABLE Customers
      SUBSCRIBE BY rep_key
   TABLE Contacts
      SUBSCRIBE BY (SELECT rep_key
         FROM Customers
         WHERE Contacts.cust_key = Customers.cust_key )
);

BEFORE UDPATE トリガの使用