ビューの使用に関するシナリオ

ビューは一般的に、各ユーザーのデータベースに対する認識を特化、簡素化、およびカスタマイズするために使用されます。ビューは、基になるベース テーブルに直接アクセスする権限をユーザーに与えずに、ユーザーがビューを介してデータにアクセスできるように設定することにより、セキュリティのメカニズムとして使用できます。ビューを使用すると、以前に存在していたテーブルのスキーマが変更された場合に、このテーブルをエミュレートするための後方互換性インターフェイスを提供できます。また、Microsoft SQL Server にデータをコピーする場合、および SQL Server からデータをコピーする場合に、パフォーマンスの向上やデータのパーティション分割にビューを使用できます。

特定のデータだけを表示するには

ビューを使用することにより、ユーザーは、興味がある特定のデータや担当している特定の作業だけを表示できます。不要なデータや機密データはビューから除外できます。

たとえば、AdventureWorks2008R2 サンプル データベースの vBikes ビューには、現時点で在庫として残っているすべての自転車の名前が表示されます。このビューでは、Product テーブルの Name フィールドを除くすべてのフィールドが除外されるので、自転車の部品ではなく完成した自転車の名前だけが返されます。

CREATE VIEW vBikes AS
SELECT DISTINCT p.[Name] FROM Production.Product p
    JOIN Production.ProductInventory i ON p.ProductID = i.ProductID
    JOIN Production.ProductSubCategory ps 
        ON p.ProductSubcategoryID = ps.ProductSubCategoryID 
    JOIN Production.ProductCategory pc 
        ON (ps.ProductCategoryID = pc.ProductCategoryID 
            AND pc.Name = N'Bikes')
        AND i.Quantity > 0

データ操作を簡素化するには

ビューを使用して、ユーザーのデータ操作を簡素化できます。データに対して操作を実行するたびに、ユーザーがすべての条件および制限を指定しなくて済むように、頻繁に使用する結合、射影、UNION クエリ、および SELECT クエリをビューとして定義できます。たとえば、レポートを作成するために、サブクエリ、外部結合、および集計を実行して複数のテーブルからデータを取り出すような複雑なクエリを、ビューとして作成できます。このビューを使用すれば、レポートを作成するたびに基になるクエリを記述したり送信したりする必要がないので、データへのアクセスが簡素化されます。つまり、ビューに対するクエリを実行すればよいのです。データ操作の詳細については、「クエリの基礎」を参照してください。

複雑なクエリではありませんが、AdventureWorks2008R2 サンプル データベースの vBikes ビューを使用すると、ユーザーはビューの生成に必要な JOIN 句を作成することなく特定のデータだけを表示できます。

また、パラメータ化されたビュー、つまり WHERE 句の検索条件またはクエリの別の部分にパラメータがあるビューとして論理的に機能するインライン ユーザー定義関数も作成できます。詳細については、「インライン ユーザー定義関数」を参照してください。

後方互換性を維持するには

テーブルのスキーマが変更された場合、ビューを使用すると、そのテーブルに対する後方互換性インターフェイスを作成できます。たとえば、あるアプリケーションで、次のスキーマを使用する正規化されていないテーブルを参照しているとします。

Employee(Name, BirthDate, Salary, Department, BuildingName)

データベースに重複を避けてデータを格納するには、テーブルを次の 2 つのテーブルに分割してテーブルを正規化する方法が考えられます。

Employee2(Name, BirthDate, Salary, DeptId)

Department(DeptId, BuildingName)

Employee のデータを依然として参照する後方互換性インターフェイスを提供するには、古い Employee テーブルを削除して次のビューで置き換えることができます。

CREATE VIEW Employee AS
SELECT Name, BirthDate, Salary, BuildingName
FROM Employee2 e, Department d
WHERE e.DeptId = d.DeptId

これで、正規化前は Employee テーブルをクエリしていたアプリケーションで、Employee ビューからデータを取得できるようになります。このアプリケーションは、Employee からの読み取りしか行わないのであれば、変更する必要はありません。場合によっては、INSTEAD OF トリガを新しいビューに追加して、そのビューの INSERT 操作、DELETE 操作、および UPDATE 操作を基になるテーブルと対応付けることにより、Employee を更新するアプリケーションもサポートできます。詳細については、「INSTEAD OF トリガのデザイン」を参照してください。

データをカスタマイズするには

ビューを使用すると、同じデータを同時に使用する場合でも、ユーザーごとに異なる方法でデータを表示できます。特に、同一のデータベースを共有するユーザーの関心とスキル レベルが多種多様な場合には有益です。たとえば、経理課長が担当する顧客のデータだけを取得するビューを作成できます。このビューでは、そのビューを使用する経理課長のログイン ID に基づいて、取得するデータを判断できます。

データをインポートおよびエクスポートするには

ビューは、他のアプリケーションにデータをエクスポートするために使用できます。たとえば、AdventureWorks2008R2 データベースの Customer テーブルと SalesOrderHeader テーブルを使用して Microsoft Excel を使用した売上データを分析できます。この操作を行うためには、まず、Customer テーブルと SalesOrderHeader テーブルに基づいたビューを作成します。次に、bcp ユーティリティを使用して、ビューで定義されたデータをエクスポートできます。INSERT ステートメントを使用して行をビューに挿入できる場合には、bcp ユーティリティまたは BULK INSERT ステートメントを使用して、データ ファイルから特定のビューにデータをインポートすることもできます。データをビューにコピーする際の制限事項の詳細については、「INSERT (Transact-SQL)」を参照してください。bcp ユーティリティまたは BULK INSERT ステートメントを使用してビューにデータをコピーまたはビューからデータをコピーする方法の詳細については、「ビューからのデータの一括エクスポートとビューへのデータの一括インポート」を参照してください。

サーバー間でパーティション データを結合するには

ビューで Transact-SQL の set 演算子である UNION を使用すると、別個のテーブルで実行された複数のクエリの結果を結合して 1 つの結果セットにすることができます。この結果セットは、ユーザーにはパーティション ビューという 1 つのテーブルとして表示されます。たとえば、ワシントンの売上データを保持するテーブルとカリフォルニアの売上データを保持するテーブルがある場合、2 つのテーブルを UNION で結合することにより、1 つのビューを作成できます。このビューには、両方の地域の売上データが表示されます。

パーティション ビューを使用するには、同一のテーブルをいくつか作成し、各テーブルに追加できるデータの範囲を決定する制約を指定します。次に、これらのベース テーブルを使用するビューを作成します。このビューに対してクエリを実行すると、クエリに関係するテーブルが SQL Server により自動的に判断され、該当するテーブルだけが参照されます。たとえば、ワシントン州の売上データだけが必要であることをクエリで指定した場合には、SQL Server によりワシントンの売上データを保持するテーブルだけが読み取られ、他のテーブルはアクセスされません。

パーティション ビューを、リモート サーバーなどの複数の異種データ ソースのデータに基づいて作成すると、データベース サーバーの連合を作成できます。たとえば、組織のデータを地域ごとに保存するリモート サーバーのデータを結合するには、各データ ソースからデータを取得する分散クエリを作成し、次にその分散クエリに基づいたビューを作成します。このようなビューに対してクエリを実行すると、クエリで要求されたデータを保持するリモート サーバー上のテーブルのデータだけが読み取られます。ビューの分散クエリで参照されている他のサーバーはアクセスされません。

データを複数のサーバー間にパーティション分割している場合、データの一部だけにアクセスするクエリの方が、スキャンするデータの量が少ないため実行速度が速くなります。テーブルが複数のサーバーにある場合、または複数のプロセッサを持つコンピュータにある場合は、クエリの対象になるテーブルも並行してスキャンされます。これにより、クエリのパフォーマンスが向上します。また、インデックスの再構築やテーブルのバックアップなどのメンテナンス タスクもより高速に実行できます。

パーティション ビューでは、データは 1 つのテーブルとして表示されます。クエリの実行時も 1 つのテーブルのように扱うことができ、基になる適切なテーブルをユーザーが手動で参照する必要はありません。

注意

1 台のサーバーに対してローカルなデータをパーティション分割するには、パーティション テーブルを使用する方法をお勧めします。詳細については、「パーティション テーブルとパーティション インデックス」を参照してください。

パーティション ビューは、次のいずれかの条件を満たす場合に更新できます。

  • INSERT、UPDATE、および DELETE の各ステートメントをサポートするロジックと共に、INSTEAD OF トリガがビューに定義されている。

  • ビューと INSERT、UPDATE、DELETE の各ステートメントが、更新可能なパーティション ビューで定義されたルールに従っている。詳細については、「パーティション ビューの作成」を参照してください。