Utilizzare le Viste in MySQL

- MySQL, snippets
snippets-mysql.jpg

Un errore particolarmente importante che fanno molti programmatori è mescolare la logica applicativa e il modello. Gli sviluppatori PHP, ad esempio, hanno la tendenza di mettere insieme una quantità tremenda di query SQL nella loro logica del sito web, con conseguente codice impossibile da mantenere. Un buon numero di prodotti sono emersi per aiutare gli sviluppatori per evitare ciò, soprattutto framework MVC come Symfony o Zend Framework.

Tuttavia, se si sta utilizzando un framework MVC o codice personalizzato, si può ulteriormente separare la logica dal modello, approfittando di due funzioni dei database relazionali, Viste e stored procedure. Entrambe le funzioni consentono di spostare la logica applicativa all’interno del server del database stesso, minimizzando in tal modo la serie di modifica da fare in secondo momento a causa di (rifattorizzazione) refactoring del codice.

Le viste sono essenzialmente alisa query che permettono di semplificare notevolmente la sintassi utilizzata per eseguire lunghe query, come ad esempio una join.
Ad esempio, supponiamo che stiamo costruendo un sito e-commerce e che deve fornire ai clienti un modo semplice per visualizzare i loro prodotti precedentemente acquistati. Questa caratteristiche comporta spesso l’uso di una join, come la seguente:

SELECT p.id as id, p.titolo as titolo FROM prodotti p LEFT JOIN ordine_dettagli od ON od.prodotto_id = p.id 
LEFT JOIN ordini o ON o.id = od.ordini_id WHERE o.cliente_id='12345';

Utilizzando una vista è possibile eliminare molti dei problemi che circondano l’incorporamento di query complesse, solo un alias al posto della join come questo:

SELECT * from prodotti_clienti_join WHERE o.cliente_id = '12345';

Per creare una vista, accedere al vostro client MySQL o tool Web-based, come phpMyAdmin, ed eseguire la seguente query:

CREATE VIEW prodotti_clienti_join AS SELECT p.id as id, p.titolo as titolo FROM prodotti p 
LEFT JOIN ordine_dettagli od ON od.prodotto_id = p.id LEFT JOIN ordini o ON o.id = od.ordini_id;

Dopo aver creato la vista, se si decide di aggiungere un’altra colonna ad essa, tutto quello che dovete fare è accedere nuovamente al client MySQL e utilizzare l’istruzione ALTER VIEW. Dopo che la vista è stata cambiata, la colonna nuova sarà immediatamente disponibile all’interno di ogni set di record recuperato dalla query vista.

Potrebbero Interessarti

  • Utilizzare più istruzioni SQL prepare con PHP MySQLi11 Febbraio 2010 Utilizzare più istruzioni SQL prepare con PHP MySQLi Giorni fa in ufficio, durante lo sviluppo di un'applicazione di gestione, mi sono imbattuto in un errore causato dal tentativo di utilizzare più istruzioni prepare di MySQLi. Ieri ho trovato un articolo che mi ha risolto il problema: Carson McDonald spiega quale sia la causa che […]
  • MySQL Event Scheduler17 Dicembre 2012 MySQL Event Scheduler Nel gestire grandi applicazioni Web si possono avere un sacco di righe di dati indesiderate. Ad esempio se un e-commerce è realizzato in modo da memorizzare in modo permanente la gestione del carrello dinamico, oppure la permanenza di vecchi listini divisi per gruppi d'acquisto, avremo […]
  • Come rendere il database più sicuro9 Maggio 2011 Come rendere il database più sicuro Se hai un sito web in cui memorizzi dati dell'utente è probabile che si utilizzi un database, come MySQL, SQLite o altro, ed è importante assicurarsi che il proprio database sia sicuro da e per gli utenti. Creare istruzioni di query al volo come la sequente: è […]
  • Iterazione foreach degli array in JavaScript2 Agosto 2010 Iterazione foreach degli array in JavaScript Iterare gli array associativi in PHP è molto più semplice, ma proprio in questi giorni ho avuto l'esigenza di ottenere la stessa funzionalità in JavaScript, e mi sono reso conto di non saper come recuperare i dati da un array associativo con un ciclo nel linguaggio […]

Potrebbero interessarti

  • Vorrei dare la mia opinione in merito! Le viste sono uno strumento potentissimo e semplificano notevolmente query complesse, come dice Mainick…e fin qui siamo d’accordo.
    Non sono d’accordo sul passaggio che hai fatto sulle stored procedure: racchiudere parte della logica del all’interno del motore del database non è un approccio che io condivido, per questioni di manutenibilità e controllo del software.
    Con ciò non escludo l’utilizzo di stored procedure, ma preferisco che esse si occupino di problemi riguardanti esclusivamente il database (ad esempio coerenza di dati o modifiche dinamiche della struttura), e gestire tutta la logica del software (compreso tutto il model) tramite codice e non tramite DB.

    5 Agosto 2010

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.