このレッスンでは、ユニークなプライマリキーを統合データベースに追加します。
前提条件
このレッスンは、受講者がこれまでのすべてのレッスンを終了していることを前提としています。 レッスン 1:スキーマの設計を参照してください。
このレッスンでは、このチュートリアルの冒頭の「パーミッションと権限」セクションに一覧になっているロールおよび権限を持っていることを前提としています。 チュートリアル:Adaptive Server Enterprise 統合データベースと Mobile Link の使用
内容と備考
同期システムでは、テーブルのプライマリキーは、異なるデータベース内の同じローを識別する唯一の方法であり、競合を検出する唯一の方法です。使用する各テーブルには、プライマリキーが必要です。プライマリキーが更新されることはありません。また、1 つのデータベースに挿入されたプライマリキーの値が別のデータベースに挿入されないようにする必要があります。
ユニークなプライマリキーを生成する方法は複数あります。このチュートリアルでは、簡単に操作を行うため、複合プライマリキー方式を使用します。この方式では、統合データベースとリモートデータベースにまたがってユニークな複数のカラムを使用してプライマリキーを作成します。
Adaptive Server Enterprise の isql を使用して、pubs2 データベースに sa として接続します。コマンドプロンプトで、次のコマンドをすべて 1 行に入力して実行します。
isql -U sa -P your-password-for-sa-account -D pubs2 |
Adaptive Server Enterprise にリモートでアクセスしている場合は、-S オプションでサーバ名を指定します。
次のローは、salesdetail テーブルに対して作成した複合プライマリキーを基準とするとユニークではありません。操作を簡単にするために、次の文を実行してこのローを削除します。
DELETE FROM salesdetail WHERE stor_id = '5023' AND ord_num = 'NF-123-ADS-642-9G3' AND title_id = 'PC8888' DELETE FROM salesdetail WHERE stor_id = '5023' AND ord_num = 'ZS-645-CAT-415-1B2' AND title_id = 'BU2075' |
次のインデックスは、前の手順でのプライマリキーの作成に干渉しています。このインデックスを削除するには、次の文を実行します。
DROP INDEX authors.auidind DROP INDEX titleauthor.taind DROP INDEX titles.titleidind DROP INDEX sales.salesind |
次の文を実行して、ユニークなプライマリキーを追加します。
ALTER TABLE au_pix ADD PRIMARY KEY (au_id) ALTER TABLE authors ADD PRIMARY KEY (au_id) ALTER TABLE titleauthor ADD PRIMARY KEY (au_id, title_id) ALTER TABLE titles ADD PRIMARY KEY (title_id) ALTER TABLE discounts ADD PRIMARY KEY (discounttype) ALTER TABLE stores ADD PRIMARY KEY (stor_id) ALTER TABLE sales ADD PRIMARY KEY (stor_id, ord_num) ALTER TABLE salesdetail ADD PRIMARY KEY (stor_id, ord_num, title_id) |
これらの文を実行した後、Mobile Link サーバでは統合データベースに接続し、任意の数のリモートデータベースとの同期を設定できるようになります。
プライマリキーがない統合データベースとデータを同期することも可能です。ただし、他のテーブルでローを一意に識別するよう設計されたシャドウテーブルで機能する同期イベントを自分で作成する必要があります。
あとのレッスンでは、統合スキーマからリモートスキーマを作成するため、リモートスキーマは統合スキーマと同じプライマリキーを持つことになります。
プライマリキーがすべてのデータベースに対してユニークになるようにカラムが選択されています。sales テーブルでは、プライマリキーは stor_id と ord_num カラムで構成されています。リモートデータベースの sales テーブルに挿入されるすべての値には、ユニークな注文番号が必要です (stor_id の値は常に同じです)。これにより、リモートの各 sales テーブルで一意性が確保されます。統合データベースの sales テーブルのプライマリキーは、複数の書店でデータがアップロードされた場合の競合を防止する役割があります。書店ごとに stor_id の値が異なるため、1 軒の書店からのアップロードはいずれも他の書店に対してユニークです。
salesdetail テーブルでは、プライマリキーは stor_id、ord_num、title_id の各カラムで構成されています。1 件の注文に複数の本のタイトルが存在する場合もあります。リモートデータベースの sales テーブルでは、stor_id と ord_num については複数のローで同じ値になってもかまいませんが、title_id の値はローごとに異なる必要があります。この設定により、各リモートデータベースの salesdetail テーブルで一意性が確保されます。sales テーブルと同様に、書店ごとに stor_id の値が異なるため、1 軒の書店から統合データベースへのアップロードはいずれも他の書店に対してユニークです。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |