데이터베이스에 보기를 작성하는 이유는 무엇입니까?
데이터베이스에 보기를 작성해야 하는 시기와 이유는 무엇입니까?그냥 일반 저장 프로시저를 실행하거나 선택하지 그래요?
뷰에는 몇 가지 이점이 있습니다.
1. 뷰는 복잡성을 숨길 수 있다
여러 테이블을 결합해야 하거나 복잡한 논리 또는 계산이 필요한 쿼리가 있는 경우 모든 로직을 뷰로 코드화한 후 표와 마찬가지로 뷰에서 선택할 수 있습니다.
2. 뷰를 보안 메커니즘으로 사용할 수 있다
뷰는 테이블(또는 테이블)에서 특정 열 및/또는 행과 기본 테이블 대신 뷰에 설정된 권한을 선택할 수 있습니다.이를 통해 사용자가 확인해야 하는 데이터만 서페이싱할 수 있습니다.
3. 뷰를 통해 레거시 코드 지원을 단순화할 수 있습니다.
많은 코드를 분리할 수 있는 테이블을 리팩터링해야 할 경우 테이블을 같은 이름의 뷰로 대체할 수 있습니다.뷰는 실제 스키마가 변경되었지만 원래 테이블과 동일한 스키마를 제공합니다.이렇게 하면 테이블을 참조하는 레거시 코드가 깨지는 것을 방지하여 레거시 코드를 언제든지 변경할 수 있습니다.
이것들은 뷰가 어떻게 유용한지를 보여주는 많은 예시들 중 일부에 불과합니다.
무엇보다도 보안을 위해 사용할 수 있습니다."고객" 테이블이 있는 경우 모든 영업 담당자에게 이름, 주소, 우편 번호 등의 필드에 대한 액세스 권한을 부여할 수 있지만 credit_card_number는 부여할 수 없습니다.사용자가 액세스해야 하는 열만 포함하는 보기를 생성한 다음 보기에 대한 액세스 권한을 부여할 수 있습니다.
뷰는 쿼리를 캡슐화한 것입니다.뷰로 변환되는 쿼리는 복잡한 경향이 있으므로 재사용을 위해 뷰로 저장하는 것이 좋습니다.
저는 보통 보고서를 작성하기 위해 자주 사용되는 데이터의 정규화를 해제하거나 집약하기 위해 뷰를 만듭니다.
편집
구체적으로는, 개인, 회사, 역할, 오너 타입, 주문, 주문 상세, 주소, 전화 등, 개인 테이블에는 종업원과 연락처가, 주소 테이블에는 개인과 회사의 전화번호가 각각 격납되어 있는 데이타베이스가 있다고 하면,개발팀은 종업원별 매출액, 고객별 매출액, 지역별 매출액, 주별 매출액, 주별 매출액, 주별 매출액 등 보고서를 작성(또는 비개발자가 보고서 데이터에 접근할 수 있도록 하는 것)하는 업무를 담당했습니다.기타 데이터베이스 엔티티 간의 관계를 정규화하지 않는 일련의 뷰를 작성하여 실제 엔티티를 보다 통합된 뷰(말장난 의도 없음)를 이용할 수 있도록 한다.다음과 같은 이점이 있습니다.
- 쿼리 쓰기 중복성 감소
- 관련 실체에 대한 기준 제정
- 복잡한 계산 및 결합에 대한 성능을 평가하고 극대화할 기회 제공(MSQL의 Schemabound 뷰 색인화 등)
- 팀원 및 비개발자가 데이터에 보다 쉽게 접근할 수 있도록 합니다.
몇 가지 이유:복잡한 조인이 있는 경우, 모든 액세스가 항상 조인이 올바르고 개발자가 필요한 모든 테이블을 기억할 필요가 없도록 뷰를 갖는 것이 좋을 수 있습니다.일반적으로 이는 모든 재무보고서가 동일한 데이터 집합을 기반으로 하는 것이 매우 중요한 재무 애플리케이션일 수 있습니다.
표시할 수 있는 레코드를 제한하는 사용자가 있는 경우 보기를 사용하여 기본 테이블이 아닌 보기에 대한 액세스만 허용한 다음 보기를 쿼리할 수 있습니다.
Crystal Report는 저장된 Proc보다 뷰를 사용하는 것을 선호하기 때문에 보고서 작성을 많이 하는 사람들은 뷰를 많이 사용하는 경향이 있습니다.
또한 보기는 데이터베이스를 리팩터링할 때 매우 유용합니다.보기를 생성하여 이전 코드가 보지 않도록 변경 내용을 숨길 수 있습니다.데이터베이스 리팩터링을 읽고 리팩터링에 매우 효과적인 방법이기 때문에 이 기능이 어떻게 작동하는지 확인하십시오.
저장 프로시저에 비해 뷰의 주요 장점은 표를 사용하는 것과 마찬가지로 뷰를 사용할 수 있다는 것입니다.는 ,, 는, 는, 는, 습, 습, namely, 는, namely, namely, namely, 습, 습, namely, namely, namely, namely, namely.FROM
예를 들면,SELECT * FROM dbo.name_of_view
.
거의 모든 면에서 스토어드 프로시저가 더 강력합니다.변수를 할 수 .out
을 한수과 같습니다.SELECT
,INSERT
,UPDATE
, , , , 입니다.DELETE
업무 등
을 「 」에서 문의할 수 .FROM
하지만 매개 변수를 전달할 수 있어야 합니다. 그렇게 하는 방법도 있습니다.이치노
다음은 이 주제에 대한 매우 유용한 기사입니다.
편집: 그런데 이런 종류의 질문입니다. 뷰는 테이블 값 함수에 비해 어떤 이점이 있습니까?이에 대한 좋은 답변은 없지만 뷰를 작성하기 위한 T-SQL 구문은 테이블 값 함수보다 단순하며 데이터베이스 사용자는 뷰에 더 익숙할 수 있습니다.
ORM과 테이블 사이에서 훌륭한 "중간자" 역할을 할 수 있습니다.
예:
사용자 테이블은 구조를 변경해야 하므로 Some Column 열을 다른 테이블로 이동하여 1대 다의 관계를 가질 수 있습니다.
그러나 개인에 대해서는 많은 것이 아니라 하나의 것으로서 Some Column을 사용하고 있는 경우가 많습니다.뷰를 사용하여 모든 Some Columns를 모아서 뷰에 넣었습니다.그것은 잘 되었습니다.
이는 데이터 계층이 변경되었지만 비즈니스 요구사항이 근본적으로 변경되지 않았기 때문에 비즈니스 개체를 변경할 필요가 없었기 때문입니다.비즈니스 오브젝트를 변경해야 한다면 실행 가능한 솔루션은 아니라고 생각합니다만, 뷰는 확실히 좋은 중간점으로 기능합니다.
특정 데이터 보기에 초점을 맞추려면 사용자가 관심 있는 특정 데이터와 자신이 담당하는 특정 작업에 집중할 수 있습니다.불필요한 데이터는 보기에서 제외될 수 있습니다.또한 사용자는 보기에 정의된 데이터만 볼 수 있고 기본 테이블의 데이터는 볼 수 없으므로 데이터의 보안도 향상됩니다.보안 목적으로 보기를 사용하는 방법에 대한 자세한 내용은 보기를 보안 메커니즘으로 사용을 참조하십시오.
데이터 조작을 단순화하기 위해 보기는 사용자가 데이터를 조작하는 방법을 단순화할 수 있습니다.자주 사용되는 조인, 투영, UNION 쿼리 및 SELECT 쿼리를 뷰로 정의하면 해당 데이터에 대해 추가 작업을 수행할 때마다 사용자가 모든 조건과 조건을 지정할 필요가 없습니다.예를 들어, 보고 목적으로 사용되며 하위 쿼리, 외부 조인 및 집약을 수행하여 테이블 그룹에서 데이터를 가져오는 복잡한 쿼리를 뷰로 만들 수 있습니다.이 보기에서는 보고서가 생성될 때마다 기본 쿼리를 작성하거나 제출할 필요가 없으므로 데이터에 대한 액세스가 단순해집니다. 대신 보기가 쿼리됩니다.데이터 조작에 대한 자세한 내용을 참조하십시오.
매개 변수화된 뷰 또는 WHERE-clause 검색 조건에 매개 변수가 있는 뷰로 논리적으로 작동하는 인라인 사용자 정의 함수를 만들 수도 있습니다.자세한 내용은 인라인 사용자 정의 함수를 참조하십시오.
데이터 보기를 사용자 정의하려면 사용자가 동일한 데이터를 동시에 사용하는 경우에도 서로 다른 방식으로 데이터를 볼 수 있습니다.이는 특히 관심사와 스킬레벨이 다른 사용자가 같은 데이터베이스를 공유하는 경우에 편리합니다.예를 들어 계정 관리자가 거래하는 고객의 데이터만 검색하는 보기를 생성할 수 있습니다.보기는 보기를 사용하는 계정 관리자의 로그인 ID를 기반으로 검색할 데이터를 결정할 수 있습니다.
데이터 내보내기 및 가져오기 보기를 사용하여 데이터를 다른 응용 프로그램으로 내보낼 수 있습니다.예를 들어 pubs 데이터베이스의 스토어 및 판매 테이블을 사용하여 Microsoft® Excel을 사용하여 판매 데이터를 분석할 수 있습니다.이를 위해 스토어 및 판매 테이블을 기반으로 보기를 만들 수 있습니다.그런 다음 bcp 유틸리티를 사용하여 보기에서 정의된 데이터를 내보낼 수 있습니다.INSERT 문을 사용하여 행을 뷰에 삽입할 수 있는 경우 bcp 유틸리티 또는 BULK INSERT 문을 사용하여 데이터 파일에서 특정 뷰로 데이터를 가져올 수도 있습니다.데이터를 뷰에 복사하는 제한에 대한 자세한 내용은 INSERT를 참조하십시오.bcp 유틸리티 및 BULK INSERT 문을 사용하여 뷰 간에 데이터를 복사하는 방법에 대한 자세한 내용은 뷰로 복사 또는 뷰에서 복사를 참조하십시오.
분할된 데이터를 결합하려면 뷰 내에서 Transact-SQL UNION 세트 연산자를 사용하여 개별 테이블에서 두 개 이상의 쿼리 결과를 단일 결과 세트로 결합할 수 있습니다.이것은 파티션 뷰라고 불리는 단일 테이블로 사용자에게 표시됩니다.예를 들어, 한 테이블에는 워싱턴의 판매 데이터가 들어 있고 다른 테이블에는 캘리포니아의 판매 데이터가 들어 있는 경우 해당 테이블의 UNION에서 뷰를 생성할 수 있습니다.보기는 두 지역의 판매 데이터를 나타냅니다.분할된 뷰를 사용하려면 동일한 테이블을 여러 개 만들고 각 테이블에 추가할 수 있는 데이터 범위를 결정하는 제약 조건을 지정합니다.그런 다음 이러한 기본 테이블을 사용하여 보기가 생성됩니다.뷰를 쿼리하면 SQL Server는 쿼리의 영향을 받는 테이블을 자동으로 판별하고 해당 테이블만 참조합니다.예를 들어 워싱턴 주의 영업 데이터만 필요하다고 쿼리에서 지정한 경우 SQL Server는 워싱턴 영업 데이터를 포함하는 테이블만 읽고 다른 테이블은 액세스하지 않습니다.
분할 보기는 동일한 데이터베이스 내의 테이블뿐만 아니라 원격 서버 등 여러 이기종 소스로부터의 데이터를 기반으로 할 수 있습니다.예를 들어 각각 조직의 서로 다른 영역에 대한 데이터를 저장하는 서로 다른 원격 서버의 데이터를 결합하려면 각 데이터 원본에서 데이터를 검색하는 분산 쿼리를 생성한 다음 이러한 분산 쿼리를 기반으로 보기를 생성할 수 있습니다.쿼리는 쿼리에 의해 요청된 데이터를 포함하는 원격 서버의 테이블에서 데이터만 읽습니다. 보기에서 분산 쿼리에 의해 참조되는 다른 서버는 액세스되지 않습니다.
여러 테이블 또는 여러 서버에 걸쳐 데이터를 분할할 경우 검색할 데이터가 적기 때문에 데이터의 일부에만 액세스하는 조회가 더 빨리 실행될 수 있습니다.테이블이 서로 다른 서버 또는 여러 프로세서가 있는 컴퓨터에 있는 경우 쿼리에 포함된 각 테이블도 병렬로 스캔할 수 있으므로 쿼리 성능이 향상됩니다.또한 인덱스 재구성 또는 테이블 백업과 같은 유지 관리 태스크를 더 빠르게 실행할 수 있습니다.분할 뷰를 사용하면 데이터는 여전히 단일 테이블로 표시되며 올바른 기본 테이블을 수동으로 참조할 필요 없이 조회할 수 있습니다.
분할 보기는 다음 조건 중 하나가 충족될 경우 업데이트할 수 있습니다. INSERT, UPDATE 및 DELETE 문을 지원하는 논리를 사용하여 뷰에 트리거가 정의됩니다.
보기와 INSERT, UPDATE 및 DELETE 문 모두 업데이트 가능한 분할 보기에 대해 정의된 규칙을 따릅니다.자세한 내용은 분할 보기 만들기를 참조하십시오.
https://technet.microsoft.com/en-us/library/aa214282(v=sql.80).aspx#sql:join
다음은 일반적인 두 가지 이유입니다.
보안을 위해 사용할 수 있습니다.기본 테이블에 대한 사용 권한을 부여하지 않고 열 또는 행 액세스를 제한하는 보기를 만들고 사용자에게 보기를 볼 수 있는 사용 권한을 부여하십시오.
당신은 편의상 그것을 사용할 수 있습니다.뷰에서 항상 함께 사용하는 몇 개의 테이블을 결합합니다.이를 통해 일관되고 쉽게 쿼리를 수행할 수 있습니다.
이렇게 하는 데는 여러 가지 이유가 있습니다.모든 조인을 수행하는 대신 테이블 이름만 조회할 수 있으므로 공통 조인을 쉽게 할 수 있습니다.
또 다른 이유는 데이터를 다른 사용자로 제한하기 위함입니다.예를 들어 다음과 같습니다.
표 1: 컬럼 - USER_ID;USERNAME;SSN
관리자 사용자는 실제 테이블에 대한 권한을 가질 수 있지만 SSN을 말하기 위해 액세스하지 않을 사용자는 다음과 같이 보기를 만듭니다.
USERNAMES AS SELECT user_id, 표 1에서 사용자 이름 보기 생성
그런 다음 테이블이 아닌 뷰에 액세스할 수 있는 권한을 부여합니다.
레거시 데이터베이스에 대한 보고를 수행할 때 보기는 매우 유용합니다.특히 암호식 5글자 이름(그 중 2글자는 공통 접두사!) 대신 감각적인 테이블 이름을 사용할 수도 있고, 줄임말로 가득 찬 열 이름을 사용할 수도 있습니다.
일반적으로 뷰는 생활을 쉽게 하기 위해 여러 테이블에 저장된 엔티티에서 상세 내용을 확장합니다(가독성을 높이기 위해 코드에 많은 조인(joins in code)이 필요 없음). 때로는 여러 데이터베이스에 걸쳐 데이터를 공유하거나 삽입물을 읽기 쉽게 만듭니다.
다음은 사용자가 테이블에서 업데이트할 수 있는 열을 제한하는 권한과 함께 보기를 사용하는 방법입니다.
/* 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
테이블 및/또는 뷰의 스냅샷을 보고 싶은 경우(읽기 전용)
쿼리를 실행할 때만 저장 프로시저보다 보기를 사용하는 것을 좋아합니다.뷰는 보안을 단순화하고, 여러 테이블에 쉽게 삽입/업데이트할 수 있으며, 데이터의 스냅샷/소재화(장기 실행 쿼리 실행 및 결과 캐시 유지)에도 사용할 수 있습니다.
실시간 정확성을 유지할 필요가 없는 실행 갈망 쿼리에 구체화된 뷰를 사용했습니다.
뷰는 또한 매우 복잡한 구성과 테이블을 쉽게 쿼리할 수 있는 관리 가능한 청크로 나눕니다.당사의 데이터베이스에서는 전체 테이블 관리 시스템이 하나의 큰 테이블에서 뷰로 분할되어 있습니다.
이것이 당신의 질문에 정확히 답하는 것은 아니지만, 저는 Materialized Views에 대해 언급할 가치가 있다고 생각했습니다.대부분의 경우 Oracle을 사용하지만 SQL-Server도 비슷할 것입니다.
델에서는 XML 퍼포먼스 문제에 대처하기 위해 아키텍처와 유사한 것을 사용했습니다.당사의 시스템은 XML로 저장된 많은 데이터를 연속적으로 사용하여 설계되어 있으며, 애플리케이션에서는 XML 내의 특정 값을 조회해야 할 수 있습니다.많은 XMLType을 처리하고 다수의 행에 걸쳐 XPath를 실행하면 성능에 큰 영향을 미치기 때문에 기본 테이블이 변경될 때마다 구체화된 뷰 형식을 사용하여 원하는 XML 노드를 관계형 테이블로 추출합니다.이를 통해 필요에 따라 쿼리를 실행하는 표준 뷰가 아닌 특정 시점에 쿼리의 물리적 스냅샷을 효과적으로 제공할 수 있습니다.
스토어드 프로시저는 데이터에 대해 호출할 수 있는 메서드로 보는 반면 뷰는 쿼리 또는 스토어드 프로시저를 생성할 수 있는 기본 데이터의 합성 버전을 만드는 메커니즘을 제공합니다.심플화 또는 집약이 타당할 때 뷰를 작성합니다.매우 구체적인 서비스를 제공하고 싶을 때 저장 프로시저를 작성하겠습니다.
뷰에 관해 궁금한 점은 Microsoft Access에서는 테이블로 인식된다는 것입니다.ODBC를 사용하여 Microsoft Access 프런트엔드를 SQL 데이터베이스에 연결하면 사용 가능한 테이블 목록에 테이블과 뷰가 표시됩니다.따라서 MS Access에서 복잡한 보고서를 준비하는 경우 SQL 서버에서 가입 및 쿼리를 수행하도록 하면 작업이 대폭 간소화됩니다.MS Excel에서 쿼리를 준비하는 것도 마찬가지입니다.
프로덕션 데이터베이스에는 10개 정도의 뷰밖에 없습니다.항상 사용하는 열에 여러 개를 사용합니다.사용하는 한 세트는 7개의 테이블로 구성되어 있으며, 그 중 일부는 외부 조인(outher join)이 포함되어 있습니다.또, 그 뷰를 항상 재작성하는 것이 아니라, 선택한 뷰로 호출해, 1개 또는 2개의 조인(join)을 작성하기만 하면 됩니다.나에게 그것은 단지 시간 절약일 뿐이다.
메인 테이블(제품 테이블 등)과 참조 테이블(ProductType 또는 ProductDescriptionByLanguage 등) 간의 모든 관계를 매핑하는 xxx를 만듭니다.이렇게 하면 외부 키에서 설명으로 변환된 제품 및 제품의 모든 세부 정보를 검색할 수 있는 보기가 생성됩니다.그러면 ORM을 사용하여 그리드, 콤보박스 등을 쉽게 구축할 수 있는 객체를 만들 수 있습니다.
보안을 위해: 사용자 또는 사용자 그룹이 볼 수 있는 특정 데이터를 포함하는 작은 보기 세트를 통해서만 각 사용자에게 데이터베이스에 액세스할 수 있는 권한을 부여하여 다른 데이터에 대한 사용자 액세스를 제한합니다.
쿼리 및 구조의 심플성: 뷰는 여러 테이블에서 데이터를 가져와 단일 테이블을 표시할 수 있습니다.이것에 의해, 정보를 심플화해, 복수의 테이블 쿼리를 뷰의 단일 테이블 쿼리로 변환해, 데이타베이스 구조의 특정의 뷰를 유저에게 제공할 수 있습니다.특정 사용자 또는 사용자 그룹에 고유한 가상 테이블 집합으로 데이터베이스를 표시합니다.
일관성 있는 데이터베이스 구조를 작성하려면:보기는 기본 소스 테이블이 변경되더라도 데이터베이스 구조의 일관된 변경되지 않은 이미지를 표시합니다.
첫 번째 거 같아요.쿼리의 복잡성을 숨깁니다.뷰에 매우 적합합니다.데이터베이스 테이블을 정규화하는 방법이 증가합니다.테이블 수가 증가하면 데이터를 가져오는 것이 매우 어렵습니다.따라서 가장 좋은 방법은 보기를 따르는 것입니다.내가 틀렸다면 정정해 주세요.
테이블 내의 모든 행/열에 대한 액세스를 제한하거나 제한하기 위해 뷰를 만듭니다.소유자가 특정 행/열만 공유해야 하는 경우 해당 열을 사용하여 보기를 작성합니다.
데이터베이스 스키마를 리팩터링하는 것으로 간주합니다.
언급URL : https://stackoverflow.com/questions/1278521/why-do-you-create-a-view-in-a-database
'programing' 카테고리의 다른 글
다음을 포함하는 저장 프로시저를 찾으려면 어떻게 해야 합니까? (0) | 2023.04.07 |
---|---|
SQL Server의 기존 테이블에 기본값 열 추가 (0) | 2023.04.07 |
Link-to-Sql: 여러 왼쪽 외부 결합 (0) | 2023.04.07 |
일별로 그룹화할 SQL 쿼리 (0) | 2023.04.07 |
SQL Server:크로스 조인(CROSS JOIN)과 풀 아우터 조인(FULL OUTER JOIN)의 차이점은 무엇입니까? (0) | 2023.04.07 |