표시(SQL)
View (SQL)데이터베이스에서 보기는 데이터에 저장된 쿼리의 결과 세트이며, 데이터베이스 사용자는 영구 데이터베이스 수집 개체에서와 마찬가지로 이 쿼리를 쿼리할 수 있습니다.이 사전 확립된 쿼리 명령어는 데이터베이스 딕셔너리에 저장됩니다.관계형 데이터베이스의 일반 기본 테이블과 달리 뷰는 물리적 스키마의 일부를 형성하지 않습니다.결과 집합은 뷰에 대한 액세스가 요청될 때 데이터베이스 내의 데이터에서 동적으로 계산되거나 조회되는 가상 테이블입니다.관련된 기본 테이블의 데이터에 적용된 변경은 뷰의 후속 호출에 표시되는 데이터에 반영됩니다.일부 NoSQL 데이터베이스에서는 보기를 통해서만 데이터를 조회할[how?] 수 있습니다.
뷰는 테이블에 비해 다음과 같은 이점을 제공합니다.
- 보기는 테이블에 포함된 데이터의 하위 집합을 나타낼 수 있습니다.따라서 뷰는 기본 테이블의 외부 세계에 대한 노출 정도를 제한할 수 있습니다. 즉, 특정 사용자는 뷰를 쿼리할 수 있는 권한을 가지면서도 기본 테이블의 나머지 부분에 대한 액세스를 거부할 수 있습니다.
- 뷰는 여러 테이블을 하나의 가상 테이블로 결합하고 단순화할 수 있습니다.
- 뷰는 데이터베이스 엔진이 데이터(합계, 평균 등)를 집계하고 계산된 결과를 데이터의 일부로 표시하는 집계된 테이블 역할을 할 수 있습니다.
- 보기는 데이터의 복잡성을 숨길 수 있습니다.예를 들어 뷰는 Sales2000 또는 Sales2001로 표시되며 실제 기본 테이블을 투과적으로 분할할 수 있습니다.
- 보기의 저장 공간은 거의 없습니다.데이터베이스에는 표시되는 모든 데이터의 복사본이 아닌 보기의 정의만 포함됩니다.
- 사용하는 SQL 엔진에 따라 보기는 보안을 강화할 수 있습니다.
(프로그래밍에서) 함수가 추상화를 제공할 수 있는 것처럼 데이터베이스 뷰도 추상화를 제공할 수 있습니다.기능과 병행하여 데이터베이스 사용자는 중첩된 뷰를 조작할 수 있으므로 하나의 뷰가 다른 뷰에서 데이터를 집약할 수 있습니다.보기를 사용하지 않으면 두 번째 정규 형식 이상의 데이터베이스를 정규화하는 것이 훨씬 더 어려워집니다.뷰를 사용하면 무손실 조인 분해를 쉽게 만들 수 있습니다.
기본 테이블의 행에 정의된 순서가 없는 것처럼 뷰를 통해 사용할 수 있는 행은 기본 정렬과 함께 표시되지 않습니다.뷰는 관계형 테이블이며 관계형 모델은 테이블을 일련의 행으로 정의합니다.집합은 정의에 따라 정렬되지 않으므로 뷰의 행도 정렬되지 않습니다.따라서 뷰 정의의 ORDER BY 절은 의미가 없습니다. SQL 표준(SQL:2003)에서는 CREATE TABLE 문에서 거부된 것과 마찬가지로 CREATE VIEW 명령의 하위 쿼리에서 ORDER BY 절을 허용하지 않습니다.그러나 정렬된 데이터는 다른 테이블과 동일한 방법으로 뷰에서 해당 뷰에 대한 쿼리 문의 일부로 가져올 수 있습니다.그러나 Oracle Database와 같은 일부 DBMS는 이 SQL 표준 제한을 준수하지 않습니다.
읽기 전용 보기와 업데이트 가능 보기
데이터베이스 실무자는 보기를 읽기 전용 또는 업데이트 가능으로 정의할 수 있습니다.데이터베이스 시스템이 뷰 스키마에서 기본 기본 테이블의 스키마로의 역매핑을 결정할 수 있는 경우 뷰를 업데이트할 수 있습니다.INSERT, UPDATE 및 DELETE 작업은 업데이트 가능한 보기에서 수행할 수 있습니다.DBMS는 변경 내용을 기본 기본 테이블에 매핑할 수 없으므로 읽기 전용 보기에서는 이러한 작업을 지원하지 않습니다.뷰 업데이트는 키 보존에 의해 수행됩니다.
일부 시스템에서는 뷰에 대한 트리거 대신 트리거 정의를 지원합니다.이 기술을 사용하면 뷰에 대한 삽입, 업데이트 또는 삭제 작업 대신 실행할 다른 로직을 정의할 수 있습니다.따라서 데이터베이스 시스템은 읽기 전용 뷰를 기반으로 데이터 수정을 구현할 수 있습니다.그러나 대신 트리거를 사용해도 보기 자체의 읽기 전용 또는 업데이트 가능 속성은 변경되지 않습니다.
구체화된 뷰
다양한 데이터베이스 관리 시스템에서 데이터 읽기 전용 하위 집합, 특히 구체화된 뷰(데이터 웨어하우징에서 일반적으로 사용되는 사전 실행된 가상 뷰)에서 뷰를 확장했습니다.데이터의 정적 스냅샷을 제공하며 원격 소스의 데이터를 포함할 수 있습니다.구체화된 뷰의 정확도는 업데이트 뒤에 있는 트리거 메커니즘의 빈도에 따라 달라집니다.
구체화된 뷰는 Oracle Database에 의해 도입되었으며, IBM DB2는 동일한 목적을 위해 소위 "실체화된 쿼리 테이블"을 제공합니다.Microsoft SQL Server는 2000 버전인덱스 뷰를 도입했습니다.이 뷰는 테이블과 다른 인덱스만 저장되며 데이터 전체는 저장되지 않습니다.포스트그레SQL은 9.3 릴리즈에서 구체화된 뷰를 구현했습니다.
등가
보기는 원본 쿼리와 동일합니다.뷰에 대해 쿼리를 실행하면 쿼리가 수정됩니다.예를 들어 다음과 같은 내용의 accounts_view라는 뷰가 있는 경우:
-- accounts_view: ------------- 선택한다. 이름., 머니_캐릭터, 송금필, (머니_캐릭터 - 송금필) ~하듯이 균형., 주소., ... 부터 table_module(테이블 c 합류하다 계정_표 a 온 a.customer_id = c.customer_id
그러면 응용 프로그램은 다음과 같은 간단한 쿼리를 실행할 수 있습니다.
-- 심플 쿼리 ------------ 선택한다. 이름., 균형. 부터 계정_보기
다음으로 RDBMS는 단순한 쿼리를 받아들여 동등한 뷰를 대체하고 다음 정보를 쿼리 옵티마이저로 전송합니다.
-- 전처리된 쿼리: ------------------ 선택한다. 이름., 균형. 부터 (선택한다. 이름., 머니_캐릭터, 송금필, (머니_캐릭터 - 송금필) ~하듯이 균형., 주소., ... 부터 table_module(테이블 c 합류하다 계정_표 a 온 a.customer_id = c.customer_id )
그런 다음 Optimizer는 불필요한 필드 및 복잡함을 제거하고(예를 들어 부모 호출에서는 주소를 사용하지 않으므로 주소를 읽을 필요가 없음) 쿼리를 SQL 엔진으로 전송하여 처리합니다.