데이터베이스에서보기를 작성하는 이유는 무엇입니까?


267

언제 그리고 왜 어떤 사람들은 데이터베이스에서 View를 만들어야한다고 결정합니까? 왜 일반 저장 프로 시저를 실행하거나 선택하지 않습니까?


비슷한 질문에 대한 답변 을 확인하십시오 .
Loukan ElKadi

답변:


464

보기에는 몇 가지 이점이 있습니다.

1.보기는 복잡성을 숨길 수 있습니다

여러 테이블을 조인해야하거나 복잡한 논리 또는 계산이 필요한 쿼리가있는 경우 해당 논리를 모두 뷰로 코딩 한 다음 테이블처럼 뷰에서 선택할 수 있습니다.

2. 뷰는 보안 메커니즘으로 사용될 수 있습니다

뷰는 테이블에서 특정 열 및 / 또는 행과 기본 테이블 대신 뷰에 설정된 권한을 선택할 수 있습니다. 이를 통해 사용자가 볼 필요가있는 데이터 만 표면 처리 할 수 ​​있습니다.

3. 뷰는 레거시 코드 지원을 단순화 할 수 있습니다

많은 코드를 손상시킬 수있는 테이블을 리팩토링해야하는 경우 테이블을 동일한 이름의보기로 바꿀 수 있습니다. 뷰는 원래 테이블과 정확히 동일한 스키마를 제공하지만 실제 스키마는 변경되었습니다. 이렇게하면 테이블을 참조하는 레거시 코드가 손상되지 않도록하여 여가 시간에 레거시 코드를 변경할 수 있습니다.

이들은 뷰가 어떻게 유용 할 수 있는지에 대한 많은 예 중 일부입니다.


84
항목 3은 아직 아무도 지적하지 않은 이유입니다
MedicineMan

2
포인트 3은 다른 것보다 정지 간격이 더 크다고 생각합니다. 결국 레거시 코드 업데이트로 돌아갈 때 뷰 뒤의 코드를 변경해야 할뿐만 아니라 뷰 위에 작성된 모든 코드도 변경해야합니다. 나의 2cents
super9

3
3 실제로 뷰의 가장 강력한 속성입니다. 논리적 데이터 독립성을 제공하는 데 도움 이되는 것은 기본 논리적 데이터베이스와 독립적으로 DB에 인터페이스를 제공 할 수 있다는 것이 매우 강력한 개념입니다.
Falaina

1
@ 존이 기술 부채는 조만간 상환해야합니까? 10 년 전에는 10 년 전에 쓴 엔지니어에게는 문제가되지 않지만 회사에게는 중요합니다.
super9

메인 DB와 그에 따라 모든 것을 변경하는 것은 '10 년 후에 필요할 수 있기 때문에 '만드는 것이 좋지 않습니다. 기술적 인 부채는 모든 비용으로 피할 수 없으며, 나중에 그것을 고치기위한 예상 비용이 지금 그것을 고치는 확실한 비용보다 많은 경우에만 가능합니다.
Mr. Boy

88

무엇보다도 보안에 사용될 수 있습니다. "고객"테이블이있는 경우 모든 영업 사원에게 이름, 주소, 우편 번호 등 필드에 액세스 할 수 있지만 credit_card_number는 액세스하지 못하게 할 수 있습니다. 액세스해야하는 열만 포함하는보기를 작성한 다음보기에 대한 액세스 권한을 부여 할 수 있습니다.


흥미 롭군 보안은 좋은 대답입니다. 어떤 '다른 것들'을 염두에두고 있습니까?
MedicineMan

13
나는이 질문에 대한 다른 답변들이 "다른 것들"을 설명 할 것이라고 가정했다. :-)
Graeme Perrow 2016 년

Select name, address, zipcode from customer대신 목적을 제공하지 creating a view않습니까?
PPB

@PranavBilurkar 예. 사용자가 실행하는 쿼리를 완전히 제어하는 ​​경우. 사용자가 일부 대화식 SQL 프로그램을 통해 또는 자체 스크립트를 작성하여 자체 쿼리를 실행할 수있는 경우 실행 select * from customer하여 모든 것에 액세스 할 수 있습니다. 테이블이 아닌 뷰에 대한 액세스 권한을 부여하면 뷰에없는 필드에 액세스 할 수 없습니다 .
Graeme Perrow

38

뷰는 쿼리를 캡슐화 한 것입니다. 조회로 전환 된 쿼리는 복잡 해지는 경향이 있으며 재사용을위한 조회로 저장하는 것이 유리할 수 있습니다.


복잡한 쿼리가있을 때 뷰를 만들고 싶습니까? 쿼리가 얼마나 복잡하고 임계 값은 얼마입니까? 당신이 그것을 볼 때 무엇을 얻습니까?
MedicineMan

4
개인 선택이 실제로 얼마나 복잡합니까, 정해진 임계 값이 없습니다. 예를 들어 여러 응용 프로그램이나 응용 프로그램의 다른 지점에서 논리를 복제하지 않으려는 경우 종종 뷰를 사용합니다. 뷰를 만들면 해당 로직을 숨기고 쉽게 공유 할 수 있습니다.
Chris Cameron-Mills

1
선택이있는 저장 프로 시저로 동일하게 수행 할 수 없습니까? 복잡한 쿼리 논리를 저장하는 방법으로 저장 프로 시저를 잘못 생각 했습니까? 저장 프로 시저 대신 뷰에서 복잡한 쿼리를 수행해야합니까? 여기에서 저장 프로 시저의 장점은 무엇입니까?
MedicineMan

2
@MedicineMan-저장 프로시 저는 결과 집합을 반환하지만 뷰는 다른 쿼리에서 테이블로 사용할 수있는 가상 테이블을 나타냅니다.
Andrew Hare

1
결과 집합 대 가상 테이블에 대한이 시점은 내가 이해하지 못한 핵심 포인트 인 것 같습니다.
MedicineMan

28

일반적으로보고 목적으로 자주 사용되는 데이터를 비정규 화 및 / 또는 집계하기위한보기를 만듭니다.

편집하다

정교하게 말하면, 개인, 회사, 역할, 소유자 유형, 주문, 주문 세부 정보, 주소 및 전화 번호가있는 데이터베이스가 있어야합니다. 개인 테이블에는 직원과 연락처 및 주소가 모두 저장되어 있습니다. 전화 테이블에는 개인과 회사 모두의 전화 번호가 저장되어 있으며 개발 팀은 직원 별 판매, 고객 별 판매, 지역별 판매, 월별 판매와 같은 보고서를 생성하거나 개발자가 아닌 사람이보고 데이터에 액세스 할 수 있도록하는 업무를 맡았습니다. , 상태 별 고객 등 나는 실제 엔티티의보다 통합 된보기 (말장난 의도가 없음)를 사용할 수 있도록 데이터베이스 엔티티 간의 관계를 비정규 화하는보기 세트를 작성합니다. 다음과 같은 장점이 있습니다.

  1. 쿼리 작성시 중복성 감소
  2. 엔터티 관련 표준 설정
  3. 복잡한 계산 및 조인에 대한 성능을 평가하고 최대화 할 수있는 기회 제공 (예 : MSSQL의 스키마 바운드 뷰에서 인덱싱)
  4. 팀 구성원 및 비 개발자에게 데이터를보다 쉽게 ​​액세스하고 직관적으로 제공

1
이것에 대해 자세히 설명해 주시겠습니까? 귀하의 답변에 대한 투표는 상당히 많지만 다른 사람들이 생각하는 가치를 얻지 못했습니다
MedicineMan

11

몇 가지 이유 : 복잡한 조인이있는 경우 액세스 할 때마다 항상 조인이 올 바르고 개발자가 필요로하는 모든 테이블을 기억할 필요가 없도록보기를 갖는 것이 가장 좋습니다. 일반적으로 이는 모든 재무 보고서가 동일한 데이터 세트를 기반으로하는 것이 매우 중요한 재무 애플리케이션에 대한 것일 수 있습니다.

사용자가 볼 수있는 레코드를 제한하려는 경우 뷰를 사용하고 기본 테이블이 아닌 뷰에만 액세스 권한을 부여한 후 뷰를 조회 할 수 있습니다.

Crystal 보고서는 저장된 procs에 뷰를 사용하는 것을 선호하므로 많은 보고서 작성을하는 사람들은 많은 뷰를 사용하는 경향이 있습니다.

뷰는 데이터베이스를 리팩토링 할 때 매우 유용합니다. 변경 사항을 숨겨서 이전 코드가보기를 작성하여 변경 사항을 볼 수 없도록 할 수 있습니다. 리팩토링 데이터베이스를 읽으면 리팩토링하는 매우 강력한 방법이므로 이것이 어떻게 작동하는지 확인하십시오.


7

저장 프로 시저에 비해 뷰의 주요 이점 중 하나는 테이블을 사용하는 것처럼 뷰를 사용할 수 있다는 것입니다. 즉, FROM조회 절 에서 뷰를 직접 참조 할 수 있습니다 . 예, SELECT * FROM dbo.name_of_view.

다른 모든 방법으로 저장 프로 시저가 더 강력합니다. 당신은 다음과 같은 매개 변수를 전달할 수 있습니다 out당신이 할 수있는, 효과적으로 한 번에 여러 값을 반환 할 수 있도록 매개 변수 SELECT, INSERT, UPDATE, 및 DELETE운영, 등 등

FROM절 내에서 View의 쿼리 기능을 원하지만 매개 변수를 전달하려는 경우에도 그렇게하는 방법이 있습니다. 이를 테이블 반환 함수라고합니다.

다음은이 주제에 대한 매우 유용한 기사입니다.

http://databases.aspfaq.com/database/should-i-use-a-view-a-stored-procedure-or-a-user-defined-function.html

편집 : 그건 그렇고, 이런 종류의 질문은 테이블 뷰 함수에 비해 뷰가 어떤 이점을 가지고 있습니까? 나는 그것에 대한 좋은 대답이 없지만 뷰를 만드는 T-SQL 구문은 테이블 반환 함수보다 간단하며 데이터베이스 사용자는 뷰에 더 익숙 할 수 있습니다.


SELECT 문에 대한 저장 프로 시저 문제를 해결하기위한 몇 가지 답변 중 하나 인 +1 테이블 함수 문제를 제기 할 수 있습니다. 기본적으로보기는 동일한 엔진을 공유하므로 기능보다 성능이 우수합니다. SQL에서 trabsactional SQL (PL / SQL)로 전환 할 때 지불해야하는 오버 헤드 (적어도 Oracle에서는)가 있습니다. 그러나 다른 모든 것 (보안, 캡슐화 등)은 뷰와 관련된 절차 나 기능에 동일하게 적용됩니다.
APC

뷰의 구조에 따라 일부 뷰를 인덱싱 할 수 있습니다. 이는 테이블 반환 함수보다 크게 개선 된 것입니다.
HLGEM

6

ORM과 테이블 사이에 좋은 "중간자"역할을 할 수 있습니다.

예:

SomeColumn 열이 다른 테이블로 이동하고 일대 다 관계를 갖도록 구조를 변경해야하는 Person 테이블이있었습니다.

그러나 개인과 관련하여 대부분의 시스템은 SomeColumn을 단일 항목으로 사용했습니다. 우리는 뷰를 사용하여 SomeColumns를 모두 모아서 뷰에 넣었습니다.

이는 데이터 계층이 변경되었지만 비즈니스 요구 사항이 근본적으로 변경되지 않았기 때문에 작동했기 때문에 비즈니스 개체를 변경할 필요가 없었습니다. 비즈니스 객체가 변경되어야한다면 이것이 가능한 해결책이라고 생각하지는 않지만 뷰는 확실히 좋은 중간 지점으로 작동합니다.


1
흥미 롭군 귀하의 경우에는 테이블에 대한 인터페이스와 거의 같습니다.
MedicineMan

5

특정 데이터 보기에 집중하기 사용자는 관심있는 특정 데이터 및 담당하는 특정 작업에 집중할 수 있습니다. 불필요한 데이터는보기에서 제외 될 수 있습니다. 또한 사용자는 기본 테이블의 데이터가 아닌 뷰에 정의 된 데이터 만 볼 수 있기 때문에 데이터 보안이 향상됩니다. 보안 목적으로보기를 사용하는 방법에 대한 자세한 내용은보기를 보안 메커니즘으로 사용을 참조하십시오.

데이터 조작 단순화 뷰는 사용자가 데이터를 조작하는 방법을 단순화 할 수 있습니다. 자주 사용하는 조인, 프로젝션, UNION 쿼리 및 SELECT 쿼리를 뷰로 정의하여 사용자가 해당 데이터에 대해 추가 작업을 수행 할 때마다 모든 조건과 자격을 지정할 필요가 없도록 할 수 있습니다. 예를 들어,보고 목적으로 사용되고 하위 쿼리, 외부 조인 및 집계를 수행하여 테이블 그룹에서 데이터를 검색하는 복잡한 쿼리를보기로 만들 수 있습니다. 보고서를 생성 할 때마다 기본 쿼리를 작성하거나 제출할 필요가 없으므로 뷰는 데이터에 대한 액세스를 단순화합니다. 대신 조회가 조회됩니다. 데이터 조작에 대한 자세한 정보.

논리적으로 매개 변수화 된보기로 작동하는 인라인 사용자 정의 함수 또는 WHERE 절 검색 조건에 매개 변수가있는보기를 작성할 수도 있습니다. 자세한 내용은 인라인 사용자 정의 함수를 참조하십시오.

데이터 보기 를 사용자 지정 하면 서로 다른 사용자가 동일한 데이터를 동시에 사용하는 경우에도 다른 방식으로 데이터를 볼 수 있습니다. 이것은 많은 다른 관심과 기술 수준을 가진 사용자가 동일한 데이터베이스를 공유 할 때 특히 유리합니다. 예를 들어, 계정 관리자와 거래하는 고객에 대한 데이터 만 검색하는보기를 작성할 수 있습니다. 보기는보기를 사용하는 계정 관리자의 로그인 ID를 기반으로 검색 할 데이터를 판별 할 수 있습니다.

데이터 를 내보내고 가져 오는 방법 보기를 사용하여 다른 응용 프로그램으로 데이터를 내보낼 수 있습니다. 예를 들어 펍 데이터베이스의 상점 및 판매 테이블을 사용하여 Microsoft® Excel을 사용하여 판매 데이터를 분석 할 수 있습니다. 이를 위해 상점 및 판매 테이블을 기반으로보기를 작성할 수 있습니다. 그런 다음 bcp 유틸리티를 사용하여보기에서 정의한 데이터를 내보낼 수 있습니다. INSERT 문을 사용하여 행을보기에 삽입 할 수 있도록 bcp 유틸리티 또는 BULK INSERT 문을 사용하여 데이터 파일에서 특정보기로 데이터를 가져올 수도 있습니다. 데이터를 뷰에 복사하기위한 제한 사항에 대한 자세한 정보는 INSERT를 참조하십시오. bcp 유틸리티 및 BULK INSERT 문을 사용하여보기와 데이터를 복사하는 방법에 대한 자세한 정보는보기에서 복사 또는보기에서 복사를 참조하십시오.

분할 된 데이터를 결합하려면 뷰 내에서 Transact-SQL UNION 집합 연산자를 사용하면 별도의 테이블에서 두 개 이상의 쿼리 결과를 단일 결과 집합으로 결합 할 수 있습니다. 이는 분할 된 뷰라는 단일 테이블로 사용자에게 나타납니다. 예를 들어 한 테이블에 Washington의 판매 데이터가 있고 다른 테이블에 California의 판매 데이터가있는 경우 해당 테이블의 UNION에서 뷰를 만들 수 있습니다. 보기는 두 지역의 판매 데이터를 나타냅니다. 분할 된 뷰를 사용하려면 각 테이블에 추가 할 수있는 데이터 범위를 결정하는 제약 조건을 지정하여 동일한 여러 테이블을 만듭니다. 그런 다음이 기본 테이블을 사용하여보기가 작성됩니다. 뷰를 쿼리 할 때 SQL Server는 쿼리의 영향을받는 테이블을 자동으로 확인하고 해당 테이블 만 참조합니다. 예를 들어 쿼리에서 Washington 주에 대한 판매 데이터 만 필요하다고 지정하면 SQL Server는 Washington 판매 데이터가 포함 된 테이블 만 읽습니다. 다른 테이블에는 액세스하지 않습니다.

분할 된 뷰는 동일한 데이터베이스의 테이블뿐만 아니라 원격 서버와 같은 여러 이기종 소스의 데이터를 기반으로 할 수 있습니다. 예를 들어 조직의 다른 지역에 대한 데이터를 저장하는 각기 다른 원격 서버의 데이터를 결합하기 위해 각 데이터 소스에서 데이터를 검색하는 분산 쿼리를 만든 다음 해당 분산 쿼리를 기반으로보기를 만들 수 있습니다. 모든 쿼리는 쿼리에서 요청한 데이터가 포함 된 원격 서버의 테이블에서 데이터 만 읽습니다. 뷰에서 분산 쿼리가 참조하는 다른 서버에는 액세스 할 수 없습니다.

여러 테이블 또는 여러 서버에서 데이터를 분할하면 스캔 할 데이터가 적기 때문에 일부 데이터에만 액세스하는 쿼리가 더 빠르게 실행될 수 있습니다. 테이블이 다른 서버 나 여러 프로세서가있는 컴퓨터에있는 경우 쿼리와 관련된 각 테이블을 병렬로 스캔하여 쿼리 성능을 향상시킬 수 있습니다. 또한 인덱스 다시 작성 또는 테이블 백업과 같은 유지 관리 작업이보다 빠르게 실행될 수 있습니다. 분할 된 뷰를 사용하면 데이터가 여전히 단일 테이블로 표시되며 올바른 기본 테이블을 수동으로 참조하지 않고도 쿼리를 쿼리 할 수 ​​있습니다.

이러한 조건 중 하나가 충족되면 분할 된 뷰를 업데이트 할 수 있습니다. INSTEAD OF 트리거는 INSERT, UPDATE 및 DELETE 문을 지원하는 논리를 사용하여 뷰에서 정의됩니다.

뷰와 INSERT, UPDATE 및 DELETE 문은 모두 업데이트 가능한 분할 뷰에 대해 정의 된 규칙을 따릅니다. 자세한 내용은 분할 된 뷰 만들기를 참조하십시오.

https://technet.microsoft.com/en-us/library/aa214282(v=sql.80).aspx#sql:join


5

일반적인 두 가지 이유는 다음과 같습니다.

보안을 위해 사용할 수 있습니다. 기본 테이블에 대한 권한을 부여하지 않고 열 또는 행 액세스를 제한하고보기를 볼 수있는 권한을 사용자에게 부여하는보기를 작성하십시오.

편리하게 사용할 수 있습니다. 뷰에서 항상 함께 사용하는 일부 테이블을 결합하십시오. 이렇게하면 쿼리가 일관되고 쉬워집니다.


3

이를 수행하는 데는 여러 가지 이유가 있습니다. 때로는 모든 조인을 수행하는 대신 테이블 이름을 쿼리 할 수 ​​있으므로 일반적인 조인 쿼리를 쉽게 수행 할 수 있습니다.

또 다른 이유는 데이터를 다른 사용자로 제한하는 것입니다. 예를 들어 :

표 1 : 열-USER_ID; USERNAME; SSN

관리자는 실제 테이블에 대한 권한을 가질 수 있지만 SSN에 액세스하기를 원하지 않는 사용자는 다음과 같이보기를 작성합니다.

뷰 사용자 이름을 SELECT user_id, username FROM Table1;

그런 다음 테이블이 아닌 뷰에 액세스 할 수있는 권한을 부여하십시오.


2

레거시 데이터베이스에 대한보고를 수행 할 때 뷰는 신의 선물이 될 수 있습니다. 특히, 비밀 5 자 이름 (여기서 2는 공통 접두사입니다!) 대신 감각 테이블 이름을 사용하거나 당시에 의미가있는 약어로 가득 찬 열 이름을 사용할 수 있습니다.


2

일반적으로보기를 사용하여 삶을 더 쉽게 만들고 여러 테이블에 저장된 일부 엔티티에서 세부 정보를 얻습니다 (가독성을 높이기 위해 코드에서 많은 조인을 제거함). 때로는 여러 데이터베이스에서 데이터를 공유하거나 삽입물을 쉽게 읽을 수 있습니다.


2

다음은 권한과 함께보기를 사용하여 사용자가 테이블에서 업데이트 할 수있는 열을 제한하는 방법입니다.

/* This creates the view, limiting user to only 2 columns from MyTestTable */
CREATE VIEW dbo.myTESTview 
WITH SCHEMABINDING AS
SELECT ID, Quantity FROM dbo.MyTestTable;

/* This uses the view to execute an update on the table MyTestTable */
UPDATE dbo.myTESTview
SET Quantity = 7
WHERE ID = 1

1

테이블의 스냅 샷 및 / 또는 보기 (읽기 전용 방식) 를보고자 할 때


1
'테이블 스냅 샷'이란 무엇입니까? 언제 또는 왜 그렇게 하시겠습니까?
MedicineMan

많은 시나리오가 있습니다. 테이블에 영향을 미치지 않고 밑줄을 긋지 않고 테이블에서 복잡한 쿼리 / 저장소 절차를 실행한다고 가정 해 보겠습니다. 당신은보기 (읽기 전용 표현) 생성
vehomzzz

복잡한 쿼리 저장소 프로 시저를 실행하려는 경우 읽기 전용 방식으로보기에 액세스 할 수 없습니까? 나는 당신이 여기서 말하는 것을 '얻을'데이터베이스 경험이 없습니다. 자세한 예를 설명하거나 자세히 설명해 주시겠습니까?
MedicineMan

1

쿼리를 실행할 때만 저장 프로 시저에 대한 뷰를 사용하고 싶습니다. 또한 뷰는 보안을 단순화하고 여러 테이블에 대한 삽입 / 업데이트를 쉽게하는 데 사용될 수 있으며 데이터 스냅 샷 / 구체화 (오래 실행되는 쿼리 실행 및 결과 캐시)에 사용할 수 있습니다.

실시간으로 정확하게 유지할 필요가없는 그리운 쿼리를 실행하기 위해 구체화 된 뷰를 사용했습니다.


반대로 쿼리를 실행할 때? 왜? 이 점은 의미가 없습니다
MedicineMan

뷰를 사용하면 DML 작업 만 수행한다는 것을 알 수 있으며 SP를 호출하면 데이터를 가져 오기 전에 다른 일이 발생하지 않습니다. 즉, 캐시 함수를 호출하면 캐시 된 데이터 세트를 반환 할 수 있지만 데이터를 원하는 모든 것을 SP에 호출해야한다는 의미는 아닙니다. 데이터 IMO에 대한 API 단순화
MattH

1

또한 뷰는 매우 복잡한 구성과 테이블을 쉽게 쿼리 할 수있는 관리 가능한 청크로 분류합니다. 데이터베이스에서 전체 테이블 관리 시스템은 하나의 큰 테이블에서 뷰로 분류됩니다.


1

이것은 귀하의 질문에 정확하게 대답하지는 않지만 Materialized Views를 언급 할 가치가 있다고 생각했습니다 . 내 경험은 대부분 Oracle과 관련이 있지만 SQL-Server는 상당히 유사합니다.

XML 성능 문제를 해결하기 위해 아키텍처에서 비슷한 것을 사용했습니다. Google 시스템은 XML로 저장된 많은 데이터를 사용하여 설계되었으며 애플리케이션은 특정 값을 쿼리해야 할 수 있습니다. 많은 XMLType을 처리하고 많은 행에서 XPath를 실행하면 성능에 큰 영향을 미치므로 구체화 된 뷰 형식을 사용하여 기본 테이블이 변경 될 때마다 원하는 XML 노드를 관계형 테이블로 추출합니다. 이는 요청시 쿼리를 실행하는 표준보기와 달리 특정 시점에서 쿼리의 실제 스냅 샷을 효과적으로 제공합니다.


1

내 데이터에 대해 호출 할 수있는 방법으로 저장 프로 시저를 더 많이 볼 수 있지만 뷰는 쿼리 또는 저장 프로 시저를 만들 수있는 기본 데이터의 합성 버전을 만드는 메커니즘을 제공합니다. 단순화 또는 집계가 의미가있을 때 뷰를 작성하겠습니다. 매우 구체적인 서비스를 제공하고자 할 때 저장 프로 시저를 작성하겠습니다.


소규모 서비스의 예를들 수 있습니까
MedicineMan

1

뷰에 대한 흥미로운 점 중 하나는 Microsoft Access에서 테이블로 볼 수 있다는 것입니다. ODBC를 사용하여 Microsoft Access 프런트 엔드를 SQL 데이터베이스에 연결하면 사용 가능한 테이블 목록에 테이블과 뷰가 표시됩니다. 따라서 MS Access에서 복잡한 보고서를 준비하는 경우 SQL Server에서 조인 및 쿼리를 수행하고 수명을 크게 단축 할 수 있습니다. MS Excel에서 쿼리를 준비하기위한 Ditto


1

프로덕션 데이터베이스에는 10 개 정도의 뷰만 있습니다. 나는 항상 사용하는 열에 여러 개를 사용합니다. 내가 사용하는 한 세트는 7 개의 테이블에서 왔으며 일부는 외부 조인이 있으며 일부는 선택적으로 해당 뷰를 호출하고 하나 또는 두 개의 조인 만하면된다는 것을 다시 쓰지 않고 다시 작성합니다. 나에게 그것은 단지 시간 절약입니다.


이것이 질문의 범위를 벗어나는 경우 용서하십시오. 그러나 여러 사람들이 이것을 언급했습니다.이 작업을 수행하면 성능 저하가 발생하지 않습니까?
MedicineMan

전혀. 는 SQL의 경우와 같이보기에서 * 선택할 수있는 동일한 계획을 보여 최적화 SQL Server는보기에 해당 조인
브라이언 스펜서에게

1

Products 테이블과 같은 기본 테이블과 ProductType 또는 ProductDescriptionByLanguage와 같은 참조 테이블 간의 모든 관계를 매핑하는 xxx를 만들고 있습니다. 이렇게하면 제품과 외래 키에서 설명으로 변환 된 모든 세부 정보를 검색 할 수있는보기가 생성됩니다. 그런 다음 ORM을 사용하여 그리드, 콤보 상자 등을 쉽게 빌드하는 객체를 만들 수 있습니다.



0

첫 번째 질문입니다 .Query의 복잡성을 숨기려면. 뷰에 매우 적합합니다. 데이터베이스 테이블을 정규화하는 방법이 증가합니다. 이제 테이블 수를 늘리면 데이터를 가져 오기가 매우 어렵습니다. 따라서 처리하는 가장 좋은 방법은 뷰를 따르는 것입니다.


당신이 그것을 구글 경우이 질문에 대한 매우 명확한 정보를 얻을 것이다.
Chella

0

테이블의 모든 행 / 열에 액세스하는 것을 제한하거나 제한하는보기를 만듭니다. 소유자가 특정 또는 제한된 행 / 열만 공유하기를 원하는 경우 해당 열을 사용하여보기를 만듭니다.


이것이 뷰를 사용해야하는 이유 중 하나 일뿐입니다.
Alexander

0

보안을 위해 : 각 사용자에게 사용자 또는 사용자 그룹이 볼 수있는 특정 데이터를 포함하는 작은보기 세트를 통해서만 데이터베이스에 액세스 할 수있는 권한을 부여하여 다른 데이터에 대한 사용자 액세스를 제한합니다.

쿼리 및 구조의 단순성 : 뷰는 여러 테이블에서 데이터를 가져와 단일 테이블을 표시하여 정보를 단순화하고 다중 테이블 쿼리를 뷰에 대한 단일 테이블 쿼리로 전환하고 사용자에게 데이터베이스 구조의 특정 뷰를 제공합니다. 특정 사용자 또는 사용자 그룹에 특정한 가상 테이블 세트로서의 데이터베이스.

일관된 데이터베이스 구조 작성 : 기본 소스 테이블이 변경 되더라도 뷰는 일관되고 변경되지 않은 데이터베이스 구조 이미지를 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.