2009-03-10 6 views
27

이 질문은 데이터베이스 전망에 관한 것입니다, 아니 구체화 전망.언제 데이터베이스보기를 사용하지 않을까요?

장점 :

  • 쿼리 단순화.
  • 다중 쿼리에서 동일한 조인을 반복하지 마십시오.
  • 마법의 숫자를 피하십시오.

단점 :

실제 쿼리를 숨기기
  • (당신이 조인 반복되어있을 수 있습니다).

그 밖의 무엇?

+0

[여기] [1] 나는 그것이 도움이 될 것이라고 생각 다른 대답은 [1] : http://stackoverflow.com/questions/1278521/why-do-you-create- a-a-view-in-a-database – saman

답변

11

장점 : 은 (보기는 데이터 구조를 숨길 수만큼) 당신이 완전히 신뢰하지 않는 경우

7

조회수가 꽤 굉장 응용 프로그램을 사용하는 쿼리에 영향을주지 않고 기본 데이터 구조를 변경할 수 있습니다 데이터베이스에 쿼리를 보내는 측 좋은 예는 계약자가 자신의 프로젝트에 속한 행만 볼 수 있도록 테이블에 대한 뷰를 작성하는 것입니다.

11

보안. 뷰에서 반환 된 열을 볼 수 있어야하는 사용자에게 액세스 권한을 부여합니다.

0

나는 거의 사용하지 않았지만 거의 사용하지 않았습니다. 그러나 스토어드 프로 시저를 통해 모든 데이터 액세스를 수행하므로 SP가 필요에 따라 조인의 복잡성을 숨길 수 있기 때문에 뷰의 유용성이 다소 떨어집니다.

많은 테이블을 결합한 복잡한 테이블을 가지고있는 경우 뷰를 사용하는 것을 고려해 보았습니다. 그 중 많은 SP를 위에 쌓아 놓아야했지만, 솔직히 말해서 나는 생각하지 못했습니다. 지금 생산 중입니다.

또 다른 시나리오는 내 사용자가 자신의 보고서를 생성하기 위해 데이터베이스에 액세스 할 수있는 곳을 사용하는 것이고 기본 복잡성을 숨기고 싶었습니다.

3

이제 SQL Server에 common table expressions이 있음으로 인해보기가 줄어 들었습니다. 보기를 만들 때 대개 하나의 쿼리를 대체하는 것이 아닌 많은 쿼리에서 사용할 수있는 정규화 된 계층 구조에 대한 것입니다.

예를 들어 지역, 시장 및 도시는 3 개의 정규화 된 테이블 (눈송이) 일 수 있습니다. 내 검색어의 90 %가이 데이터를 필요로하므로보기를 만듭니다. 뷰는 단일 쿼리를 대체하지 않지만 다른 모든 쿼리는 단순하고 DRY로 만듭니다.

4

뷰는 복잡성과 여러 조인을 숨길 수 있지만 어쨌든 SP에서 있었던 복잡성입니다.

SP가 최적화되었을 수있는 경우보기가 최적화되어야하며, 이는 해당보기를 기록한 모든 SP의 성능을 향상시킵니다.

조회수는 엄청나게 강력하고 유용한 이유 중 하나입니다. 코드 중복을 줄입니다. 즉, 대부분의 경우 최종 결과입니다. 쿼리가 세 개 이상의 장소에서 사용되는 경우 스키마 또는 쿼리 매개 변수가 변경되면 뷰에서 변경 사항을 대폭 단순화합니다.

한 번은 쿼리 논리를 변경하기 위해 22 개의 저장 프로 시저를 편집해야했습니다. 원래 아키텍처에서 뷰를 사용했다면 세 가지 변경 사항 만있었습니다.

1

이상한 조인을 수행하고 별칭을 사용하여 그룹을 만들 때 뷰를 몇 번 사용해야했습니다.

이상한 조인으로, 나는 뚜렷한 날짜의 목록을 선택한 다음 외부에서 공백 날짜에 대해 null 항목을 가져온 원래 테이블로 다시 조인한다는 것을 의미합니다. 나는 그것을하는 다른 방법을 이해할 수 없었다.

별칭별로 그룹화하는 경우 별칭 내부의 수식의 복잡성에 따라 좌우되는 것으로 보입니다. 별칭이 실제 열이나 이미 그룹화 된 열을 참조하지 않으면 모든 것이 정상이지만 그룹에 포함되지 않은 열의 별칭이 오류를 던지고 있습니다.

내 대학교 시절에 읽거나 듣는 것을 기억하는 것 같습니다.보기에서 선택하는 것이 여러 조인 테이블 중에서 선택하는 것보다 빠르지 만 그게 사실인지는 알 수 없습니다.

Excel에서 뷰 : 피벗 테이블을 사용하는 마지막 장점. 나는 테이블을 결합시키는 방법이 있다고 생각하지 않는다. 적어도 마법사 인터페이스에는 없다. Microsoft Query에서 조인을 수행하는 것이 가능할 수도 있지만, 아직 생각이 나지 않았기 때문에 아직 시도하지 않았습니다.

관련 문제