immagine avatar

Ciao come puoi notare ho dato una bella rinfrescatina al mio blog!
Attendo un tuo feedback, per suggerimenti e ulteriori proposte di miglioramento, ma anche, sperando che non ci siano, segnalazioni di errori o malfunzionamenti del blog. Buona lettura!

Utilizzare le Viste in MySQL

di MaiNick | 5 Ago 2010 | MySQL, snippets | 1 Commento
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.

Tags: , ,

Un Commento

  1. Nicola ha detto:

    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.

Trackbacks

Lascia un Commento

^ Torna su