エンタープライズ ジオデータベースでは、次の 4 種類のビューを使用できます。
データベース ビュー
データベース ビューは、指定されたテーブルからデータを選択するクエリを格納します。バージョン対応登録されていないデータベースまたはエンタープライズ ジオデータベースのテーブルに対して、ビューを定義できます。エンタープライズ ジオデータベースで使用する場合、データベース ビューは単一のバージョン非対応テーブルに対して定義するか、2 つのバージョン非対応テーブル間で定義できます。また、サブクエリを含む、より複雑なビューを作成することもできます。
ArcGIS で使用されるビューには 1 つの空間列を含めることができます。空間列が存在する場合、これらのビューは空間ビューと呼ばれます。空間ビューを作成するときに、空間列と同じテーブルの ObjectID 列を含める必要があります。フィーチャクラスの ObjectID が含まれない場合、ObjectID と Shape 列の間の関係が一意とならず、ArcGIS で検索やレンダリングを行う際に結果が不正確になる可能性があります。
ArcGIS クライアントまたはサービスを通じてデータベース ビューを編集することはできません。
データベース ビューは次のような目的で使用されます。
- ビューでは、あらかじめ定義した方法で行または列のサブセットを表示できます。これにより、データベースからクライアントに転送されるデータの量を削減し、パフォーマンスを向上させることができます。
- ビューはデータベースで共通のクエリを体系化し、複数のユーザーが利用できるようにします。これにより、ユーザーが各自で複雑なクエリを作成する必要がなくなります。
- ビューでは、さまざまなテーブルやその他のビューのデータを結合できます。
- 集計関数を使用して、ビューのデータを合計することができます。この場合も、データベースからクライアントに転送されるデータの量を削減し、パフォーマンスを向上させることができます。
- テーブルの場合と同じ方法で、ビューに対する select 権限をユーザーに付与できます。したがって、テーブルの行や列に対するアクセスを制御する目的でビューを使用することもできます。
- ビューを定義するときにフィーチャクラスを非空間テーブルに結合し、これら両方の列を連結することができます。
- ArcGIS は、1 つの空間列を含むテーブルのみを操作できます。複数の空間列を含む空間テーブルを使用する場合は、テーブルの空間列を 1 つだけ含む空間ビューを作成します。
- ArcGIS は、1 つの空間参照を使用するテーブルのみを操作できます。テーブルに複数の空間参照が含まれている場合は、同じ空間参照を使用するレコードのみを含むビューを作成できます。
データベース ビューを作成するには、[データベース ビューの作成 (Create Database View)] ジオプロセシング ツールまたは ArcGIS Desktop のデータベースのショートカット メニューを使用するか、使用しているデータベース管理システム (DBMS) に固有の SQL を使用できます。
ユーザーがビューを作成するには、特定のデータベース権限が必要です。たとえば、Oracle または Microsoft SQL Server データベースでは、ユーザーに create view 権限を付与する必要があります。一部のデータベース管理システムでは、自身が所有者でないフィーチャクラスまたはテーブルからビューを作成する場合、他のユーザーにビューを参照する権限を割り当てることはできません。この場合は、元のテーブルの所有者から、他のユーザーに権限を割り当てるための権限を付与してもらう必要があります。
以下は、データベース ビューを操作する場合の注意事項です。
- ビューは、データベース内でオブジェクトとして存在し、[データベース ビューの作成 (Create Database View)] ツールを使用してジオデータベース テーブルに定義した場合でも、ジオデータベースには登録されません。
- 基になるテーブルのスキーマに対して行われた変更は、ビューに反映されません。追加された列をビューに含めるには、これらの列を含むようにビューを再定義する必要があります。
- ArcGIS Desktop および ArcGIS フィーチャ サービスではデータベース ビューを使用してデータを編集できません。
- バージョン対応登録されたジオデータベース テーブルまたはフィーチャクラスでビューを作成した場合、表示されるのはベース テーブルのデータだけで、差分テーブルに格納されている編集内容は表示されません。ArcGIS クライアントを使用してビューで編集内容を表示するには、編集内容をリコンサイルし、デフォルト バージョンにポストし、ジオデータベースを圧縮する必要があります。SQL クライアント、サードパーティ クライアント、またはカスタム クライアントを使用してビューで編集内容を表示するには、ジオデータベース テーブルまたはフィーチャクラスをバージョン対応登録したときに自動的に作成されるバージョン対応ビューを使用します。
- ビュー定義に空間列を含める場合、空間列は SQL ジオメトリ データ タイプである必要があり、空間列の取得元のフィーチャクラスはバージョン対応登録できず、ビュー定義内の空間列を含むフィーチャクラスの ObjectID も含める必要があります。
ジオデータベースに登録されたビュー
データベースにジオデータベースが含まれる場合、[データベース ビューの作成 (Create Database View)] ツールまたは SQL を使用してデータベース ビューを作成し、[ジオデータベースに登録 (Register with Geodatabase)] ジオプロセシング ツールを使用してジオデータベースにそのビューを登録できます。
ジオデータベースにビューを登録する理由は次のとおりです。
- ジオデータベースにビューを登録すると、ビューに関する情報がジオデータベースのシステム テーブルに格納されます。これは、ジオデータベースに空間ビューを登録した場合に特に有益です。それは、空間ビューを登録するときに、ジオメトリ タイプ、空間参照、および範囲を定義すると、空間ビューをマップに追加する際のパフォーマンスが向上するためです。
- ビューの所有者である場合、ジオデータベースに登録されているビューでメタデータを定義できます。
- 検索のみのフィーチャ サービスで、登録済みのビューを公開できます。
フィーチャクラスで SQL ジオメトリ タイプが使用されている場合、およびフィーチャクラスがバージョン対応登録されていない場合、ビューに 1 つの空間列を含めることができます。空間ビューを作成するには、空間列とフィーチャクラスの ObjectID をビュー定義に含め、それを登録します。
ジオデータベースに登録されたビューは、ArcGIS クライアントおよびサービスでは編集できません。
バージョン対応ビュー
バージョン対応ビューには、SQL を使用してジオデータベースのテーブルまたはフィーチャクラスに特定のバージョンでアクセスしたり、これらを編集できるように、データベース ビュー、ストアド プロシージャ、トリガー、および関数が組み込まれています。
バージョン対応ビューは次のような目的で使用されます。
- バージョン対応ビューに、テーブルの差分テーブルに現在格納されている編集内容が取り込まれます。
- バージョン対応ビューでは、SQL またはサードパーティ アプリを使用して、従来のバージョン対応のテーブルおよびフィーチャクラスを編集できます。
ArcGIS クライアントは、テーブルとフィーチャクラスをトラディショナル バージョニング対応登録するとき、自動的にそれらのバージョン対応ビューを作成します。バージョン対応ビューは、トラディショナル バージョニングでのみサポートされています。
バージョン対応ビューは、バージョン対応登録された個々のテーブルまたはフィーチャクラス内のすべてのデータを操作します。WHERE 句を使用して複数のテーブルを結合したり、バージョン対応ビューに含める行や列を制限することはできません。
バージョン対応ビューの主な用途は、SQL を使用して従来のバージョン対応データを編集することです。ArcGIS クライアント アプリケーションを使用して、バージョン対応ビューから基になるテーブルやフィーチャクラスを編集することはできません。バージョン対応ビューの基になるテーブルやフィーチャクラスは、SQL を使用してジオデータベース データを編集するための ArcGIS の要件を満たす必要があります。
履歴管理ビュー
履歴管理ビューは、履歴管理が有効なバージョン非対応のテーブルまたはフィーチャクラスに定義されたデータベース ビューです。 履歴管理ビューには、履歴管理ビューを通じて編集を行ったときに履歴管理テーブルを最新に保つトリガーも含まれています。履歴管理ビューは、データセットの履歴管理を有効にするとき、または履歴管理が有効なバージョン非対応のデータセットで SQL アクセスを有効にするときに作成されます。
履歴管理ビューは次のような目的で使用されます。
- 履歴管理ビューを使用して、履歴管理が有効なテーブルの履歴テーブルのデータにアクセスできます。
- 履歴管理ビューでは、SQL を使用して履歴管理が有効なテーブルおよびフィーチャクラスを編集できます。
履歴管理ビューは、個々のテーブルまたはフィーチャクラス内のすべてのデータを操作します。WHERE 句を使用して複数のテーブルを結合したり、履歴管理ビューに含める行や列を制限することはできません。