ArcGIS で使用されるすべてのテーブルとフィーチャクラスには、それぞれの行またはフィーチャを一意に識別するフールドを含める必要があります。
ArcGIS でフィールドを一意識別子として使用するには、そのフィールドに NULL が含まれず、値が一意であり、かつ以下のデータ タイプのいずれかである必要があります。
- Integer (正の値のみ)
- String
- GUID
- Date
一意識別子の値は、ArcGIS 内の行またはフィーチャ オブジェクトを一意に識別するため、そのフィールドの値は常に一意で、また NULL ではない必要があります。必要に応じてユーザーがこのフィールドの値を管理します。
データベース テーブルをカタログ ツリーからドラッグして ArcMap に配置したたとき、またはクエリ レイヤー定義を整合チェックしたときに、ArcGIS は最初に検出した NULL を含まないフィールドをデフォルトで一意識別子フィールドとして設定します。このフィールドを使用するか、クエリ定義を開いて一意識別子として使用する別のフィールドまたはフィールドのセットを選択できます。手順については、「一意な識別子のフィールドの選択」をご参照ください。
一意識別子としての単一フィールドの使用
単一の整数フィールドを一意識別子として指定した場合、ArcGIS はそのフィールドの値を直接使用して、データベース テーブルのすべてのフィーチャと行を一意に識別します。
一意識別子として使用できるフィールドがデータベース テーブルに存在しない場合、Microsoft SQL Server、Oracle、または PostgreSQL データベースを使用しているのであれば、[増加 ID フィールドの追加 (Add Incrementing ID Field)] ジオプロセシング ツールを実行して、整数の一意識別子フィールドをテーブルに追加できます。
単一の文字列フィールドが一意識別子として使用される場合、ArcGIS はその一意の値を整数にマップする必要があります。マップ選択の作成や属性テーブルを開くときなど ArcGIS システムで ObjectID 属性が必要とされるときには、これは必ず実行されます。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 という名前の属性がレイヤー定義に追加されます。