APPLICAZIONI DELLEBASI DI DATI
APPLICAZIONI TRADIZIONALIAPPLICAZIONI INTERNET
SQL EMBEDDED
Giorgio Giacinto 2010 Database 3
SQL nel codice applicativo! I comandi SQL possono essere chiamati dall’interno
di un programma in un linguaggio ospite (adesempio C++ o Java)! I comandi SQL possono far riferimento a variabili
dell’ospite (incluse variabili speciali usate per restituire unostatus)
! Deve essere incluso un comando per connettersi alla basedi dati
! Due principali approcci all’integrazione! Incorporare l’SQL nel linguaggio ospite (SQL incapsulato,
ad es., SQLJ)! Creare una speciale API per chiamare i comandi SQL (ad
es., JDBC)
Giorgio Giacinto 2010 Database 4
SQL incapsulato (embedded)! Approccio: incapsulare l’SQL nel linguaggio ospite.
! Un preprocessore converte i comandi SQL in specialichiamate all’API
! Successivamente un normale compilatore viene usato percompilare il codice
! Costrutti del linguaggio! connessione a una base di dati
EXEC SQL CONNECT! Dichiarazione di variabili
EXEC SQL BEGIN (END) DECLARE SECTION! Comandi
EXEC SQL comando
Giorgio Giacinto 2010 Database 5
EXEC SQL BEGIN DECLARE SECTIONChar c_vnome[20];Long c_vid;Short c_esperienza;Float c_età;EXEC SQL END DECLARE SECTION
! Inserimento di una rigaEXEC SQLINSERT INTO Velisti
VALUES(:c_vnome,:c_vid,:c_esperienza,:c_età);
SQL incapsulato: variabili
Giorgio Giacinto 2010 Database 6
SQL incapsulato: variabilierrore
! Due speciali variabili “errore”! SQLCODE (long)
se negativa si è verificato un errore! SQLSTATE char[6]
codici predefiniti per errori comuni
Giorgio Giacinto 2010 Database 7
SQL nel codice applicativoCursori
Disadattamento di impedenza! Le relazioni SQL sono (multi-)insiemi di
record senza un numero di record fissato apriori. Nessuna struttura di questo tipoesiste tradizionalmente in linguaggi diprogrammazione procedurali come il C++
! SQL supporta un meccanismo chiamatocursore per gestire questa situazione
Giorgio Giacinto 2010 Database 8
SQL incapsulatoSELECT senza cursori
EXEC SQL SELECT V.vnome,V.etàINTO :c_vnome, :c_etàFROM Velisti VWHERE V.vid = :c_vid;
• Questa SELECT restituisce al più una solatupla
• non è necessario definire un cursore
Giorgio Giacinto 2010 Database 9
Cursori! Si può dichiarare un cursore su una relazione o un
comando di interrogazione! Si può aprire un cursore, e ripetutamente prelevare
una tupla, poi muovere il cursore fino a quando tuttele tuple siano state lette.! Si può usare ORDER BY nelle interrogazioni cui si accede
tramite cursore, per controllare l’ordine in cui le tuple sonorestituite! I campi nella clausola ORDER BY devono apparire anche
nella clausola SELECT! ORDER BYè permessa solo nel contesto di un cursore
! Si può anche modificare/cancellare la tupla puntatadal cursore
Giorgio Giacinto 2010 Database 10
Cursori che leggonoin ordine alfabetico i nomi dei velisti che hannoprenotato una barca rossa
EXEC SQL DECLARE vinfo CURSOR FORSELECT V.vnomeFROM Velisti V, Barche B, Prenota PWHERE V.vid = P.vid AND P.bid = B.bid
AND B.colore = ‘rosso’ORDER BY V.vnome
Giorgio Giacinto 2010 Database 11
Incapsulare l’SQL in C: unesempiochar SQLSTATE[6];EXEC SQL BEGIN DECLARE SECTIONchar c_vnome[20]; short c_minesperienza;
float c_età;EXEC SQL END DECLARE SECTIONc_minesperienza = random();EXEC SQL DECLARE vinfo CURSOR FORSELECT V.vnome, V.età FROM Velisti VWHERE V.esperienza > :c_minesperienzaORDER BY V.vnome;EXEC SQL OPEN vinfo;do {
EXEC SQL FETCH vinfo INTO :c_vnome, :v_età;printf(“%s ha %d anni\n”, c_vnome, c_età);
} WHILE (SQLSTATE != ‘02000’);EXEC SQL CLOSE vinfo;
Giorgio Giacinto 2010 Database 12
Proprietà dei cursori! Un cursore può essere dichiarato
! Sola lettura! Aggiornabile (per usare UPDATE e DELETE)
! SCROLL CURSOR! Flessibilità nel posizionamento di FETCH
! INSENSITIVE! Il cursore è come se agisse su una copia privata della
relazione risultato! WITH HOLD
! Il cursore non viene chiuso al termine di una transazione
Giorgio Giacinto 2010 Database 13
SQL dinamico! Le stringhe di interrogazione SQL non sono sempre
note al momento della compilazione (ad esempiofogli di lavoro o frontend grafici per il DBMS)Il linguaggio SQL consente di costruire comandiSQL al volo
! Esempio:
char c_stringasql[]={“DELETE FROM Velisti WHERE esperienza > 5”};
EXEC SQL PREPARE pronti FROM :c_stringasql;EXEC SQL EXECUTE pronti;
Giorgio Giacinto 2010 Database 14
API per basi di datialternative all’incapsulamento! Piuttosto che modificare il compilatore, si possono
aggiungere librerie con chiamate alla base di dati(API)! Speciale interfaccia standardizzata: procedure/oggetti
! Si passano le stringhe SQL dal linguaggio, sipresentano gli insiemi risultato in manieracomprensibile
! JDBC della Sun: API Java! Generalmente neutre rispetto al DBMS
! Un “driver” rileva le chiamate e le traduce in codicespecifico per il DBMS
! La base di dati può essere distribuita
Giorgio Giacinto 2010 Database 15
Uso di Call Level Interface(CLI)
! I DBMS sono eseguiti come processi server! Processi attivi che offrono dei servizi a richiesta
! Per fruire dei servizi occorre connettersi al DBMS! Interfacce fra DBMS e altri programmi
Applicazione Interfaccia(ADO, RDO, …)
Driver(DBD,ODBC,…)
Database(Oracle,MySQL,…)
STORED PROCEDURE
Giorgio Giacinto 2010 Database 17
Stored procedure! Cos’è una stored procedure
! Programma eseguito tramite un singolo comandoSQL
! Eseguito nello spazio del processo sul server! Vantaggi
! Può incapsulare la logica dell’applicazionerimanendo al contempo “vicino” ai dati
! Riutilizzo della logica dell’applicazione da parte diutenti diversi
! Evita la lettura dei record tupla-per-tupla tramite icursori
Giorgio Giacinto 2010 Database 18
Stored procedure: esempiCREATE PROCEDURE MostraNumPrenotazioneSELECT V.vid, V.vnome, COUNT(*)FROM Velisti V, Prenota PWHERE V.vid = P.vidGROUP BY V.vid, V.vnome
Le stored procedure possono avere parametri! Tre modi differenti: IN, OUT, INOUTCREATE PROCEDURE AumentaEsperienza(
IN velista_vid INTEGER, IN aumento INTEGER)UPDATE Velisti
SET esperienza = esperienza + aumentoWHERE vid = velista_vid
Giorgio Giacinto 2010 Database 19
Stored procedure: esempi (segue)
Le stored procedure non devononecessariamente essere scritte in SQL
CREATE PROCEDURE VelistiTop(IN num INTEGER)LANGUAGE JAVA
EXTERNAL NAME ”file://c:/storedProcs/rank.jar”
Giorgio Giacinto 2010 Database 20
Chiamare le stored procedureEXEC SQL BEGIN DECLARE SECTIONint vid;int esperienza;EXEC SQL END DECLARE SECTION// ora aumenta l’esperienza di questo velistaEXEC CALL AumentaEsperienza(:vid, :esperienza);
Giorgio Giacinto 2010 Database 21
SQL/PSMLa maggior parte dei DBMS consente agli utenti discrivere stored procedure in un linguaggio semplice egeneral-purpose (vicino all’SQL) → lo standard SQL/PSMne è un esempio
Dichiarare una stored procedure:CREATE PROCEDURE nome(p1, p2,... pn)
Dichiarazioni di variabili localiCodice della procedura;
Dichiarare una funzione:CREATE FUNCTION nome(p1, ..., pn) RETURNS
TipoDatoSQLDichiarazione di variabili localiCodice della funzione;
Giorgio Giacinto 2010 Database 22
Principali costruttiSQL/PSM
CREATE FUNCTION valuta Velista(IN velistaID INTEGER)RETURNS INTEGER
DECLARE esperienza INTEGERDECLARE numRis INTEGERSET numRis = (SELECT COUNT(*)
FROM Prenota PWHERE P.vid = velistaID)
IF (numRis > 10) then esperienza = 1;ELSE esperienza = 0;END IFRETURN esperienza;
APPLICAZIONI VERTICALI
Giorgio Giacinto 2010 Database 24
Sistemi informativi e basi didati! Le basi di dati sono il componente di base di
un sistema informativo! Gestiscono la memorizzazione e il recupero
efficiente e efficace dei dati! Nel corso dei decenni sono stati sviluppati
diversi applicativi verticali! Orientati a applicazioni aziendali specifiche
! Oggi molti produttori di DBMS hannoacquisito società specializzate nellaproduzione di applicazioni verticali
Giorgio Giacinto 2010 Database 25
Processi Aziendali
! HRHuman Resources Management
! Finance Management! Procurement! CRM
Customer Relationship Management
Giorgio Giacinto 2010 Database 26
Gestione della produzione
! ERPEnterprise Resource Planning
! SCMSupply Chain Management
! PLMProduct Lifecycle Management
APPLICAZIONI INTERNET
Giorgio Giacinto 2010 Database 28
Basi di Dati e Reti! La diffusione del protocollo http per lo
scambio di dati ha modificato tutte leapplicazioni delle basi di dati! Non più client dedicati, ma browser web per
accedere ai processi aziendali! Internet ha permesso la nascita del
cosiddetto commercio elettronico! Richiede accessi in lettura e scrittura a diverse
basi di dati! Prodotti del venditore! Mediatore per l’acquisto
Giorgio Giacinto 2010 Database 29
Internet e Basi di Dati
! Le stesse informazioni messe a disposizionesui siti Internet sono sempre più spessoorganizzate come basi di dati! Dall’HTML a XML
! Questo approccio semplifica le operazioni diinserimento, aggiornamento, cancellazione didati
Giorgio Giacinto 2010 Database 30
Web-service! E’ una applicazione che fornisce un servizio ben
definito! Un insieme di procedure richiamabili in remoto tramite
Internet! Le applicazioni possono essere scritte in linguaggi
diversi! Ma scambiano informazioni attraverso formati standard -
XML! SOAP: standard per chiamate basate su XML di
servizi remotiArgomenti trattati nel corso TARI
Giorgio Giacinto 2010 Database 31
Componenti dei sistemi“data-intensive”! Tre tipi separati di funzionalità
! gestione dei dati! logica di applicazione! presentazione
! L’architettura del sistema determina se queste trecomponenti risiedono su un singolo sistema (tier)oppure se sono distribuite su diversi tier
! Evoluzione delle architetture dipendente da! Evoluzione tecnologia! Riduzione costi (diffusione PC, ecc.)
Giorgio Giacinto 2010 Database 32
Architettura a livello singolo! Tutte le funzionalità sono
combinate in un singolo tier,generalmente un mainframe! Accesso utente tramite
terminali “non intelligenti”! Vantaggi
! facilità di manutenzione eamministrazione
! Svantaggi! Gli utenti si aspettano
interfacce di tipo grafico! Il calcolo centralizzato di
tutte le interfacce grafiche ètroppo costoso per unsingolo sistema
Client
Logica dell’Applicazione
DBMS
Giorgio Giacinto 2010 Database 33
Architetture client-serverthin client! Il client implementa solo l’interfaccia utente
grafica! Il server implementa la logica dell’applicazione
e la gestione dei dati
Logica dell’Applicazione
DBMS
Client
Client
Rete
Giorgio Giacinto 2010 Database 34
Architetture client-serverthick client
! Il client implementa sial’interfaccia grafica che (partede) la logica dell’applicazione
! Il server implementa lagestione dei dati
DBMS
Logica dell’Applicazione
Client
Logica dell’Applicazione
Client
Rete
Giorgio Giacinto 2010 Database 35
Architetture client-server(segue)! Svantaggi dei thick client
! Nessun luogo centralizzato per aggiornare la logicadell’applicazione
! Problemi di sicurezza: il server deve fidarsi dei client! Il controllo di accesso e l’autenticazione devono essere
gestiti dal server! I client devono lasciare la base di dati del server in uno
stato consistente! Una possibilità: incapsulare tutti gli accessi alla base di
dati in stored procedure! Non scalabile a più di un centinaio di client
! Grossi trasferimenti di dati tra server e client! Più di un server crea un problema:
x client, y server: x*y connessioni
Giorgio Giacinto 2010 Database 36
Programma client (browser web)
Livello di presentazione
Application ServerLivello intermedio
Sistema di base di dati Livello di gestione dati
L’architettura a tre livelli
Giorgio Giacinto 2010 Database 37
I tre livelli! Livello di presentazione
! Interfaccia primaria con l’utente (moduli HTML…)! Deve adattarsi a diversi dispositivi di visualizzazione (PC,
PDA, telefoni cellulari, accesso vocale?)! Livello intermedio
! Implementa la logica dell’applicazione (implementa azionicomplesse, mantiene lo stato tra diversi passi di un flussodi lavoro)
! Accede a diversi sistemi di gestione dei dati! Livello di gestione dei dati
! Uno o più sistemi standard per la gestione di basi di dati
Giorgio Giacinto 2010 Database 38
Sistema di basi di dati (MySQL, ORACLE)
Application Server(Tomcat, Apache)
Programma client (Browser web )
HTMLJavascriptXSLT
JSPServletsCookiesCGI
XMLStored Procedures
Tecnologie
Giorgio Giacinto 2010 Database 39
DBMSLogica
dell’Applicazione
Client
Client
Rete Rete
Archietture client-serverthree tier
Giorgio Giacinto 2010 Database 40
Vantaggi architetture a trelivelli
! Sistemi eterogenei! Thin client! Accesso integrato ai dati! Scalabilità rispetto al numero di client! Benefici nello sviluppo del software
! Interazioni fra livelli attraverso API standardizzate
Giorgio Giacinto 2010 Database 41
Esempio 1: prenotazioni aeree! Costruire un sistema per prenotazioni aeree! Cosa viene fatto dai vari livelli?! Sistema di basi di dati
! Informazioni sulle aerolinee, posti disponibili, informazionisui clienti, etc.
! Application server! Logica per effettuare le prenotazioni, cancellare le
prenotazioni, aggiungere nuove aerolinee, etc.! Programma client
! Log in dei vari utenti, visualizzazione di moduli e output informa leggibile
Giorgio Giacinto 2010 Database 42
Esempio 2: iscrizione a corsi! Costruire un sistema usando il quale degli studenti
possono iscriversi a dei corsi! Sistema di base di dati
! Informazioni sugli studenti, informazioni sui corsi,informazioni sui docenti, disponibilità dei corsi, pre-requisiti,etc.
! Application server! Logica per modificare un corso, cancellare un corso, creare
un nuovo corso, etc.! Programma client
! Login dei vari utenti (studenti, personale, professori),visualizzazione di moduli e output in forma leggibile