Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
CzęśćIBudowaniezrozumiałegoT-SQL
Widoki
Czymjestwidok?Podobniejakwprzypadkusłownikowejdefinicjitegowyrazu,widok
(view)wT-SQLjestsposobemzebraniawieluróżnychelementówiumieszczeniuich
razemwceluzbudowaniapojedynczego,spójnegoobrazu.Wtymrozdzialeomówię
niektóreopcjedostępneprzyużywaniuwidoków.Podobniejakwprzypadkudowol-
negoinnegonarzędzia,używaniewidokówmaswojezalety,aleistniejąteżzwiązane
znimizagrożenia,jeślizostanąniewłaściwieużyte.
Widokizdefniowaneprzezużytkownika
Terminwidokzdefiniowanyprzezużytkownika(user-definedview-UDV)topełnana-
zwapodstawowejwersjiwidoku.Jednymzgłównymefektówwidokujestprostota.Jest
tosposób,dziękiktóremuaplikacjeiużytkownicymogąuzyskiwaćdostępdozłożo-
nychzbiorówinformacjibezkoniecznościrozumieniawszystkichwielopoziomowych
zależnościirelacjiwbaziedanych.Corównieżistotne,stosowaniewidokówzapewnia
pewnedodatkowefunkcjonalnościpozwalającenaochronęizabezpieczeniedanych.
Przedstawięrównieżprzykładywidoków,któremogąpomócwpoprawianiuwydajno-
ści,aletakżesytuacje,wktórychwidokimogąniebyćwłaściwymwyborem.
WprzypadkustandardowychwidokówdefiniowanychprzezużytkownikaSQLSer-
vernieprzechowujefizycznierzeczywistychdanychzwracanychprzezwidok.Ozna-
czato,żeilekroćwidokjestwywoływany,wyrażeniezawartewjegodefinicjizostanie
użytedopobraniarzeczywistych,istniejącychdanych.Jednązzalettejmetodyjestto,
żeużytkownicyuzyskującydostępdotychwidokówpotrzebująprostszegokodu,któ-
ryjestbardziejprzejrzystyiłatwiejszydozrozumienia.Innącechąwidokówjestto,
żeużytkownicymogąmiećuprawnieniedowidoku,aleniedopowiązanychznimtabel.
Wtensposóbmożemypozwolićużytkownikomnadostępdoczęści,aleniewszystkich
danychzawartychwtabelachtworzącychwidok.
Zacznijmyodporównaniawydajnościwidokuzwydajnościątegosamegozapytania
użytegojakokwerendaadhocalbojakoproceduraskładowana.Listing2-1przedstawia
zapytanie,któregoużyjemyjakopodstawydlaporównań.
Listing2-1.Zapytaniedlacelówanalizy
SELECTmeal.MealTypeName,rec.RecipeName,rec.ServingQuantity,ing.
IngredientName
FROMdbo.Reciperec
INNERJOINdbo.MealTypemeal
26