Scenari di utilizzo delle viste
Tramite le viste è possibile analizzare, semplificare e personalizzare la visualizzazione del database per ogni singolo utente. Le viste rappresentano un meccanismo di protezione grazie al quale è possibile consentire agli utenti di accedere ai dati tramite una vista, senza concedere loro le autorizzazioni di accesso alle tabelle di base sottostanti. Le viste consentono di fornire un'interfaccia compatibile con le versioni precedenti tramite la quale è possibile emulare una tabella precedente il cui schema è stato modificato oppure possono essere utilizzate per migliorare le prestazioni e per partizionare i dati quando si copiano dati in e da MicrosoftSQL Server.
Per analizzare dati specifici
Le viste consentono agli utenti di analizzare i dati specifici che li interessano e le attività specifiche di cui sono responsabili. È possibile escludere dalla vista i dati non necessari o i dati riservati.
Ad esempio, una vista vBikes del database di esempio AdventureWorks può consentire a un utente di visualizzare i nomi di tutte le biciclette dell'inventario. La vista esclude tramite un filtro tutti i campi della tabella Product a eccezione del campo Name e restituisce solo i nomi delle biciclette finite anziché i nomi dei relativi componenti.
CREATE VIEW vBikes AS
SELECT DISTINCT p.[Name] FROM Production.Product p
JOIN Production.ProductInventory i ON p.ProductID = i.ProductID
JOIN Production.ProductSubCategory ps
ON p.ProductSubcategoryID = ps.ProductSubCategoryID
JOIN Production.ProductCategory pc
ON (ps.ProductCategoryID = pc.ProductCategoryID
AND pc.Name = N'Bikes')
AND i.Quantity > 0
Per semplificare la manipolazione dei dati
Le viste consentono di semplificare l'utilizzo dei dati. Come viste è possibile definire proiezioni, query di unione, query di selezione e join utilizzati di frequente in modo da non dover specificare tutte le condizioni e le qualificazioni ogni volta che vengono eseguite altre operazioni sui dati. Ad esempio, è possibile creare come vista una query complessa utilizzata per la creazione di report e l'esecuzione di subquery, outer join e aggregazioni per il recupero di dati da un gruppo di tabelle. La vista semplifica l'accesso ai dati perché non è necessario scrivere o eseguire la query sottostante ogni volta che il report viene generato. La query viene invece eseguita sulla vista. Per ulteriori informazioni sulla manipolazione dei dati, vedere Nozioni fondamentali sulle query.
Benché non si tratti di una query complessa, la vista vBikes del database di esempio AdventureWorks consente agli utenti di analizzare dati specifici senza dover creare le clausole JOIN necessarie per generare la vista.
È inoltre possibile creare funzioni inline definite dall'utente che operano logicamente come viste con parametri nelle condizioni di ricerca della clausola WHERE o in altre parti della query. Per ulteriori informazioni, vedere Funzioni inline definite dall'utente.
Per fornire la compatibilità con le versioni precedenti
Le viste consentono di creare un'interfaccia compatibile con le versioni precedenti nel caso in cui lo schema di una tabella sia stato modificato. Ad esempio, è possibile che un'applicazione faccia riferimento a una tabella non normalizzata con lo schema seguente:
Employee(Name, BirthDate, Salary, Department, BuildingName)
Per evitare un'archiviazione di dati ridondante nel database, è possibile normalizzare la tabella suddividendola nelle due tabelle seguenti:
Employee2(Name, BirthDate, Salary, DeptId)
Department(DeptId, BuildingName)
Per fornire un'interfaccia compatibile con le versioni precedenti che faccia ancora riferimento ai dati di Employee, è possibile eliminare la tabella Employee precedente e sostituirla con la vista seguente:
CREATE VIEW Employee AS
SELECT Name, BirthDate, Salary, BuildingName
FROM Employee2 e, Department d
WHERE e.DeptId = d.DeptId
Le applicazioni che in precedenza eseguivano query sulla tabella Employee potranno ora ottenere i dati dalla vista Employee. Se l'applicazione si limita a leggere i dati di Employee, non è necessario modificarla. In alcuni casi è inoltre possibile supportare le applicazioni che aggiornano Employee tramite l'aggiunta di trigger INSTEAD OF alla nuova vista, in modo che le operazioni INSERT, DELETE e UPDATE eseguite sulla vista vengano mappate alle tabelle sottostanti. Per ulteriori informazioni, vedere Progettazione di trigger INSTEAD OF.
Per personalizzare i dati
Le viste consentono a più utenti di visualizzare i dati in modo diverso, anche quando gli stessi dati vengono utilizzati simultaneamente. Ciò è particolarmente utile quando utenti con livelli di competenza e interessi diversi condividono lo stesso database. Ad esempio, è possibile creare una vista che recupera solo i dati dei clienti gestiti da un account manager. La vista può determinare i dati da recuperare in base all'ID di accesso dell'account manager che utilizza la vista.
Per esportare e importare dati
È possibile utilizzare le viste per esportare dati in altre applicazioni. Ad esempio, è possibile utilizzare le tabelle Customer e SalesOrderHeader del database AdventureWorks per analizzare i dati relativi alle vendite utilizzando Microsoft Excel. Per eseguire questa operazione, è possibile creare una vista basata sulle tabelle Customer e SalesOrderHeader e quindi utilizzare l'utilità bcp per esportare i dati definiti dalla vista. È inoltre possibile importare dati in viste specifiche da file di dati tramite l'utilità bcp o l'istruzione BULK INSERT, a condizione che sia possibile inserire righe nella vista mediante l'istruzione INSERT. Per ulteriori informazioni sulle restrizioni relative alla copia di dati nelle viste, vedere INSERT (Transact-SQL). Per ulteriori informazioni sull'utilizzo dell'utilità bcp e dell'istruzione BULK INSERT per copiare dati in e da una vista, vedere Esportazione o importazione bulk di dati da o in una vista.
Per combinare dati partizionati nei server
È possibile utilizzare l'operatore sugli insiemi UNION Transact-SQL in una vista per combinare i risultati di due o più query di tabelle distinte in un singolo set di risultati. In questo modo viene visualizzata una singola tabella denominata vista partizionata. Ad esempio, se una tabella include i dati di vendita dello stato di Washington e un'altra tabella include i dati di vendita della California, è possibile creare una vista utilizzando l'operatore UNION con queste tabelle. La vista rappresenta i dati di vendita delle due aree.
Per utilizzare le viste partizionate, creare più tabelle identiche specificando un vincolo per determinare l'intervallo di dati che è possibile aggiungere a ogni tabella. La vista viene quindi creata utilizzando queste tabelle di base. Quando si esegue una query sulla vista, SQL Server determina automaticamente quali tabelle sono interessate dalla query e fa riferimento unicamente a quelle tabelle. Ad esempio, se una query specifica che sono necessari solo i dati di vendita dello stato di Washington, SQL Server legge unicamente la tabella che include i dati di vendita di tale stato e non accede ad altre tabelle.
Le viste partizionate possono essere basate sui dati di più origini eterogenee, ad esempio server remoti, per creare una federazione di server database. Ad esempio, per combinare i dati da server remoti diversi, ognuno dei quali archivia i dati di un'area diversa dell'organizzazione, è possibile creare query distribuite che recuperano i dati da ogni origine dei dati e quindi creare una vista basata sulle query distribuite. Le query leggono solo i dati dalle tabelle sui server remoti che includono i dati richiesti e non accedono ai server a cui fanno riferimento le query distribuite nella vista.
Quando i dati vengono partizionati su più server, le query che accedono solo a parte dei dati vengono eseguite più velocemente perché viene eseguita la scansione di una minore quantità di dati. Se le tabelle si trovano in server diversi o in un computer con più processori, è possibile eseguire la scansione in parallelo di ogni tabella interessata dalla query, migliorando pertanto le prestazioni della query. Inoltre, le attività di manutenzione, ad esempio la ricostruzione degli indici o il backup di una tabella, vengono eseguite più rapidamente.
Quando si utilizza una vista partizionata, i dati vengono comunque visualizzati come una singola tabella ed è possibile eseguire query su tali dati senza fare manualmente riferimento alla tabella sottostante corretta.
[!NOTA]
Il metodo consigliato per il partizionamento locale dei dati in un server prevede l'utilizzo di tabelle partizionate. Per ulteriori informazioni, vedere Tabelle e indici partizionati.
Le viste partizionate sono aggiornabili se viene soddisfatta una delle condizioni seguenti:
Per la vista è definito un trigger INSTEAD OF con logica per il supporto delle istruzioni INSERT, UPDATE e DELETE.
Sia la vista che le istruzioni INSERT, UPDATE e DELETE sono conformi alle regole definite per le viste partizionate aggiornabili. Per ulteriori informazioni, vedere Creazione di viste partizionate.