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

SQL Anywhere 11.0.1 (日本語) » Mobile Link - サーバ管理 » Mobile Link サーバ・テクノロジの使用 » 同期の方法 » リモート・データベース間でのローの分割

 

重複のある分割

統合データベースの一部のテーブルは、複数のリモート・データベースに属するローを持ちます。各リモート・データベースは統合データベース内にローのサブセットを持ち、さらにそのサブセットは他のリモート・データベースと重複しています。顧客テーブルの場合は、こうしたことがよく起こります。この場合、顧客テーブルと複数のリモート・データベース間で多対多の関係があり、通常、この関係を表すテーブルが存在します。download_cursor イベントと download_delete_cursor イベントのスクリプトでは、関係を表すテーブルにダウンロードされるテーブルをジョインする必要があります。

CustDB サンプル・アプリケーションでは、この方法を ULOrder テーブルに使用します。ULEmpCust テーブル上での ULCustomer と ULEmployee の関係は、多対多の関係です。

各リモート・データベースは、ULOrder テーブルから、emp_id カラムの値が Mobile Link ユーザ名と一致するローのみを受信します。

CustDB アプリケーションの ULOrder テーブルで、SQL Anywhere バージョンの download_cursor スクリプトを使用した例を次に示します。

SELECT o.order_id, o.cust_id, o.prod_id,
   o.emp_id, o.disc, o.quant, o.notes, o.status
FROM ULOrder o , ULEmpCust ec
WHERE o.cust_id = ec.cust_id
 AND ec.emp_id = {ml s.username}
 AND ( o.last_modified >= {ml s.last_table_download}
  OR ec.last_modified >= {ml s.last_table_download})
 AND  ( o.status IS NULL
  OR o.status != 'Approved' )
 AND ( ec.action IS NULL )

このスクリプトは非常に複雑です。スクリプトを見ると、リモート・データベースのテーブルを定義するクエリには、統合データベースのテーブルを複数指定できることがわかります。このスクリプトは、次のすべての条件に一致する ULOrder のローをすべてダウンロードします。

  • ULOrder の cust_id カラムと ULEmpCust の cust_id カラムが一致する。

  • ULEmpCust の emp_id カラムが同期ユーザ名と一致する。

  • 注文、または従業員と顧客の関係に対する最終更新日がどちらも、同期ユーザ用の最新の同期時間よりも新しい。

  • ステータスは "Approved" 以外である。

ULEmpCust のアクション・カラムを使用して、削除するカラムにマークを付けます。その目的は、現在説明している内容には関係ありません。

download_delete_cursor スクリプトを次に示します。

SELECT o.order_id
FROM ULOrder o, ULEmpCust ec
WHERE o.cust_id = ec.cust_id
  AND ec.emp_id = {ml s.username}
  AND ( o.last_modified >= {ml s.last_table_download} OR
        c.last_modified >= {ml s.last_table_download} )
  AND ( o.status IS NULL OR
        o.status != 'Approved' )
  AND ( ec.action IS NULL )

リモート・データベースから "Approved" のローがすべて削除されます。