저는 SQL Server 2008 성경을 읽고 있으며 뷰 섹션을 다루고 있습니다. 그러나 저자는 실제로 견해 의 목적 을 설명하지 않습니다 . 뷰의 좋은 용도는 무엇입니까? 내 웹 사이트에서 사용해야하며 어떤 이점이 있습니까?
답변:
이전 답변 중 어느 것도 언급하지 않은 또 다른 용도는 테이블 구조 변경을 더 쉽게 배포하는 것입니다.
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했지만 항상 그런 것은 아닙니다.
(Google 검색에 나온 첫 번째 자습서에서 복사했지만 (지금은 링크가 끊어짐) 직접 입력했을 때 얻을 수있는 모든 이점이 있습니다.)
보기에는 다음과 같은 이점이 있습니다.
- 보안-기본 테이블에 직접 액세스 할 수없는 동안 사용자가 뷰에 액세스 할 수 있습니다. 이를 통해 DBA는 사용자에게 필요한 데이터 만 제공하는 동시에 동일한 테이블의 다른 데이터를 보호 할 수 있습니다.
- 단순성-보기를 사용하여 복잡한 쿼리를 숨기고 재사용 할 수 있습니다.
- 열 이름 시뮬레이션 또는 설명-뷰를 사용하여 열 이름에 별칭을 제공하여 더 기억하기 쉽고 의미있게 만들 수 있습니다.
- 디딤돌-뷰는 "다단계"쿼리에서 디딤돌을 제공 할 수 있습니다. 예를 들어 각 영업 사원이 만든 판매 수를 계산하는 쿼리보기를 만들 수 있습니다. 그런 다음 해당 뷰를 쿼리하여 판매 횟수별로 판매 직원을 그룹화 할 수 있습니다.
Wikipedia의 몇 가지 이유 :
뷰는 테이블에 비해 다음과 같은 이점을 제공 할 수 있습니다.
VIEWS는 조인 할 다른 선택 / 쿼리에 포함될 수있는 SELECT / CODE의 재사용 가능한 섹션으로 사용할 수 있으며 매번 전체 SELECT를 다시 만들지 않고도 다양한 필터를 사용할 수 있습니다.
또한 로직을 단일 위치에 배치하므로 코드베이스 전체에서이를 변경할 필요가 없습니다.
보세요
저장 프로 시저, 함수, 뷰, 트리거, 인라인 SQL 중에서 선택
뷰의 주요 장점은 대부분의 상황에서 테이블처럼 사용할 수 있지만 테이블과 달리 매우 복잡한 계산과 일반적으로 사용되는 조인을 캡슐화 할 수 있다는 것입니다. 또한 저장 프로 시저를 제외하고 db의 거의 모든 개체를 사용할 수 있습니다. 뷰는 요약 계산 필드 등을 얻기 위해 Order Detail이있는 Order라고하는 동일한 테이블 집합을 항상 조인해야 할 때 가장 유용합니다.
뷰는 추상화 계층이며, 데이터베이스 스키마를 캡슐화하고 내부 구현 세부 정보를 변경하는 결과로부터 사용자를 보호하는 등 좋은 추상화 계층이 수행하는 작업을 수행합니다.
인터페이스입니다.
다음은 몇 가지 기준에 따라 엔터티를 제한하기 위해 뷰를 사용하는 매우 일반적인 사용입니다.
표 : USERS에는 모든 사용자가 포함됩니다.
보기 : ACTIVE_USERS에는 일시 중지, 차단, 활성화 대기 중이며 향후 활성 요구 사항의 일부로 정의 할 수있는 기준을 충족하지 않는 사용자를 제외한 모든 사용자가 포함됩니다. 이렇게하면 ACTIVE_USERS가 항상 원하지 않는 행을 숨길 수 있기 때문에 원하지 않는 행을 숨길 수 있으므로 원하지 않는 경우 USERS 테이블에서 행을 삭제할 필요가 없습니다.
이렇게하면 사용자 관리 페이지에서 테이블을 사용할 수 있지만 나머지 응용 프로그램은 프로세스를 실행하고 데이터에 액세스 / 수정할 수있는 유일한 사용자 일 수 있으므로 ACTIVE_USERS를 사용할 수 있습니다.
다음은 테이블이 아닌 뷰를 직접 사용하는 몇 가지 이유입니다.
보기는 사악합니다! 가능하면이를 피하고 DVK (임시 데이터 마이그레이션)에서 언급 한 이유로 만 사용하십시오.
100 개의 테이블이있는 데이터베이스에서는 모든 테이블의 목적을 기억하기 어렵다는 것을 이해해야합니다. 이제 여기에 다른 300 개의 뷰를 추가하면 완전히 엉망이 될 것입니다. '보기 애호가'보다 중첩 된보기를 사용하고 저장 프로 시저에서 중첩 된보기를 사용하는 경향이 있습니다. 나는 이제 깊이 4 번 중첩 된 뷰가있는 데이터베이스로 개인적으로 작업합니다! 따라서 저장 프로 시저의 가장 간단한 논리를 이해하려면 먼저 모든 뷰를 살펴 봐야합니다.