SQL le viste quando vanno usate? In quali circostanze?
Ragazzi, in sql, quando vanno usate le viste. Ci sono circostanze che ci obbligano ad utilizzare le viste???
Risposte
Le viste possono essere utili per semplificare la scrittura di alcune query, ma il loro principale scopo è quello di semplificare la gestione delle autorizzazione fornendo una maggiore flessibilità. Supponiamo per esempio di gestire un database di una banca e che i dati di tutti gli utenti siano salvati in modo centralizzato (i dati degli utenti di filiali diverse sono riuniti nelle stesse relazioni insomma). Questa centralizzazione è utile per diverse ragioni, ma si vorrebbe limitare l'accesso ai dati alle singole filiali in modo che possano modificare solo i dati dei clienti della filiale. Siccome questi dati non sono sottorelazioni delle relazioni centralizzate, è impossibile fornire questo tipo di accesso alle singole filiali senza le viste. Spero che sia chiaro il mio discorso.
un altro motivo dell'utilizzo dell viste è quello dei costi (per ottimizzare).
Ci sono situazioni che implementare fisicamente uno schema e la sua relazione sia costoso, per vie degli attributi coinvolti perciò si preferisce creare uno schema virtuale che combini attributi fisicamente distinti.
Ci sono situazioni che implementare fisicamente uno schema e la sua relazione sia costoso, per vie degli attributi coinvolti perciò si preferisce creare uno schema virtuale che combini attributi fisicamente distinti.
"apatriarca":
Le viste possono essere utili per semplificare la scrittura di alcune query, ma il loro principale scopo è quello di semplificare la gestione delle autorizzazione fornendo una maggiore flessibilità. Supponiamo per esempio di gestire un database di una banca e che i dati di tutti gli utenti siano salvati in modo centralizzato (i dati degli utenti di filiali diverse sono riuniti nelle stesse relazioni insomma). Questa centralizzazione è utile per diverse ragioni, ma si vorrebbe limitare l'accesso ai dati alle singole filiali in modo che possano modificare solo i dati dei clienti della filiale. Siccome questi dati non sono sottorelazioni delle relazioni centralizzate, è impossibile fornire questo tipo di accesso alle singole filiali senza le viste. Spero che sia chiaro il mio discorso.
Concettualmente è corretto, ma nella pratica questo non avviene in quanto difficilmente in una banca si dà alle filiale, o a qualsiasi ufficio, un accesso diretto al data base tramite una shell sql; non per niente si usano dei software, di solito proprietari, per la gestione di particolari funzionalità come i conti correnti, anagrafiche, mutui e prestiti, titoli, ecc.
Voleva solo essere un esempio, ma non ho mai detto che si fornisce alle filiali l'accesso diretto, da qualsiasi ufficio, al database o che siano costretti a scrivere direttamente query in SQL. E' abbastanza ovvio che un impiegato di una filiale non si metta a scrivere query SQL per portare avanti le sue pratiche, ma che farà invece uso di un qualche software. D'altra parte, questo software dovrà accedere al database in qualche modo e si dovrà quindi autenticare. Per una maggiore sicurezza si potrebbe decidere di limitare l'accesso che questo software avrà al database a determinate viste o tabelle a seconda della filiale dalla quale avviene l'accesso o dell'utente che lo usa.
Non ho comunque mai lavorato su database di banche e il mio discorso era solo teorico. Si chiedeva che usi avevano le viste e credo che questo sia un uso importante, indipendentemente dalla validità pratica dell'esempio che ho fatto. Conosco comunque almeno una persona che, nonostante non abbia un lavoro come tecnico in una banca, ma come impiegata (non allo sportello però), ha scritto in passato diverse query SQL direttamente nel database (ma adesso le cose sono recentemente cambiate).
Non ho comunque mai lavorato su database di banche e il mio discorso era solo teorico. Si chiedeva che usi avevano le viste e credo che questo sia un uso importante, indipendentemente dalla validità pratica dell'esempio che ho fatto. Conosco comunque almeno una persona che, nonostante non abbia un lavoro come tecnico in una banca, ma come impiegata (non allo sportello però), ha scritto in passato diverse query SQL direttamente nel database (ma adesso le cose sono recentemente cambiate).
Ma si infatti era un esempio, solo che nella realtà di una banca non funziona così (lavoriamo per delle banche, abbiamo sviluppato un intero sistema informativo a suo tempo, per cui so di cosa si parla
). Anche a livello di programmazione le viste SQL servono più che altro per semplificarti il lavoro di "recupero" dei dati e poi, come scriveva hamming_burst, per ottimizzarne l'accesso visto che generalmente i dbms precompilano le viste, rendendole quindi più veloci che non eseguendo una query (a meno che non crei una stored procedure che all'atto pratico si comporta come una vista).

Scusate ma le viste, spesso non servono anche per non avere un accesso diretto alle tabelle del database, rendendo così più "solido" l'accesso ai dati, soprattutto quelli più a rischio(banche, crediti etc...).
Oltre a questo ovviamente, possono servire per raggruppare in modo più compatto alcune informazioni che sono "sparpagliate" in più tabelle.
Oltre a questo ovviamente, possono servire per raggruppare in modo più compatto alcune informazioni che sono "sparpagliate" in più tabelle.
Si e no..... E' un pò complesso da spiegare. Provo a farti un esempio pratico su un progetto sui cui sto lavorando.
Il software che abbiamo realizzato permette di gestire il fondo pensione di una banca locale. L'ufficio della banca che usa il nostro software accede ai dati tramite delle funzioni (cioè moduli di programma) specifiche come quella che calcola quanto un dipendente può chiedere di anticipo dal proprio fondo, oppure dalla funzione che verifica i riscatti di pensione da confermare, oppure ancora dai beneficiari associati ad un dipendente. Questo significa che l'operatività dell'ufficio è assolutamente controllata dal software stesso e in nessun modo può accedere direttamente alle tabelle del data base, a parte i casi in cui si creano delle funzioni di inserimento. modifica e cancellazione dei dati di una particolare tabella quando si vuole che sia l'utente stesso a gestirla, senza che questo leda la stabilità del sistema. Quindi questo ti assicura la solidità dei dati.
Le viste ovviamente le abbiamo definite anche noi, ma solo per facilitarci alcuni lavori "interni" quando si tratta di produrre dei tabulati, o delle liste a video, che sono frutto di query incrociate molto complesse e si vuole avere il massimo delle performance.
Gaten tieni conto che una vista non è altro che una query SQL che decidi di salvare all'interno del tuo data base per averla sempre pronta all'uso, sia da un client SQL o dal tuo software. Spero di essere stato chiaro
Il software che abbiamo realizzato permette di gestire il fondo pensione di una banca locale. L'ufficio della banca che usa il nostro software accede ai dati tramite delle funzioni (cioè moduli di programma) specifiche come quella che calcola quanto un dipendente può chiedere di anticipo dal proprio fondo, oppure dalla funzione che verifica i riscatti di pensione da confermare, oppure ancora dai beneficiari associati ad un dipendente. Questo significa che l'operatività dell'ufficio è assolutamente controllata dal software stesso e in nessun modo può accedere direttamente alle tabelle del data base, a parte i casi in cui si creano delle funzioni di inserimento. modifica e cancellazione dei dati di una particolare tabella quando si vuole che sia l'utente stesso a gestirla, senza che questo leda la stabilità del sistema. Quindi questo ti assicura la solidità dei dati.
Le viste ovviamente le abbiamo definite anche noi, ma solo per facilitarci alcuni lavori "interni" quando si tratta di produrre dei tabulati, o delle liste a video, che sono frutto di query incrociate molto complesse e si vuole avere il massimo delle performance.
Gaten tieni conto che una vista non è altro che una query SQL che decidi di salvare all'interno del tuo data base per averla sempre pronta all'uso, sia da un client SQL o dal tuo software. Spero di essere stato chiaro
