ArcGIS で使用されるすべてのテーブルとフィーチャクラスには、それぞれの行またはフィーチャを一意に識別するフィールドを含める必要があります。
ArcGIS デスクトップ アプリでフィールドを一意識別子として使用するには、そのフィールドに NULL が含まれず、値が一意であり、かつ以下のデータ タイプのいずれかである必要があります。
- 整数 (32 および 64 ビットの正の値のみ)
- String
- GUID
- Date
フィールドの値は常に一意である必要があります。NULL は使用できません。 必要に応じてユーザーがこのフィールドの値を管理します。
注意:
ArcGIS が NULL 値を検出すると、エラーが表示されます。ただし、クエリ レイヤーまたはデータベース テーブルで使用される一意識別子フィールドで一意の値を使用することは、ArcGIS では強制されません。 ArcGIS に一意でない値が出現しているのにエラーが返されない場合でも、選択セットまたは ArcGIS 内のその他のクエリに不整合な結果が存在していることがあります。
登録済みデータ ストアを参照するフィーチャ レイヤー (フィーチャ サービス) 内のクエリ レイヤーを公開するには、ID は単一の NULL でない一意の自動的に増加する 32 ビットの整数フィールドである必要があります。
データベース テーブルをマップ上にドラッグしたとき、またはクエリ レイヤー定義を整合チェックしたときに、ArcGIS は最初に検出した NULL を含まないフィールドをデフォルトで一意識別子フィールドとして設定します。このフィールドを使用するか、クエリ定義を開いて一意識別子として使用する別のフィールドまたはフィールドのセットを選択できます。
一意識別子としての単一フィールドの使用
単一の整数フィールドを一意識別子として指定した場合、ArcGIS はそのフィールドの値を直接使用して、データベース テーブルのすべてのフィーチャと行を一意に識別します。
一意識別子として使用できるフィールドがデータベース テーブルに存在しない場合、Dameng、IBM Db2、Microsoft SQL Server、Oracle、または PostgreSQL データベースを使用しているのであれば、[増加 ID フィールドの追加 (Add Incrementing ID Field)] ジオプロセシング ツールを実行して、整数の一意識別子フィールドをテーブルに追加できます。
単一の文字列フィールドが一意識別子として使用される場合、ArcGIS はその一意の値を整数にマップする必要があります。マップ選択の作成や属性テーブルを開くときなど ArcGIS システムで Object ID 属性が必要とされるときには、これは必ず実行されます。ArcGIS は ESRI_OID という名前の属性を追加して、一意の整数値をそれに格納します。この属性は単にレイヤー定義の一部であり、元のデータベース テーブルは変更されません。
組み合せによる一意識別子の使用
単一のフィールドまたは複数のフィールドを選択して一意識別子を定義できます。複数のフィールドの使用を選択した場合、それらのフィールドの値の組み合わせは一意である必要があります。以下に、2 つのテキスト フィールド (member_surname、signup_date) を使用した例を示します。これらのフィールドの個々の値は、一意ではない場合があります。しかし、それらの値を組み合わせて使用すると、以下に示すように一意になります。
member_surname | signup_date |
---|---|
alfred | 2006-09-28 10:15:41 |
dewey | 2006-09-28 10:15:56 |
johnson | 2000-02-19 09:14:50 |
johnson | 2004-12-08 11:02:32 |
mujan | 2011-07-07 12:44:21 |
これらの値の組み合わせがキーとして使用され、一意の整数値が生成されます。それらは、ESRI_OID という名前の属性に格納されます。この属性は単にレイヤー定義の一部であり、元のデータベース テーブルは変更されません。
前の例の場合、レイヤー定義には以下に示す ESRI_OID 列が含まれます。
member_surname | signup_date | ESRI_OID |
---|---|---|
alfred | 2006-09-28 10:15:41 | 1 |
dewey | 2006-09-28 10:15:56 | 2 |
johnson | 2000-02-19 09:14:50 | 3 |
johnson | 2004-12-08 11:02:32 | 4 |
mujan | 2011-07-07 12:44:21 | 5 |
指定したフィールドを組み合わせた値または個々のテキスト フィールドの値が一意でない場合、ArcGIS はそれらの行を同一のものとして解釈し、同じ ESRI_OID の値にマップしますので注意してください。
ESRI_OID という名前のフィールドがテーブルにすでに含まれている場合、ESRI_OID_1 という名前の属性がレイヤー定義に追加されます。
注意:
組み合わせによる一意識別子を使用するフィーチャクラスを含む編集可能なフィーチャ サービス (Web フィーチャ レイヤー) は公開できません。