Wyświetl (SQL)

W bazie danych widok jest zbiorem wyników zapisanego zapytania dotyczącego danych , do którego użytkownicy bazy danych mogą wysyłać zapytania tak samo, jak w przypadku trwałego obiektu kolekcji bazy danych . To wstępnie ustalone polecenie zapytania jest przechowywane w słowniku bazy danych. W przeciwieństwie do zwykłych tabel podstawowych w relacyjnej bazie danych widok nie stanowi części schematu fizycznego : jako zestaw wyników jest to wirtualna tabela obliczana lub zestawiana dynamicznie z danych w bazie danych, gdy żądany jest dostęp do tego widoku. Zmiany zastosowane do danych w odpowiedniej tabeli bazowej są odzwierciedlane w danych pokazywanych w kolejnych wywołaniach widoku. W niektórych NoSQL widoki są jedynym sposobem na zapytanie o dane [ jak? ] .

Widoki mogą zapewnić przewagę nad tabelami:

  • Widoki mogą reprezentować podzbiór danych zawartych w tabeli. W związku z tym widok może ograniczyć stopień narażenia tabel bazowych na świat zewnętrzny: dany użytkownik może mieć uprawnienia do wysyłania zapytań do widoku, jednocześnie odmawiając dostępu do pozostałej części tabeli podstawowej.
  • Widoki mogą łączyć i upraszczać wiele tabel w jedną wirtualną tabelę.
  • Widoki mogą pełnić rolę tabel agregowanych, w których silnik bazy danych agreguje dane ( suma , średnia itp.) i prezentuje obliczone wyniki jako część danych.
  • Widoki mogą ukryć złożoność danych. Na przykład widok może wyglądać jako Sales2000 lub Sales2001, w sposób przezroczysty dzieląc rzeczywistą tabelę bazową.
  • Widoki zajmują bardzo mało miejsca do przechowywania; baza danych zawiera tylko definicję widoku, a nie kopię wszystkich danych, które prezentuje.
  • W zależności od używanego silnika SQL widoki mogą zapewniać dodatkowe zabezpieczenia.

Tak jak funkcja (w programowaniu) może zapewnić abstrakcję , tak samo może to zrobić widok bazy danych. Równolegle z funkcjami użytkownicy bazy danych mogą manipulować zagnieżdżonymi widokami, dzięki czemu jeden widok może agregować dane z innych widoków. Bez użycia widoków normalizacja baz danych powyżej drugiej postaci normalnej byłaby znacznie trudniejsza. Widoki mogą ułatwić tworzenie bezstratnej dekompozycji sprzężeń.

Tak jak wiersze w tabeli podstawowej nie mają zdefiniowanej kolejności, tak wiersze dostępne w widoku nie pojawiają się z żadnym domyślnym sortowaniem. Widok jest tabelą relacyjną, a model relacyjny definiuje tabelę jako zbiór wierszy. Ponieważ zbiory nie są uporządkowane — z definicji — podobnie jak wiersze widoku. Dlatego ORDER BY w definicji widoku jest bez znaczenia; standard SQL ( SQL:2003 ) nie zezwala na klauzulę ORDER BY w podzapytaniu polecenia CREATE VIEW, tak jak jest odrzucana w instrukcji CREATE TABLE. Jednak posortowane dane można uzyskać z widoku w taki sam sposób, jak każdą inną tabelę — jako część zapytania w tym widoku. Niemniej jednak niektóre DBMS (takie jak Oracle Database ) nie przestrzegają tego standardowego ograniczenia SQL.

Widoki tylko do odczytu a widoki z możliwością aktualizacji

Widoki można zdefiniować jako tylko do odczytu lub aktualizowalne. Jeśli system bazy danych może określić odwzorowanie odwrotne ze schematu widoku na schemat bazowych tabel podstawowych, wówczas widok można aktualizować. INSERT , UPDATE i DELETE można wykonywać na aktualizowalnych widokach. Widoki tylko do odczytu nie obsługują takich operacji, ponieważ system DBMS nie może odwzorować zmian na leżące u ich podstaw tabele bazowe. Aktualizacja widoku odbywa się przez zachowanie klucza.

Niektóre systemy obsługują definicję wyzwalaczy INSTEAD OF w widokach. Ta technika umożliwia zdefiniowanie innej logiki do wykonania zamiast operacji wstawiania, aktualizowania lub usuwania w widokach. W ten sposób systemy bazodanowe mogą implementować modyfikacje danych w oparciu o widoki tylko do odczytu. Jednak wyzwalacz INSTEAD OF nie zmienia właściwości tylko do odczytu ani możliwości aktualizacji samego widoku.

Zmaterializowane poglądy

Różne systemy zarządzania bazami danych rozszerzyły widoki z podzbiorów danych tylko do odczytu , w szczególności widoki zmaterializowane : wstępnie wykonane, niewirtualne widoki powszechnie używane w hurtowniach danych . Dają statyczną migawkę danych i mogą zawierać dane ze źródeł zdalnych. Dokładność zmaterializowanego widoku zależy od częstotliwości mechanizmów wyzwalających jego aktualizacje.

Zmaterializowane widoki zostały wprowadzone przez Oracle Database , podczas gdy IBM Db2 udostępnia tak zwane „zmaterializowane tabele zapytań” (MQT) w tym samym celu. Microsoft SQL Server wprowadził w swojej wersji 2000 indeksowane widoki, które przechowują tylko oddzielny indeks z tabeli, ale nie wszystkie dane. PostgreSQL zaimplementował zmaterializowane widoki w wersji 9.3.

Równorzędność

Widok jest odpowiednikiem zapytania źródłowego. Gdy kwerendy są uruchamiane względem widoków, kwerenda jest modyfikowana. Na przykład, jeśli istnieje widok o nazwie account_view z następującą zawartością:



 
       
       
           
       
	   
     
     
        -- account_view:  -------------  WYBIERZ  nazwę  ,  pieniądze_otrzymane  ,  pieniądze_wysłane  ,  (  pieniądze_otrzymane  -  pieniądze_wysłane  )  AS  saldo  ,  adres  ,  ...  FROM  table_customers  c  DOŁĄCZ do  tabeli_kont  a  ON  a  .  identyfikator_klienta  =  c  .  Identyfikator klienta 

wtedy aplikacja może uruchomić proste zapytanie, takie jak:



 
       
    -- Proste zapytanie  ------------  WYBIERZ  nazwę  ,  saldo  Z  widok_kont 

Następnie RDBMS przyjmuje proste zapytanie, zastępuje równoważny widok, a następnie wysyła do optymalizatora zapytań :



 
       
    
               
               
                   
               
			    
               
                   -- Wstępnie przetworzone zapytanie :  ------------------  SELECT  nazwa  ,  saldo  FROM  (  SELECT  nazwa  ,  otrzymane_pieniądze  ,  wysłane_pieniądze  ,  (  otrzymane_pieniądze  -  wysłane_pieniądze  )  AS  saldo  ,  adres  ,  ...  FROM  table_customers  c  JOIN  account_table  a  ON  a  .  id_klienta  =  c  .  id_klienta          ) 

Optymalizator następnie usuwa niepotrzebne pola i złożoność (np. nie jest konieczne odczytywanie adresu, ponieważ wywołanie nadrzędne go nie wykorzystuje), a następnie wysyła zapytanie do silnika SQL w celu przetworzenia.

Zobacz też

Linki zewnętrzne