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

SAP Sybase SQL Anywhere 16.0 » Ultra Light データベース管理とリファレンス » Mobile Link クライアントとしての Ultra Light » Ultra Light クライアント » Ultra Light でのプライマリキーの一意性

 

Ultra Light の GLOBAL AUTOINCREMENT カラム

Ultra Light データベースにあるカラムのデフォルト値は、GLOBAL AUTOINCREMENT 型として宣言できます。これらのカラム ID を自動的に増分するには、その前に Ultra Light データベースのグローバルデータベース ID を設定する必要があります。

警告

Mobile Link 同期を介してダウンロードされた GLOBAL AUTOINCREMENT カラムの値は、GLOBAL AUTOINCREMENT 値のカウンタを更新しません。したがって、ある Mobile Link クライアントによって別のクライアントの分割に値が挿入された場合は、エラーが発生する可能性があります。この問題を回避するため、Ultra Light アプリケーションのコピーでは、そのコピー自体の分割にだけ値が挿入されるようにします。

global_database_id データベースオプションを使用すると、Ultra Light データベースに値を設定できます。Ultra Light を配備するときには、各データベースに対して必ず異なる ID 番号を割り当てる必要があります。

Ultra Light は、Ultra Light のデータベース番号でユニークに識別された分割を使用して、カラムにデフォルト値を設定します。

Ultra Light は、次の規則に従います。

  • カラムに現在の分割の値が含まれていない場合、最初のデフォルト値は pn + 1 である。ここで、p は分割サイズ、n はグローバル ID 番号を表します。

  • カラムに現在の分割の値が含まれていても、そのすべてが p(n + 1) 未満であれば、この範囲内でこれまで使用した最大値より 1 大きい値が次のデフォルト値になる。

  • デフォルトのカラム値は、現在の分割以外のカラムの値の影響を受けない。つまり、pn + 1 より小さいか p(n + 1) より大きい数には影響されない。Mobile Link 同期を介して別のデータベースからレプリケートされた場合に、このような値が存在する可能性があります。

    たとえば、Ultra Light データベースにグローバル ID 番号 1 を割り当て、分割サイズが 1000 の場合、データベースのデフォルト値は 1001 ~ 2000 の範囲から選択されます。このデータベースの別のコピーで、ID 番号 2 が割り当てられたデータベースからは、2001 ~ 3000 の範囲で同一カラムのデフォルト値が指定されます。

  • グローバル ID 番号は負の値には設定できないので、GLOBAL AUTOINCREMENT カラムの値は常に正の数です。ID 番号の最大値を制限するのは、カラムのデータ型と分割サイズだけです。

  • グローバル ID の値を設定しないか、分割内の値がなくなった場合は、カラムに NULL 値が挿入されます。NULL 値が許可されていない場合にローを挿入しようとすると、エラーが発生します。

GLOBAL AUTOINCREMENT と宣言されたカラムに使用可能な値がなくなったか、なくなりそうになったら、新しいグローバルデータベース ID を設定する必要があります。GLOBAL AUTOINCREMENT の値は、グローバル ID 番号によって識別される分割から、最大値に達するまで選択されます。値を超えると、NULL 値が生成され始めます。新しいグローバルデータベース ID 番号を割り当てることで、Ultra Light で別の分割から適切な値を設定できるようになります。

新しいグローバルデータベース ID を選択する方法の 1 つとして、未使用のグローバルデータベース ID の値のプールを管理できます。このプールは、プライマリキープールと同じ方法で管理されます。

ヒント

Ultra Light の API を使うと、使用済みの番号の割合を取得できます。戻り値は、これまでに使用された値のパーセンテージを表す 0 ~ 100 の範囲の SHORT 型です。たとえば、値 99 は、未使用の値がほとんど残っていないので、データベースに新しい ID 番号を割り当てる必要があることを示します。この ID 番号の設定方法は、使用するプログラミングインタフェースによって異なります。

 参照