Jaki jest dobry powód, aby używać widoków SQL?

100

Czytam Biblię SQL Server 2008 i omawiam sekcję dotyczącą widoków. Ale autor tak naprawdę nie wyjaśnia celu poglądów. Jaki jest dobry użytek z widoków? Czy powinienem ich używać w swojej witrynie i jakie są z nich korzyści?

Łukasza 101
źródło
Czy mógłbyś mi przekazać pliki bazy danych tej książki „SQL Server 2008 Bible”? Strona autora jest martwa i nie mogę się z nim skontaktować.

Odpowiedzi:

94

Innym zastosowaniem, o którym nie ma mowy w żadnej z poprzednich odpowiedzi, jest łatwiejsze wdrażanie zmian struktury tabeli.

Powiedzmy, że chcesz wycofać tabelę ( T_OLD) zawierającą dane aktywnych użytkowników i zamiast tego użyć nowej tabeli z podobnymi danymi (nazwanymi T_NEW), ale zawierającej dane zarówno dla aktywnych, jak i nieaktywnych użytkowników, z jedną dodatkową kolumną active.

Jeśli Twój system (y) mają miliardy zapytań, które to umożliwiają SELECT whatever FROM T_OLD WHERE whatever, masz dwie możliwości wdrożenia:

1) Cold Turkey - Zmień DB, a jednocześnie zmień, przetestuj i wypuść wiele fragmentów kodu, które zawierały wspomniane zapytanie. BARDZO trudne do zrobienia (a nawet koordynowania), bardzo ryzykowne. Zły.

2) Stopniowo - zmień bazę danych, tworząc T_NEWtabelę, usuwając T_OLDtabelę i zamiast tego tworząc WIDOK o nazwie, T_OLDktóry naśladuje T_OLDtabelę w 100% (np. Zapytanie widoku jest SELECT all_fields_except_active FROM T_NEW WHERE active=1).

Pozwoliłoby to uniknąć wydawania DOWOLNEGO kodu, który aktualnie wybiera z T_OLD, i wprowadzanie zmian w celu migracji kodu z T_OLDdo T_NEWw wolnym czasie.

To jest prosty przykład, są inne o wiele bardziej zaangażowane.

PS Z drugiej strony, prawdopodobnie powinieneś mieć API procedury składowanej zamiast bezpośrednich zapytań z T_OLD, ale nie zawsze tak jest.

DVK
źródło
3
Nie znałem terminu „API procedury składowanej” i związanych z nim zalet / wad i uznałam
Jeff Widman
Przepraszam za spóźnienie na imprezę, ale co z występem. Jeśli potrzebuję złączeń w oryginalnej tabeli i zamiast tego dołączę do widoku, czy użyje on najlepszego planu wykonania?
Zikato
@Zikato tak, jeśli jest to widok indeksowany
LinkBerest
V Good Indication
Afnan Ahmad,
47

(Skopiowane z pierwszego samouczka, który pojawił się w wyszukiwarce Google (link nie działa), ale ma wszystkie zalety, które sam bym wpisał ręcznie.)

Widoki mają następujące zalety:

  • Bezpieczeństwo - widoki można udostępniać użytkownikom, podczas gdy podstawowe tabele nie są bezpośrednio dostępne. Dzięki temu administrator może udostępniać użytkownikom tylko te dane, których potrzebują, jednocześnie chroniąc inne dane w tej samej tabeli.
  • Prostota - widoki mogą służyć do ukrywania i ponownego wykorzystywania złożonych zapytań.
  • Uproszczenie lub wyjaśnienie nazw kolumn - Widoki mogą służyć do podawania aliasów nazw kolumn, aby były łatwiejsze do zapamiętania i / lub znaczące.
  • Odskocznia - widoki mogą stanowić odskocznię w zapytaniu „wielopoziomowym”. Na przykład możesz utworzyć widok zapytania zliczającego liczbę transakcji sprzedaży dokonanych przez każdego ze sprzedawców. Następnie możesz wysłać zapytanie do tego widoku, aby pogrupować sprzedawców według liczby zrealizowanych transakcji sprzedaży.
David
źródło
Ponieważ podoba mi się twoja odpowiedź i nie widzę sensu dodawania kolejnego, czy mogę zasugerować dwa dodatki do twojej listy? Widoki indeksowane mogą zwiększyć wydajność. Uruchamianie aktualizacji na podstawie widoków, a nie bezpośrednio do tabel, może dać większą pewność, że nie zaktualizujesz nieprawidłowo tej kluczowej tabeli produkcyjnej :)
David Hall
Jeszcze jeden punkt na liście, większość administratorów baz danych chciałaby użyć widoku, ponieważ mogą dostroić jeden widok i głównie (nie zawsze) wszystkie zapytania korzystające z tego widoku zostaną dostrojone.
Nitin Midha
To jest 99% odpowiedź w mojej książce.
John Steedman,
BTW @David uszkodzony link
Manuel Jordan
Ostatni punkt, czy nie możemy do tego użyć tabeli tymczasowej?
Jiechao Wang
16

Kilka powodów z Wikipedii :

Widoki mogą zapewnić przewagę nad tabelami:

  1. Widoki mogą reprezentować podzbiór danych zawartych w tabeli
  2. Widoki mogą łączyć i upraszczać wiele tabel w jedną wirtualną tabelę
  3. Widoki mogą pełnić rolę tabel zagregowanych , w których silnik bazy danych agreguje dane (suma, średnia itp.) I przedstawia obliczone wyniki jako część danych
  4. Widoki mogą ukrywać złożoność danych ; na przykład widok może pojawić się jako Sales2000 lub Sales2001, w sposób przezroczysty partycjonujący rzeczywistą tabelę bazową
  5. Przechowywanie widoków zajmuje bardzo mało miejsca ; baza danych zawiera tylko definicję widoku, a nie kopię wszystkich danych, które przedstawia
  6. W zależności od używanego silnika SQL widoki mogą zapewnić dodatkowe bezpieczeństwo
  7. Widoki mogą ograniczać stopień ekspozycji tabeli lub tabel na świat zewnętrzny
user210748
źródło
14

VIEWS mogą być używane jako sekcje SELECT / CODE wielokrotnego użytku, które mogą być dołączane do innych selekcji / zapytań, które mają być połączone, i używać różnych różnych filtrów bez konieczności ponownego tworzenia całego SELECT za każdym razem.

To również umieszcza logikę w jednym miejscu, dzięki czemu nie trzeba jej zmieniać w całej bazie kodu.

Spójrz na

Wybór między procedurami składowanymi, funkcjami, widokami, wyzwalaczami, wbudowanym kodem SQL

Główne piękno widoku polega na tym, że w większości sytuacji można go używać jako tabeli, ale w przeciwieństwie do tabeli może zawierać bardzo złożone obliczenia i powszechnie używane łączenia. Może również używać praktycznie dowolnego obiektu w bazie danych, z wyjątkiem procedur składowanych. Widoki są najbardziej przydatne, gdy zawsze musisz łączyć się z tym samym zestawem tabel, powiedz zamówienie ze szczegółami zamówienia, aby uzyskać podsumowanie pól obliczeniowych itp.

Adriaan Stander
źródło
6
Zachowaj przy tym ostrożność. Jeśli używasz widoków, które wywołują inne widoki, możesz stworzyć ogromny bałagan wydajności.
HLGEM,
możesz to zrobić, tworząc metodę i umieszczając zapytanie SQL wewnątrz metody. Ta metoda może być za każdym razem ponownie wykorzystana. Więc po co oglądać ???
ASharma7
10

Widok jest warstwą abstrakcji i robi to, co robi każda dobra warstwa abstrakcji, włączając w to hermetyzację schematu bazy danych i ochronę przed konsekwencjami zmiany wewnętrznych szczegółów implementacji.

To interfejs.

dkretz
źródło
1
O ile nie układasz widoków widoków w celu dalszej abstrakcji.
HLGEM,
Myślę, że skutecznie odrzuciłem wszelkiego rodzaju wielopoziomową abstrakcję w relacyjnych bazach danych. I nie wywołuję też procedur składowanych z procedur składowanych. :)
dkretz
3

Oto jedno bardzo powszechne użycie widoków do ograniczenia jednostki według pewnych kryteriów.

Tabela: USERS zawiera wszystkich użytkowników

Widok: ACTIVE_USERS zawiera wszystkich użytkowników z wyłączeniem tych, którzy są zawieszeni, zbanowani, czekają na aktywację i nie spełniają żadnych kryteriów, które możesz zdefiniować w przyszłości w ramach aktywnych wymagań. Dzięki temu nie trzeba usuwać żadnych wierszy z tabeli USERS, jeśli zdecydujesz się tego nie robić, ponieważ ACTIVE_USERS zawsze może ukryć niechciane wiersze.

W ten sposób możesz używać tabeli na stronach zarządzania użytkownikami, ale reszta aplikacji może używać ACTIVE_USERS, ponieważ mogą być jedynymi użytkownikami, którzy powinni mieć możliwość wykonywania procesów i dostępu do danych / modyfikowania ich.

Nefsu
źródło
2

Widoki umożliwiają łączenie danych z kilku różnych tabel i formatowanie ich (łączenie pól, nadawanie bardziej znaczących nazw pól itp.), Aby ułatwić użytkownikom końcowym. Stanowią abstrakcję modelu bazy danych. Można ich również użyć, aby zapewnić użytkownikom dostęp do danych w tabeli bez bezpośredniego dostępu do samej tabeli.

TLiebe
źródło
2

Oto kilka z wielu powodów używania widoku zamiast bezpośrednio tabeli

  • Prostota - widoki mogą służyć do ukrywania złożonych zapytań.
  • Bezpieczeństwo - Widok może ukryć niektóre ważne informacje przed użytkownikiem końcowym, tworząc widok niektórych wybranych kolumn
  • Bezpieczeństwo - Zabezpiecz tabelę, aby zmienić jej strukturę za pomocą VIEW.
  • Nadmiarowość - redukcja nadmiarowego kodu w każdej procedurze / kwerendzie przy użyciu wspólnego widoku.
  • Obliczenia - wszystkie obliczenia można wykonać raz w widoku zapytania.
  • Znacząca nazwa - tabela może mieć nazwę dla identyfikatora, taką jak tbl_org_emp_id, która może mieć alias, taki jak [Numer pracownika] lub jakieś znaczące imię.

Z imexploring.com

Ali Adravi
źródło
1

Mała lista typowych powodów / zastosowań:

  • użyj ich do zmiany formatu lub „wyglądu” danych (np. możesz połączyć razem imię i nazwisko)

    wykonywać obliczenia lub inne wyszukiwania danych

    denormalizuj dane (wyodrębnij dane z kilku tabel w jednym miejscu)

slugster
źródło
-6

Widoki są złe! Unikaj ich, jeśli to możliwe, i używaj tylko z powodu wskazanego przez DVK - tymczasowej migracji danych.

Należy zrozumieć, że w bazie danych zawierającej 100 tabel trudno jest zapamiętać przeznaczenie każdej tabeli. Teraz, jeśli dodasz tutaj kolejne 300 widoków, będzie to kompletny bałagan. Niż „Miłośnicy widoków” zwykle używają widoków zagnieżdżonych, a następnie używają widoków zagnieżdżonych w procedurach składowanych. Osobiście pracuję teraz z bazą danych, w której są 4 razy zagnieżdżone widoki! Aby zrozumieć najprostszą logikę procedury składowanej, muszę najpierw przejść przez wszystkie widoki.

Dan
źródło
8
-1 Widoki są dobre. Oni mogą stać się zła, jeśli używasz ich w niewłaściwy sposób - ale to prawda o byle czym.
NullUserException
1
Poglądy mogą być złe, jeśli są źle używane. Ludzie, którzy używają ich źle, najczęściej wydają się być tymi, którzy używają ich do abstrakcyjnych rzeczy, a następnie robią to, co mówisz, wywołują poglądy, które wywołują poglądy, do punktu, w którym może być konieczne zmaterializowanie 10 milionów rekrodów przed zwróceniem wyniku zestaw 3. Widoki bezpośrednio wywołujące tabele mogą być bardzo przydatne.
HLGEM,
@HGLEM Czy istnieje sposób na ograniczenie wyświetlania połączeń z innych widoków?
Igor Soloydenko