SQL 뷰를 사용하는 좋은 이유는 무엇입니까?


100

저는 SQL Server 2008 성경을 읽고 있으며 뷰 섹션을 다루고 있습니다. 그러나 저자는 실제로 견해 의 목적 을 설명하지 않습니다 . 뷰의 좋은 용도는 무엇입니까? 내 웹 사이트에서 사용해야하며 어떤 이점이 있습니까?


그 책 "SQL Server 2008 Bible"의 데이터베이스 파일을 제공해 주시겠습니까? 저자의 웹 사이트가 죽어서 그에게 연락 할 수 없습니다.

답변:


94

이전 답변 중 어느 것도 언급하지 않은 또 다른 용도는 테이블 구조 변경을 더 쉽게 배포하는 것입니다.

T_OLD활성 사용자에 대한 데이터가 포함 된 테이블 ( ) 을 폐기 하고 대신 비슷한 데이터 (이름 T_NEW)가 있는 새 테이블을 사용 하지만 활성 및 비활성 사용자 모두에 대한 데이터가 있는 새 테이블을 사용하고 하나의 추가 열을 사용하려고합니다 active.

시스템에를 수행하는 무수히 많은 쿼리가있는 SELECT whatever FROM T_OLD WHERE whatever경우 롤아웃을위한 두 가지 선택 사항이 있습니다.

1) Cold Turkey -DB를 변경하는 동시에 해당 쿼리가 포함 된 수많은 코드를 변경, 테스트 및 릴리스합니다. 하기가 매우 어렵고 (또는 심지어 조정) 매우 위험합니다. 나쁜.

2) 점진적 - 작성하여 DB를 변경 T_NEW, 테이블을 삭제 T_OLD테이블을 대신에 생성 VIEW 라는 T_OLD모방이 있음을 T_OLD표 100 % (예를 들어 뷰 쿼리입니다SELECT all_fields_except_active FROM T_NEW WHERE active=1 ).

그것은 당신이에서 해당 현재 선택을 어떤 코드를 공개하지 않도록 할 수 있습니다 것 T_OLD, 그리고 마이그레이션 코드에 대한 변경 작업을 수행 T_OLD하는 T_NEW여가.

이것은 간단한 예이며, 다른 것들이 훨씬 더 많이 관련되어 있습니다.

PS 반면에에서 직접 쿼리하는 대신 저장 프로 시저 API가 있었어야 T_OLD했지만 항상 그런 것은 아닙니다.


3
나는 용어 "저장 프로 시저 API"및 관련 전문가 / 단점 무지이고이 문서 도움이 발견 : codinghorror.com/blog/2005/05/...
제프 Widman을

파티에 늦어서 미안하지만 공연은 어때? 원래 테이블에 대한 조인이 필요하고 대신 뷰에 조인 할 경우 최상의 실행 계획을 사용합니까?
Zikato


V Good Indication
Afnan Ahmad

47

(Google 검색에 나온 첫 번째 자습서에서 복사했지만 (지금은 링크가 끊어짐) 직접 입력했을 때 얻을 수있는 모든 이점이 있습니다.)

보기에는 다음과 같은 이점이 있습니다.

  • 보안-기본 테이블에 직접 액세스 할 수없는 동안 사용자가 뷰에 액세스 할 수 있습니다. 이를 통해 DBA는 사용자에게 필요한 데이터 만 제공하는 동시에 동일한 테이블의 다른 데이터를 보호 할 수 있습니다.
  • 단순성-보기를 사용하여 복잡한 쿼리를 숨기고 재사용 할 수 있습니다.
  • 열 이름 시뮬레이션 또는 설명-뷰를 사용하여 열 이름에 별칭을 제공하여 더 기억하기 쉽고 의미있게 만들 수 있습니다.
  • 디딤돌-뷰는 "다단계"쿼리에서 디딤돌을 제공 할 수 있습니다. 예를 들어 각 영업 사원이 만든 판매 수를 계산하는 쿼리보기를 만들 수 있습니다. 그런 다음 해당 뷰를 쿼리하여 판매 횟수별로 판매 직원을 그룹화 할 수 있습니다.

나는 당신의 대답을 좋아하고 다른 것을 추가하는 많은 요점을 보지 않기 때문에 목록에 두 가지 추가를 제안해도 될까요? 인덱싱 된 뷰는 성능을 향상시킬 수 있습니다. 테이블이 아니라 직접보다는 전망에 대해 업데이트를 실행하면 잘못이 주요 생산 테이블 : 업데이트되지 않습니다 높은 자신감을 줄 수있다
데이비드 홀

목록에서 한 가지 더, 대부분의 DBA는 하나의 뷰를 조정할 수 있고 해당 뷰를 사용하는 대부분 (항상은 아님) 모든 쿼리가 조정되기 때문에 뷰 사용을 원합니다.
Nitin Midha 2010

이것은 내 책의 99 % 대답입니다.
John Steedman

BTW @ 데이비드 깨진 링크
마누엘 요르단

마지막으로 임시 테이블을 사용할 수 없습니까?
Jiechao Wang

16

Wikipedia의 몇 가지 이유 :

뷰는 테이블에 비해 다음과 같은 이점을 제공 할 수 있습니다.

  1. 뷰는 테이블에 포함 된 데이터의 하위 집합을 나타낼 수 있습니다.
  2. 뷰는 여러 테이블을 단일 가상 테이블로 조인하고 단순화 할 수 있습니다.
  3. 뷰는 집계 된 테이블로 작동 할 수 있습니다. 데이터베이스 엔진이 데이터 (합계, 평균 등)를 집계하고 계산 된 결과를 데이터의 일부로 표시하는
  4. 보기는 데이터의 복잡성을 숨길 수 있습니다. . 예를 들어보기가 Sales2000 또는 Sales2001로 표시되어 실제 기본 테이블을 투명하게 분할 할 수 있습니다.
  5. 는 저장하는 데 매우 적은 공간을 차지합니다 . 데이터베이스는보기에 대한 정의 만 포함하고 제공하는 모든 데이터의 사본은 포함하지 않습니다.
  6. 사용 된 SQL 엔진에 따라보기는 추가 보안을 제공 할 수 있습니다.
  7. 뷰는 테이블이 외부 세계 에 노출되는 정도를 제한 할 수 있습니다.

14

VIEWS는 조인 할 다른 선택 / 쿼리에 포함될 수있는 SELECT / CODE의 재사용 가능한 섹션으로 사용할 수 있으며 매번 전체 SELECT를 다시 만들지 않고도 다양한 필터를 사용할 수 있습니다.

또한 로직을 단일 위치에 배치하므로 코드베이스 전체에서이를 변경할 필요가 없습니다.

보세요

저장 프로 시저, 함수, 뷰, 트리거, 인라인 SQL 중에서 선택

뷰의 주요 장점은 대부분의 상황에서 테이블처럼 사용할 수 있지만 테이블과 달리 매우 복잡한 계산과 일반적으로 사용되는 조인을 캡슐화 할 수 있다는 것입니다. 또한 저장 프로 시저를 제외하고 db의 거의 모든 개체를 사용할 수 있습니다. 뷰는 요약 계산 필드 등을 얻기 위해 Order Detail이있는 Order라고하는 동일한 테이블 집합을 항상 조인해야 할 때 가장 유용합니다.


6
이 작업에 대해 매우 조심하십시오. 다른 뷰를 호출하는 뷰를 사용하면 성능이 매우 엉망이 될 수 있습니다.
HLGEM 2011 년

메서드를 만들고 메서드 안에 SQL 쿼리를 넣어서 그렇게 할 수 있습니다. 이 방법은 매번 재사용 할 수 있습니다. 그럼 왜보기 ???
ASharma7

10

뷰는 추상화 계층이며, 데이터베이스 스키마를 캡슐화하고 내부 구현 세부 정보를 변경하는 결과로부터 사용자를 보호하는 등 좋은 추상화 계층이 수행하는 작업을 수행합니다.

인터페이스입니다.


1
추가 추상화를 위해 뷰에 뷰를 쌓지 않는 한.
HLGEM 2011 년

나는 관계형 데이터베이스에서 모든 종류의 다단계 추상화를 효과적으로 거부했다고 생각합니다. 그리고 저장 프로 시저에서 저장 프로 시저를 호출하지도 않습니다. :)
dkretz 2011 년

3

다음은 몇 가지 기준에 따라 엔터티를 제한하기 위해 뷰를 사용하는 매우 일반적인 사용입니다.

표 : USERS에는 모든 사용자가 포함됩니다.

보기 : ACTIVE_USERS에는 일시 중지, 차단, 활성화 대기 중이며 향후 활성 요구 사항의 일부로 정의 할 수있는 기준을 충족하지 않는 사용자를 제외한 모든 사용자가 포함됩니다. 이렇게하면 ACTIVE_USERS가 항상 원하지 않는 행을 숨길 수 있기 때문에 원하지 않는 행을 숨길 수 있으므로 원하지 않는 경우 USERS 테이블에서 행을 삭제할 필요가 없습니다.

이렇게하면 사용자 관리 페이지에서 테이블을 사용할 수 있지만 나머지 응용 프로그램은 프로세스를 실행하고 데이터에 액세스 / 수정할 수있는 유일한 사용자 일 수 있으므로 ACTIVE_USERS를 사용할 수 있습니다.


2

뷰를 사용하면 여러 다른 테이블의 데이터를 결합하고 형식을 지정할 수 있습니다 (필드 결합, 더 의미있는 필드 이름 제공 등). 최종 사용자가 더 쉽게 사용할 수 있습니다. 이것은 데이터베이스 모델의 추상화입니다. 또한 사용자에게 테이블 자체에 대한 직접 액세스 권한을 부여하지 않고 테이블의 데이터에 대한 액세스 권한을 부여하는 데 사용할 수도 있습니다.


2

다음은 테이블이 아닌 뷰를 직접 사용하는 몇 가지 이유입니다.

  • 단순성-보기를 사용하여 복잡한 쿼리를 숨길 수 있습니다.
  • 보안-보기는 선택한 일부 열에보기를 만들어 최종 사용자로부터 중요한 정보를 숨길 수 있습니다.
  • 보안-VIEW를 사용하여 테이블의 구조를 변경하는 보안 테이블.
  • 중복성-공통보기를 사용하여 모든 프로 시저 / 쿼리에서 중복 코드를 줄입니다.
  • 계산-모든 계산은 뷰 쿼리에서 한 번만 수행 할 수 있습니다.
  • 의미있는 이름-테이블에는 [Employee No]와 같은 별칭을 사용할 수있는 tbl_org_emp_id와 같은 id 이름이나 의미있는 이름이있을 수 있습니다.

에서 imexploring.com


1

일반적인 이유 / 용도의 작은 목록 :

  • 이를 사용하여 데이터의 형식 또는 '모양'을 변경합니다 (예 : 이름과 성을 함께 결합 할 수 있음).

    데이터에 대한 계산 또는 기타 조회 수행

    데이터 비정규 화 (여러 테이블의 데이터를 한 지점으로 추출)


-6

보기는 사악합니다! 가능하면이를 피하고 DVK (임시 데이터 마이그레이션)에서 언급 한 이유로 만 사용하십시오.

100 개의 테이블이있는 데이터베이스에서는 모든 테이블의 목적을 기억하기 어렵다는 것을 이해해야합니다. 이제 여기에 다른 300 개의 뷰를 추가하면 완전히 엉망이 될 것입니다. '보기 애호가'보다 중첩 된보기를 사용하고 저장 프로 시저에서 중첩 된보기를 사용하는 경향이 있습니다. 나는 이제 깊이 4 번 중첩 된 뷰가있는 데이터베이스로 개인적으로 작업합니다! 따라서 저장 프로 시저의 가장 간단한 논리를 이해하려면 먼저 모든 뷰를 살펴 봐야합니다.


8
-1 조회수가 좋습니다. 그들은 수 있습니다 당신이 부적절하게 사용할 경우 악을하게 -하지만 그건 그냥 아무것도에 대한 사실입니다.
NullUserException

1
잘못 사용하면보기가 나쁠 수 있습니다. 그것들을 가장 많이 사용하는 사람들은 그것들을 사용하여 추상적 인 것을하고 당신이 말한대로 수행하는 사람들 인 것 같습니다. 결과를 반환하기 전에 천만개의 recrods를 구체화해야하는 시점까지 뷰를 호출하는 뷰를 호출하는 뷰를 호출합니다. 테이블을 직접 호출하는 뷰는 매우 유용 할 수 있습니다.
HLGEM 2011 년

@HGLEM 다른 뷰에서 뷰 호출을 제한하는 방법이 있습니까?
Igor Soloydenko 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.