다음을 통해 공유


뷰 사용 시나리오

뷰를 사용하면 각 사용자가 데이터베이스를 보는 시각에 초점을 맞추고 데이터 조작을 간소화하며 사용자 지정할 수 있습니다. 뷰는 뷰의 원본이 되는 기본 테이블에 직접 액세스할 수 있는 권한을 부여하지 않고 뷰를 통해 데이터에 액세스하도록 하기 때문에 보안 메커니즘으로 사용할 수 있습니다. 뷰를 사용하면 이전 버전과 호환되는 인터페이스를 통해 스키마가 변경된 기존 테이블을 에뮬레이트할 수 있습니다. 또한 MicrosoftSQL Server에서 데이터를 복사하거나 복사해 넣을 때 뷰를 사용하면 성능을 향상시키고 데이터를 분할할 수 있습니다.

특정 데이터에 초점을 맞춤

뷰를 사용하면 원하는 특정 데이터와 특정 태스크에 초점을 맞출 수 있습니다. 불필요하거나 까다로운 데이터를 뷰에서 제외할 수 있기 때문입니다.

예를 들어 AdventureWorks 예제 데이터베이스의 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 쿼리를 뷰로 정의해 두면 해당 데이터에 대해 추가 작업을 수행할 때마다 모든 조건과 제한을 지정할 필요가 없습니다. 예를 들어 보고 목적으로 사용되고 하위 쿼리, 외부 조인 및 집계를 수행하여 여러 테이블로부터 데이터를 검색하는 데 사용하는 복잡한 쿼리를 뷰로 만들 수 있습니다. 뷰를 사용하면 보고서가 생성될 때마다 기본 쿼리를 작성하거나 제출하지 않고 대신 뷰를 쿼리하면 되기 때문에 쉽게 데이터에 액세스할 수 있습니다. 데이터 조작에 대한 자세한 내용은 쿼리 기본 사항을 참조하십시오.

복잡한 쿼리는 아니지만 AdventureWorks 예제 데이터베이스의 vBikes 뷰를 사용하면 뷰를 생성하는 데 필요한 JOIN 절을 구성하지 않고도 특정 데이터에 초점을 맞출 수 있습니다.

매개 변수가 있는 뷰 또는 WHERE 절 검색 조건이나 기타 쿼리 부분에 매개 변수가 있는 뷰로서 논리적으로 실행되는 인라인 사용자 정의 함수를 만들 수도 있습니다. 자세한 내용은 인라인 사용자 정의 함수를 참조하십시오.

이전 버전과의 호환성 제공

스키마가 변경된 경우 뷰를 사용하여 이전 버전과 호환되는 테이블 인터페이스를 만들 수 있습니다. 예를 들어 응용 프로그램에서 다음 스키마가 있는 정규화되지 않은 테이블을 참조했을 수 있습니다.

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

데이터베이스에 데이터를 중복 저장하지 않으려면 테이블을 다음 두 테이블로 분할하여 테이블을 정규화할 수 있습니다.

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에 따라 검색할 데이터를 결정할 수 있습니다.

데이터 내보내기 및 가져오기

뷰를 사용하면 데이터를 다른 응용 프로그램으로 내보낼 수 있습니다. 예를 들어 Microsoft Excel에서 AdventureWorks 데이터베이스의 CustomerSalesOrderHeader 테이블을 사용하여 판매 데이터를 분석할 수 있습니다. 이 작업을 하려면 CustomerSalesOrderHeader 테이블을 기반으로 뷰를 만듭니다. 그런 다음 bcp 유틸리티를 사용하여 뷰에서 정의한 데이터를 내보낼 수 있습니다. 또한 INSERT 문을 사용하여 뷰에 행을 삽입할 수 있을 경우 bcp 유틸리티 또는 BULK INSERT 문을 사용하여 데이터 파일에서 특정 뷰로 데이터를 가져올 수 있습니다. 뷰에 데이터를 복사할 때의 제한 사항은 INSERT(Transact-SQL)를 참조하십시오. bcp 유틸리티 및 BULK INSERT 문을 사용하여 뷰로 또는 뷰에서 데이터를 복사하는 방법은 뷰에서 대량 데이터 내보내기 및 대량 데이터 가져오기를 참조하십시오.

여러 서버에 분할된 데이터 결합

뷰에서 Transact-SQL UNION 집합 연산자를 사용하면 여러 테이블로부터의 둘 이상의 쿼리 결과를 하나의 결과 집합으로 결합할 수 있습니다. 이것은 분할된 뷰라는 하나의 테이블로 나타납니다. 예를 들어 한 테이블에 워싱턴에 대한 판매 데이터가 있고 다른 테이블에 캘리포니아에 대한 판매 데이터가 있으면 두 테이블에서 UNION을 사용하여 뷰를 만들 수 있습니다. 그러면 뷰에 두 주의 판매 데이터가 모두 나타납니다.

분할된 뷰를 사용하려면 동일한 테이블을 여러 개 만들고 각 테이블에 추가할 수 있는 데이터 범위를 결정하는 제약 조건을 지정해야 합니다. 그러면 이 기본 테이블을 사용하여 뷰가 생성됩니다. 뷰를 쿼리할 때 SQL Server는 쿼리와 관련된 테이블을 자동으로 결정하여 이 테이블만 참조합니다. 예를 들어 쿼리에서 워싱턴 주의 판매 데이터만 필요하다고 지정하면 SQL Server에서는 워싱턴 판매 데이터가 포함된 테이블만 읽고 다른 테이블에는 액세스하지 않습니다.

원격 서버 등 유형이 다른 여러 원본의 데이터를 기반으로 분할된 뷰를 만들어 연합 데이터베이스 서버를 만들 수 있습니다. 예를 들어 각 데이터 원본으로부터 데이터를 검색하는 분산 쿼리를 만들고 이 분산 쿼리에서 뷰를 만들면 각각 다른 지역의 데이터가 저장되는 여러 원격 서버에서 데이터를 결합할 수 있습니다. 모든 쿼리는 쿼리에서 요청한 데이터가 있는 원격 서버의 테이블에서만 데이터를 읽고 뷰에서 분산 쿼리가 참조하는 다른 서버는 액세스하지 않습니다.

데이터를 여러 서버로 분할할 때 해당 데이터의 한 부분에만 액세스하는 쿼리는 검색할 데이터가 적기 때문에 빨리 실행됩니다. 다른 서버나 여러 프로세서를 사용하는 컴퓨터에 테이블이 있으면 쿼리와 관련된 각 테이블을 병렬식으로 검색할 수 있으므로 쿼리 성능이 향상됩니다. 또한 인덱스 다시 작성 또는 테이블 백업과 같은 유지 관리 태스크를 더 빠르게 실행할 수 있습니다.

분할된 뷰를 사용할 때에도 데이터가 하나의 테이블로 나타나고 해당 기본 테이블을 수동으로 참조하지 않고도 쿼리할 수 있습니다.

[!참고]

데이터를 하나의 서버에 대해 로컬로 분할할 때는 분할된 테이블을 사용하는 것이 좋습니다. 자세한 내용은 분할된 테이블 및 인덱스를 참조하십시오.

다음 조건 중 하나를 만족할 경우 분할된 뷰를 업데이트할 수 있습니다.

  • 논리를 사용하여 뷰에서 INSERT, UPDATE 및 DELETE 문을 지원하도록 INSTEAD OF 트리거를 정의한 경우

  • 뷰와 INSERT, UPDATE 및 DELETE 문이 모두 업데이트할 수 있는 분할된 뷰에 정의된 규칙을 따를 경우. 자세한 내용은 분할된 뷰 만들기를 참조하십시오.