Sviluppo web dinamico Roadmap • • • • Introduzione Web Server, Application Server e DB Server PHP Database e modello ER Applicazione web • ‘…è l'espressione che in generale viene impiegata per indicare tutte le applicazioni distribuite web-based’ ovvero ‘[…] applicazioni accessibili via web per mezzo di un network, come ad esempio una intranet o attraverso la Rete Internet’ (Wikipedia) …tradotto in linguaggio comune… è un SITO WEB! Sito web • Insieme di pagine web correlate che risiede su un web server e accessibile all’utente che ne fa richiesta digitandone il rispettivo URL o l’indirizzo IP all’interno di un browser • 2 tipologie principali: ▫ Siti web statici ▫ Siti web dinamici Sito web statico (1/2) • Formato da pagine web statiche. • Interazione unilaterale: l'utente può visualizzare i contenuti del sito, ma non modificare lo stato né le informazioni. • Solitamente viene aggiornato con una bassa frequenza e gestito da una o più persone che agiscono direttamente sul codice HTML della pagina. Sito web statico (2/2) • I siti web basati su questo paradigma sono stati la prima tipologia e per questa ragione estremamente diffusi. • Il ‘linguaggio di marcatura’ padre del web statico è l‘HTML. • Molti siti web statici sono successivamente migrati verso il web dinamico. Sito web dinamico (1/2) • Il termine web dinamico viene utilizzato per indicare tutte quelle applicazioni web con cui l’utente può interagire attivamente modificandone il contenuto, il layout, interrogandone il database (es. blog, forum, wiki, siti di e-commerce…) • Le informazioni (o contenuti) del sito vengono separate dall’impaginazione e si adattano alle scelte fatte dall’utente • L’aggiornamento del sito web da parte dell'amministratore è molto più agevole e rapido Sito web dinamico (2/2) Semplificando, il web browser del client invia le proprie richieste al livello intermedio, ovvero al motore applicativo dinamico del web server, che da una parte interpreta e gestisce le interrogazioni al Database e dall'altra genera il risultato in un output diretto allo stesso browser, che lo interpreta e lo restituisce all'utente sotto forma di pagine web. Web Server • Può essere inteso in 2 modi: ▫ computer sul quale è ospitata una applicazione web ▫ programma eseguito su un computer (quindi hardware o software). • Generalmente un server web ospita siti web, ma può essere utilizzato per applicazioni di gaming, memorizzazione di dati o esecuzione di applicazioni aziendali. Web Server Hardware • Computer sul quale sono presenti file di vario tipo accessibili (non tutti!) dall’esterno tramite rete (generalmente attraverso il protocollo http). • L'accesso a tali file avviene attraverso l'URL (Universal Resource Locator) che indica la localizzazione di un file in rete. • Su tale computer è installato un programma che prende il nome di web server (software) Web Server software • Il suo compito principale è fornire pagine web al browser (Client) che ne ha fatto richiesta. • La visualizzazione di una pagina web è frutto dell'elaborazione di un codice. Tale elaborazione può essere fatta dal browser del client (per i linguaggi lato client: HTML, CSS, Javascript) o dal server (per i linguaggi lato server: PHP, ASP…) • Esistono molti web server software (Microsoft IIS, Nginx, Lighttpd,…), ma il più noto ed utilizzato è Apache HTTP Server (o semplicemente Apache) Application Server 1/2 • È un software che fornisce l'infrastruttura e le funzionalità di supporto, sviluppo ed esecuzione di applicazioni e componenti server in un contesto distribuito. Si tratta di un complesso di servizi orientati alla realizzazione di applicazioni multilivello ed enterprise, con alto grado di complessità, spesso orientate per il web. (Wikipedia) • L'application server è composto da moduli Application server 2/2 • I moduli normalmente presenti in un application server sono: ▫ contenitore di componenti server-side; ▫ gestore degli accessi degli utenti e della sicurezza; ▫ gestore accesso al database o in generale a sorgenti di dati esterne; ▫ gestore transazioni; ▫ altri componenti per massimizzare le prestazioni (load balancer, caching, etc.) Database Server • È un programma che fornisce servizi di database ad altri software o compute secondo il modello client-server. • Con tale termine ci si può anche riferire ad un computer dedicato all'esecuzione di tale programma. • I Database Management System (DBMS) spesso forniscono funzionalità di DB server. Linguaggi lato server • L’elaborazione è fatta direttamente dal server il quale restituirà al client (in genere al browser), anziché il codice originale con cui è scritto il file (es. codice php), l'elaborazione di questo: ▫ il php sarà interpretato dal server e andrà a generare, a sua volta, un linguaggio lato client (ad esempio HTML, ma può generare anche immagini, documenti pdf, documenti XML, filmati Flash,…). Linguaggi lato server (esempio 1/2) Se un browser punta ad una pagina php con il seguente codice: Linguaggi lato server (esempio 2/2) dopo l'elaborazione il server restituirà al browser il seguente codice: La cosa essenziale è che per il client sarà impossibile visualizzare il codice sorgente; cioè sarà impossibile risalire al php: egli riceverà solo codice html, javascript e css. LAMP, XAMPP, WAMP e affini • Sono pacchetti software gratuiti per lo sviluppo di applicazioni web, contenenti: ▫ Apache HTTP Server ▫ MySQL ▫ PHP • Si differenziano tra loro per i sistemi operativi per i quali erano stati pensati, per i DBMS che forniscono e per i linguaggi di scripting che gestiscono. • Gli script php vanno inseriti nella DocumentRoot Sviluppo web dinamico: Basi di dati Base di dati • Una base di dati è una collezione di dati utilizzati per rappresentare le informazioni di interesse per un sistema informativo • Esempi: ▫ ▫ ▫ ▫ ▫ rubrica telefonica personale anagrafe archivio di una biblioteca segreteria studenti dell’università … Database Management System • Un Database Management System (DBMS) è un pacchetto software progettato per memorizzare e gestire basi di dati. • Sistema in grado di gestire grandi collezioni di dati persistenti in modo efficiente ed efficace garantendo servizi di condivisione, affidabilità e sicurezza. • È sostanzialmente uno strato software che si frappone fra l'utente ed i dati veri e propri. L'utente e le applicazioni non accedono ai dati così come sono memorizzati effettivamente, cioè alla loro rappresentazione fisica, ma ne vedono solamente una rappresentazione logica DBMS: figure coinvolte utenti finali applicazioni programmatori DBMS amministratori progettisti utenti casuali Base di Dati Progettazione di basi di dati • La metodologia utilizzata nell’ambito delle basi di dati si articola in tre fasi da effettuare in cascata: ▫ Progettazione concettuale ▫ Progettazione logica ▫ Progettazione fisica • La prima fase risponde alla domanda: “cosa dovrà rappresentare la base di dati?” • Le successive invece si occupano di come rappresentarlo Progettazione concettuale • Il suo scopo è quello di rappresentare le specifiche informali in termini di una descrizione formale e completa, che sia indipendente dai criteri di rappresentazione utilizzati nella base di dati • Il prodotto di questa fase è chiamato schema concettuale e fa riferimento ad un modello concettuale dei dati Progettazione logica • Consiste nella traduzione dello schema concettuale in termini delle strutture di rappresentazione proprie del tipo di sistema di gestione di basi di dati a disposizione • Il prodotto di questa fase viene denominato schema logico della base di dati e fa riferimento ad un modello logico dei dati Progettazione fisica • In questa fase lo schema logico viene completato con la specifica dei parametri fisici di memorizzazione dei dati • Il prodotto di questa fase viene denominato schema fisico e fa riferimento ad un modello fisico dei dati Progettazione di una base di dati relazionale Modello E-R • Il più diffuso modello concettuale dei dati ▫ ne esistono molte versioni, (più o meno) diverse l’una dall’altra • Fornisce una serie di costrutti atti a descrivere la realtà di interesse in modo semplice da comprendere Costrutti del modello E-R • Entità: classi di oggetti che hanno proprietà comuni (concetto del mondo reale che raggruppa un insieme di informazioni coese e che ha senso anche autonomamente) ▫ Es.: Città, Dipartimento, Impiegato Città • Relazione: legami logici tra due o più entità ▫ Es.: Residenza tra Città e Impiegato Residenza Rappresentazione grafica Occorrenze • Occorrenza (o istanza) di entità: elemento della classe ▫ (l'oggetto, la persona, …, non i dati) ▫ Es.: gli impiegati Marini e Rossi sono esempi dell’entità Impiegato • Occorrenza (o istanza) di una relazione: ennupla (coppia nel caso di relazioni binarie) costituita da occorrenze di entità Attributo • Costrutto che descrive proprietà elementari di entità o relazioni di interesse • Associa ad ogni occorrenza un valore appartenente ad un insieme detto dominio dell’attributo, che contiene i valori ammissibili Matricola Voto Data esame Studente Anno di iscrizione Esame Cardinalità delle relazioni • Descrivono il numero minimo e massimo di occorrenze di relazione cui una occorrenza dell’entità può partecipare. ▫ Cioè: quante volte, in una relazione tra entità, un’occorrenza di una di queste entità può essere legata a occorrenze delle altre entità coinvolte • Esempio: Impiegato (1,5) Assegnamento (0,50) Incarico Cardinalità delle relazioni • Nella maggiore parte dei casi, è sufficiente utilizzare solo tre valori: ▫ Zero ▫ Uno ▫ Il simbolo N: indica genericamente un intero maggiore di uno • Considerando le sole cardinalità massime, si potranno avere relazioni del tipo: ▫ Uno a uno ▫ Uno a molti ▫ Molti a molti Esempio Ordine Persona Turista (0,1) (1,1) (1,N) Vendita Residenza Prenotazione (1,1) (0,N) (0,N) Fattura Città Viaggio Identificatori • Descrivono i concetti (attributi e/o entità) che permettono di identificare univocamente le occorrenza delle entità ▫ in molti casi, uno o più attributi di una entità sono sufficienti a individuare un identificatore identificatore interno detto chiave Targa Automobile Modello Colore Generalizzazioni Codice fiscale Cognome Persona Età Uomo Situazione militare Donna Documentazione degli schemi E-R • Dizionario dei dati ▫ Il dizionario è composto da due tabelle: Entità, Descrizione, Attributi, Identificatore Relazione, Descrizione, Entità coinvolte, Attributi • Vincoli di integrità sui dati (sono necessari) ▫ non possono essere rappresentati con i costrutti del modello E-R Esempio: un impiegato non può avere uno stipendio maggiore del direttore Esempio: descrizione del problema Si vuole informatizzare la gestione dei corsi in una facoltà universitaria. La facoltà prevede diversi corsi di laurea di tipo magistrale, caratterizzati da un codice e da un nome. Ogni corso di laurea è costituito da più insegnamenti. Ciascun insegnamento è tenuto da un solo docente, di cui si vogliono memorizzare il nome, il cognome, il codice fiscale, l’indirizzo e un recapito telefonico. Di ciascun insegnamento si vuole memorizzare il codice, il nome ed il numero di crediti. Gli studenti sono caratterizzati dalla matricola, dal nome, dal cognome, dalla data di nascita e dal luogo di nascita. Ogni studente deve sostenere tutti gli esami (di cui si vuole memorizzare data e voto) del corso di laurea a cui è iscritto. Lo studente può sostenere l’esame finale solo dopo aver ottenuto un totale di 120 crediti. Esempio: schema E-R Nome Cognome Indirizzo iddocente tel cf idcdl denominazione (1,N) Docente contiene Corso di laurea (1,N) (1,N) titolare (1,1) data voto Iscritto (1,1) (1,1) Insegnamento Voto esame (0,N) idinsegnamento crediti denominazione Studente (0,N) matricola cognome nome luogo di nascita data di nascita Modello relazionale • I dati sono organizzati in relazioni • Le relazioni possono essere interpretate/visualizzate come tabelle • Un database è un insieme di relazioni Rubrica nomi degli attributi (o campi) schema Tuple (o record) COGNOME NOME TEL. Tanzi Rosario 095 89 ... Federici Susanna 011 55 ... De Bernardi Silvio 06 44 ... Dallo schema E-R al DB relazionale 1\2 Traduzione da Modello concettuale a Insieme di tabelle • Entità -> Tabella • Attributi -> Campi Identificatore -> Chiave primaria Dallo schema E-R al DB relazionale 2/2 • Relazioni Molti a Molti ▫ Relazione -> Tabella chiavi delle entità partecipanti (chiavi esterne) attributi della relazione • Relazioni Uno a Molti ▫ si può evitare la tabella aggiuntiva includendo la chiave dell’entità con cardinalità massima pari a N (chiave esterna) nella tabella relativa all’altra entità (quella con cardinalità massima pari a 1) • Relazioni Uno a Uno ▫ Si può creare un’unica tabella che contiene gli attributi di entrambe le entità oppure aggiungere la chiave di un entità nell’altra Esempio: schema E-R Nome Cognome Indirizzo iddocente tel cf idcdl denominazione (1,N) Docente contiene Corso di laurea (1,N) (1,N) titolare (1,1) data voto Iscritto (1,1) (1,1) Insegnamento Voto esame (0,N) idinsegnamento crediti denominazione Studente (0,N) matricola cognome nome luogo di nascita data di nascita Traduzione E-R DB relazionale • Fase 1: trasformazione delle entità in tabelle ▫ Docente(iddocente,Nome,Cognome, Indirizzo,tel,cf) ▫ Insegnamento(idinsegnamento,crediti,denomin azione) ▫ Studente(matricola,cognome,nome,luogo di nascita,data di nascita) ▫ Corso di laurea(idcdl,denominazione) Traduzione E-R DB relazionale • Fase 2: trasformazione delle relazioni: ▫ Docente(iddocente, Nome, Cognome, Indirizzo, tel, cf) ▫ Insegnamento(idinsegnamento, crediti, denominazione, iddocente, idcdl) ▫ Studente(matricola, cognome, nome, luogo di nascita, data di nascita, idcdl) ▫ Corso di laurea(idcdl, denominazione) ▫ Esame (idinsegnamento, matricola, data, voto) SQL (Structured Query Language) • Nasce nel 1974 con il nome SEQUEL (IBM) • Standard ANSI (American National Standards Institute) nel 1986 • Standard ISO (International Organization for Standardization) nel 1987. • È un linguaggio per interrogare e gestire basi di dati relazionali mediante l'utilizzo di costrutti di programmazione denominati query. Creare database e tabelle • CREATE DATABASE nome_database • CREATE table nome_tabella ( nome_colonna tipo_colonna [ clausola_default ] [ vincoli_di_colonna ] … ) • Esempio: ▫ CREATE table Libro ( ID INTEGER PRIMARY KEY, Genere CHAR(18) NOT NULL Titolo CHAR(25) NOT NULL ); Inserimento riga • INSERT INTO nome_tabella [ ( elenco_campi ) ] VALUES ( elenco_valori ) • Esempio ▫ INSERT INTO Libro VALUES ( 1, ‘Fantasy’, ‘Eragon’); Interrogare il database • SELECT [ ALL | DISTINCT ] lista_elementi_selezione FROM lista_riferimenti_tabella [ WHERE espressione_condizionale ] [ GROUP BY lista_colonne ] [ HAVING espressione_condizionale ] [ ORDER BY lista_colonne ] • Esempio ▫ SELECT Titolo FROM Libro ORDER BY Titolo ▫ SELECT DISTINCT Titolo FROM Libro ORDER BY Titolo ▫ SELECT * FROM Libro WHERE Titolo LIKE 'B%‘ ▫ SELECT COUNT(*) FROM Libro ▫ SELECT Genere, COUNT(ID) FROM Libro GROUP BY Genere UPDATE e DELETE • UPDATE nome_tabella SET elenco_assegnamenti [ WHERE espressione_condizionale ] • Esempio ▫ UPDATE Libro SET Genere = ‘Narrativa' WHERE Titolo = ‘Eragon‘ • DELETE FROM nome_tabella [ WHERE espressione_condizionale ] Modificare la struttura del DB • DROP table nome_tabella { REStrICT | CASCADE } elimina tabelle • ALTER table nome_tabella ADD [ COLUMN ] definizione_colonna aggiunge una colonna • ALTER table nome_tabella DROP [ COLUMN ] nome_colonna { REStrICT | CASCADE } elimina colonne UNION Impiegati Norvegia Impiegati USA SELECT E_Name FROM Impiegati_Norvegia UNION SELECT E_Name FROM Impiegati_USA UNION ALL Impiegati_Norvegia Impiegati_USA SELECT E_Name FROM Impiegati_Norvegia UNION ALL SELECT E_Name FROM Impiegati_USA Join o prodotto cartesiano 1/2 • Il prodotto cartesiano tra n insiemi A1 e A2 ... An si definisce come l'insieme di tutte le possibili ennuple che hanno per primo elemento un elemento di A1, per secondo elemento un elemento di A2... per ennesimo elemento un elemento di An ▫ Es. se A = {1, 3}, B = {2, 4} e C ={6, 8} A x B x C= {(1, 2, 6), (1, 2, 8), (1, 4, 6), (1, 4, 8), (3, 2, 6), (3, 2, 8), (3, 4, 6), (3, 4, 8)} Join o prodotto cartesiano 2/2 • Il prodotto cartesiano tra due relazioni coincide con il prodotto cartesiano tra insiemi; le relazioni (o tabelle) sono infatti insiemi di tuple. È dunque l'insieme di tutte le possibili tuple ottenute concatenando ogni tupla della prima relazione con ogni tupla della seconda. • La parola chiave JOIN, in SQL, è usata per ottenere dati da 2 o più tabelle in relazione tra loro attraverso alcune colonne. • Le tabelle in un database sono spesso collegate tra loro attraverso delle chiavi. Tipi di Join • JOIN: Restituisce le righe per cui c’è almeno una corrispondenza nelle varie tabelle • LEFT JOIN: Restituisce tutte le righe della tabella a sinistra della join, anche se non ci sono corrispondenze con la tabella di destra • RIGHT JOIN: Restituisce tutte le righe della tabella a destra della join, anche se non ci sono corrispondenze con la tabella di sinistra • FULL JOIN: Restituisce le righe per le quali c’è una corrispondenza in una delle tabelle INNER JOIN 1/2 Persone Ordini INNER JOIN 2/2 SELECT Persone.LastName, Persone.FirstName, Ordini.OrderNo FROM Persone INNER JOIN Ordini ON Persone.P_Id=Ordini.P_Id ORDER BY Persone.LastName LEFT JOIN SELECT Persone.LastName, Persone.FirstName, Ordini.OrderNo FROM Persone LEFT JOIN Ordini ON Persone.P_Id=Ordini.P_Id ORDER BY Persone.LastName RIGHT JOIN SELECT Persone.LastName, Persone.FirstName, Ordini.OrderNo FROM Persone RIGHT JOIN Ordini ON Persone.P_Id=Ordini.P_Id ORDER BY Persone.LastName FULL JOIN SELECT Persone.LastName, Persone.FirstName, Ordini.OrderNo FROM Persone FULL JOIN Ordini ON Persone.P_Id=Ordini.P_Id ORDER BY Persone.LastName Esercizio • Siamo stati chiamati a progettare una base di dati dal Comando dei Vigili del Fuoco di Cambridge al fine di poter gestire i dati riguardanti le caserme della città. Per ogni caserma si vuole archiviare il codice, il nome, l’indirizzo e l’anno di costruzione. A ogni caserma sono associate delle zone della città, ovvero quella parte di territorio che deve servire. Le zone sono caratterizzate da un codice e da un nome. Ogni caserma ospita diverse squadre di soccorso definite Unità Operative. Ogni Unità Operativa ha un codice e un nome. Ogni unità operativa ha in dotazione attrezzature per il pompaggio dell’acqua che sono caratterizzate da : Anno di costruzione, Produttore, Tipo o modello, Lunghezza delle scale, Capacità in litri, Frequenza di pompaggio (litri per minuto – l/min) Esercizio: modello E-R Esercizio: schema logico Zona (ID, Nome, IDStazione) Stazione VdF (ID, Nome, Indirizzo, Anno) UnitàOperativa (ID, Nome, IDStazione) Attrezzatura(ID, Modello, Anno, Frequenza, Capacità, Lunghezza, IDUnitàOp) Esercizio: interrogazioni • Il database dovrà consentire di ricavare le seguenti informazioni attraverso delle semplici query: ▫ Quali stazioni sono state costruite dopo il 1899? ▫ Quali unità utilizzano attrezzi costruiti prima del 1990? ▫ A quali stazioni appartengono le unità che utilizzano attrezzature modello Lance? ▫ Quante delle attrezzature in dotazione sono state del modello Pierce? Esercizio: query sql 1. 2. 3. 4. SELECT * FROM StazioneVdF WHERE Anno>1899 SELECT UnitàOperativa.* FROM UnitàOperativa JOIN Attrezzatura ON UnitàOperativa.ID=Attrezzatura.IDUnitàOp WHERE Attrezzatura.Anno<1990 SELECT StazioneVdF.* FROM UnitàOperativa JOIN Attrezzatura ON UnitàOperativa.ID=Attrezzatura.IDUnitàOp JOIN StazioneVdF ON UnitàOperativa.IDStazione=StazioneVdF.ID WHERE Attrezzatura.Modello="Lance" SELECT COUNT (*) FROM Attrezzatura WHERE Modello="Pierce"