Sistemi Informativi e Basi di Dati



Documenti analoghi
Interrogazioni complesse. SQL avanzato 1

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone. SQL: il DDL

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Domini elementari, 2. Basi di dati. Domini elementari, 4. Domini elementari, 3. Domini definiti dagli utenti. Domini elementari, 5

Gestione delle tabelle

Dichiarazione degli schemi in SQL DDL 1

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Informatica B. Contenuti. Introduzione alle Basi di Dati e ai DBMS. Introduzione a dati e basi dati DBMS Modello dei dati

DBMS (Data Base Management System)

Linguaggio SQL: fondamenti D B M G. Gestione delle tabelle

Archivi e Basi di Dati

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

Operazioni sui database

PROGRAMMA DI CLASSE 5AI

Definizione di domini

Basi di Dati: Corso di laboratorio

SQL come linguaggio di interrogazione. Basi di dati. Interrogazioni SQL. Interpretazione algebrica delle query SQL

Lezione V. Aula Multimediale - sabato 29/03/2008

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Basi di dati SQL. Standardizzazione di SQL. Linguaggi di Interrogazione: SQL. Prof.Angela Bonifati

Vincoli, procedure e regole attive in SQL. SQL: vincoli, trigger 1

SQL Sintassi Dei Comandi

Corso di Informatica Generale 1 IN1. Linguaggio SQL

SQL (STRUCTURED QUERY LANGUAGE)

Organizzazione degli archivi

Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati

Informatica per le discipline umanistiche 2 lezione 10

Corso di Laboratorio di Basi di Dati

Basi di Dati prof. Letizia Tanca

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

Le Basi di Dati. Le Basi di Dati

Istruzioni DML di SQL

Aspetti avanzati nella definizione degli schemi DDL2 1

Volumi di riferimento

SQL non è solo un linguaggio di interrogazione (Query Language), ma. Un linguaggio per la definizione di basi di dati (Data-definition language (DDL))


Basi di Dati e Sistemi Informativi. Structured Query Language

SQL PER LA DEFINIZIONE DI BASI DI DATI

Il linguaggio SQL: DDL di base

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

SQL - Tipi di dato Il linguaggio SQL

Basi di dati e Sistemi informativi aziendali

Introduzione. Elenco telefonico Conti correnti Catalogo libri di una biblioteca Orario dei treni aerei

Tecnologia dei Sistemi Informativi. architettura s.i. 1

Dispensa di database Access

Facoltà di Farmacia - Corso di Informatica

Progettazione di Basi di Dati

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico

Lorenzo Braidi. Database design. Libro_datadesign.indb :06:17

Capitolo 4. Soluzione: Soluzione: Create domain STRING as character varying (256) default sconosciuto not null

Structured Query Language parte 1

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

********************* MODIFICA STRUTTURA DI UNA TABELLA (inserimento di un nuovo campo) ALTER TABLE Personale ADD Nascita date;

Sistemi per la gestione di database: MySQL ( )

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

BASE DI DATI: sicurezza. Informatica febbraio ASA

Introduzione ai database relazionali

MAX, SUM, AVG, COUNT)

BASI DI DATI per la gestione dell informazione. Angelo Chianese Vincenzo Moscato Antonio Picariello Lucio Sansone

Introduzione al corso

SQL prima parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2011/12

INFORMATICA GENERALE Prof. Alberto Postiglione. Scienze della Comunicazione Università di Salerno. INFORMATICA GENERALE Prof. Alberto Postiglione

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Lezione 8. Metadati, Viste e Trigger

Basi di dati. L Algebra Relazionale. K. Donno - L Algebra Relazionale

Basi di dati. Concetti introduttivi ESEMPIO. INSEGNAMENTI Fisica, Analisi, Aule. Docenti. Entità Relazioni Interrogazioni. Ultima modifica: 26/02/2007

Database. Si ringrazia Marco Bertini per le slides

Data Management Software. Il linguaggio SQL. Raggruppamenti. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management Marzo 2004

Documentazione SQL. Argomento Sintassi Note Definizione schema create schema [NomeSchema] [[authorization] Autorizzazione] {DefElementoSchema}

Laboratorio di Basi di Dati e Web

Sistemi centralizzati e distribuiti

L architettura di un DBMS

Corso di Informatica (Basi di Dati)

SQL Laboratorio di Basi di Dati a.a. 2002/2003

Elena Baralis 2013 Politecnico di Torino 1

Introduzione all Algebra Relazionale

OR true null false true true true true null true null null false true null false NOT

IL LINGUAGGIO SQL IDENTIFICATORI E TIPI DI DATI COMANDI E ISTRUZIONI

Corso sul linguaggio SQL

BASI DI DATI - : I modelli di database

Corso di Informatica (Basi di Dati)

Azioni. Select e join non consentono di modificare il contenuto del DB. Inserzione di nuovi dati. Azioni desiderate. Aggiornamento di dati

Giovanna Rosone 04/03/ /03/2010 SQL, Istruzioni per la modifica dello schema

Lo schema concettuale risultante dalla progettazione concettuale è l input alla fase di progettazione logica.

DUE GRUPPI DI COMANDI

Elementi di Algebra Relazionale

Linguaggio SQL: fondamenti. Basi di dati. Elena Baralis Pag. 1. Linguaggio SQL: fondamenti. Sistemi informativi. Introduzione

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Corso sul linguaggio SQL

Introduzione al data base

N ORE LEZIONI FRONTALI: STUDIO INDIVIDUALE ( ) N ORE ESERCITAZIONI/LABORATORIO: STUDIO INDIVIDUALE ( )

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Transcript:

Prof. Stefano Ceri Sistemi ormativi Aziendali (965A) Lezione (7 lucidi) Sistemi ormativi e Basi di Dati Sistema ormativo Insieme degli strumenti, risorse e procedure che consentono la gestione delle informazioni aziendali e' essenziale per il funzionamento dell'azienda e' fortemente integrato con il sistema organizzativo comprende risorse umane Sistema ormatico Insieme dei sistemi hardware e software presenti in una azienda assicura la generazione, l'elaborazione, la circolazione e la memorizzazione delle informazioni su supporti informatici Tipici esempi di sistemi informativi applicazioni gestionali classiche gestione ordini, personale, magazzino applicazioni finanziarie banche, borsa, carte di credito sistemi di prenotazione treni, aerei, alberghi, autonoleggi nuove applicazioni gestione dei progetti, del territorio commercio elettronico Dato : Dal dato all informazione unita' elementare (grezza) di informazione ormazione : elaborazione dei dati per rispondere a esigenze specifiche dell'impresa

Compiti della tecnologia dell informazione (visione centrata sui dati) Immissione, Memorizzazione, Cancellazione dei dati Accesso, Elaborazione,Trasferimento : dai dati all'informazione Presentazione, Visualizzazione dell'informazione Dai dati ai processi PROCESSO : procedura aziendale che risponde ad un particolare compito applicativo utenti processi data base Come analizzare i sistemi informativi? a partendo dai dati b partendo dai processi CRITERIO PRINCIPALE: STABILITA DAI DATI! Architettura che ne consegue utenti processi database management system data base Database Management System (DBMS) Confronto con architetture con/senza DBMS sistemi software dedicati alla gestione dei dati esistono sul mercato alcune centinaia di prodotti diversi - per uso personale - per server in una rete - per mainframe software applicativo sistema operativo file (distinti) software applicativo DBMS sistema operativo database (unico) principale differenza: gestione dei dati unitaria e a piu' alto livello (tramite linguaggi specializzati)

Principali caratteristiche condivisione dei dati - assenza di replicazione nei file - concorrenza qualita' dei dati - vincoli di integrita' efficienza - caricamento, query, sort controllo dell'accesso - privatezza robustezza Come si usa un DBMS? a definendo la struttura generale dei dati b definendo le specifiche operazioni sui dati schema STRUTTURA DEI DATI SUI CONTI CORRENTI conto corrente di Giorgio Rossi conto corrente di Paolo Bianchi. istanza Architettura a livelli degli schemi Architettura a livelli degli schemi Schema esterno : descrizione per specifiche applicazioni Schema logico : descrizione globale applicazioni schema esterno applicazioni schema esterno schema logico applicazioni schema esterno Schema interno : descrizione dei meccanismi di gestione dei dati schema fisico Data base Perche' a tre livelli? Indipendenza logica : capacita' di offrire una visione dei dati differente ad utenti differenti Indipendenza fisica: capacita' di astrarre completamente dai meccanismi di gestione dei dati I linguaggi del DBMS DATA DEFINITION LANGUAGE (DDL) es: CREATE, DROP, ALTER DATA MANIPULATION LANGUAGE (DML) es: SELECT, INSERT, UPDATE, DELETE

Gli utenti del DBMS Database administrator : programma il DDL Programmatori applicativi : programmano le applicazioni, usano il DML Utenti casuali : eseguono versioni "amichevoli" del DML (query language, interfacce grafiche) Utenti finali ("terminalisti"): eseguono le applicazioni utenti casuali Gli utenti del DBMS utenti finali applicazioni DBMS data base programmatori applicativi database administrator database administrator processore DDL dizionario dati I moduli del DBMS programmatore applicativo processore DML utente casuale piano di esecuzione query supporto esecuzione dati utente finale applicazione DBMS utenti processo client DBMS in un contesto di rete middleware database management system data base utenti processo client database server rete Strumenti per realizzare applicazioni AMBIENTE CASE (Computer-Aided Software Engineering) : aiuta a progettare schemi e applicazioni APPLICATION GENERATOR (IV generation language) : aiutano a costruire semplici applicazioni FORM MANAGER : aiutano a descrivere l'interazione con il database (FORM = MODULO) REPORT GENERATOR : aiutano a produrre output - cartacei o su terminale - a caratteri o grafici Struttura del corso Parte I: Basi di dati relazionali Parte II: Progetto delle basi di dati Parte III: Descrizione dei sistemi informativi Parte IV: Esperienze

Obiettivi del corso Descrizione architetturale - delle basi di dati - dei sistemi informatici - dei sistemi informativi Obiettivi del corso () Insegnare due abilita di base (astratte) - progettare basi di dati - interrogare basi di dati Per sapersi orientare - nel contesto tecnologico - negli standard industriali Il contesto tecnologico sistemi distribuiti su rete - facilita' di accesso, interoperabilita sistemi multiprocessore paralleli - scalabilita' delle prestazioni nuove tecnologie per la gestione dei dati - data warehouse, data mining sistemi interconnessi da Internet - World-Wide-Web: la miglior interfaccia per accedere facilmente alle informazioni Prof. Stefano Ceri Sistemi ormativi Aziendali (965A) Lezione (9 lucidi) Il modello relazionale dei dati Cronologia dei modelli per la rappresentazione dei dati Modello gerarchico (anni 60) Modello reticolare (anni 70) Modello relazionale (anni 80) Modello a oggetti (anni 90)

Cronologia del modello relazionale Definizione informale Inventato da T. Codd, 970 (IBM Research di Santa Teresa, Cal) Primi progetti: SYSTEM R (IBM), Ingres (Berkeley Un.) Principali scoperte tecnologiche: 978-980 Primi sistemi commerciali: inizio anni 80 (Oracle, IBM-SQL DS e DB, Ingres, ormix, Sybase) studente NOME Carlo 07 45 70 Giovanni Paola Antonio colonna CITTA Bologna Milano Torino Roma C-DIP Log Log schema istanza riga Successo commerciale: dal 985. Definizione formale Dominio D: un qualunque insieme di valori Prodotto cartesiano su n domini D x D x D n (non necessariamente distinti): insieme delle n-ple (tuple) < d, d,... d n >, con d i D i, i n Relazione R su D x D x... D n : un qualunque sottoinsieme di D x D x... D n. D = (a,b) D = (,,) Esempio D x D = ( <a,>, <b,>, <a,>, <b,>, <a,>, <b,> ) R = ( <a,>, <b,> ) R = ( <c,>, <b,>, <a,> ) R = ( ) R4 = ( <a,>, <b,>, <a,>, <b,>, <a,>, <b,> ) Proprieta' Grado della relazione: numero di domini (n) Cardinalita' della relazione: numero di tuple Attributo: nome dato al dominio in una relazione [I nomi di attributo in una relazione devono essere tutti distinti fra loro] Schema (di una relazione): tabella (attributo, attributon) [I nomi delle relazioni in uno schema devono essere tutti distinti fra loro] R(A,B) A a b B Proprieta' R(C,D) C c b a D

Confronto della terminologia Esempio : gestione degli esami universitari DEFINIZIONE FORMALE DEFINIZIONE INFORMALE Una differenza significativa studente relazione attributo tupla, n-pla dominio cardinalita' grado tabella colonna riga tipo di dato numero di righe numero di colonne DEFINIZIONE FORMALE assenza di duplicati DEFINIZIONE INFORMALE possibili duplicati NOME Carlo 45 Paola 70 Antonio CITTA Bologna Torino Roma C-DIP Log Esempio : gestione degli esami universitari Esempio : gestione degli esami universitari corso COD- CORSO TITOLO matematica Barozzi informatica Meo DOCENTE esame 70 COD- CORSO DATA 7-9-97 8--98 7-9-97 VOTO 0 8 0 Esempio : gestione degli esami universitari studente 45 70 esame 70 NOME Carlo Paola Antonio COD- CORSO CITTA Bologna Torino Roma DATA 7-9-97 8--98 7-9-97 C-DIP Log VOTO 0 8 0 corso COD- CORSO TITOLO matematica Barozzi informatica Meo DOCENTE Interrogazioni quali professori hanno esaminato Carlo? studente 45 70 esame 70 NOME Carlo Paola Antonio COD- CORSO CITTA Bologna Torino Roma DATA 7-9-97 8--98 7-9-97 C-DIP Log VOTO 0 8 0 corso COD- CORSO TITOLO DOCENTE matematica Barozzi informatica Meo

Interrogazioni quali studenti hanno preso 0 in matematica? studente 45 70 esame 70 NOME Carlo Paola Antonio COD- CORSO CITTA Bologna Torino Roma DATA 7-9-97 8--98 7-9-97 C-DIP Log VOTO 0 8 0 corso COD- CORSO TITOLO matematica Barozzi informatica Meo DOCENTE Esempio : gestione personale impiegato NOME Piero Giorgio DATA-ASS --95 --97 Giovanni -7-96 assegnamento NUM-PROG PERC 50 4 50 00 4 00 SALARIO M,5 M M -MGR null progetto NUM-PROG TITOLO TIPO 4 Idea Wide Esprit Esprit Interrogazioni chi e' il manager di Piero? Interrogazioni in quali tipi di progetti lavora Giovanni? impiegato impiegato NOME DATA-ASS SALARIO -MGR NOME DATA-ASS SALARIO -MGR Piero --95 M Piero --95 M Giorgio --97,5 M null Giorgio --97,5 M null Giovanni -7-96 M Giovanni -7-96 M assegnamento NUM-PROG 4 PERC 50 50 00 progetto NUM-PROG TITOLO Idea 4 Wide TIPO Esprit Esprit assegnamento NUM-PROG 4 PERC 50 50 00 progetto NUM-PROG TITOLO Idea 4 Wide TIPO Esprit Esprit 4 00 4 00 Esempio : gestione ordini cliente COD-CLI INDIRIZZO P-IVA ordine COD-ORD COD-CLI DATA IMPORTO dettaglio COD-ORD COD-PROD QTA Interrogazioni quali ordini ha emesso Paolo? quanti ordini ha emesso Paolo? quante candele sono state ordinate il 5/7/9? calcolare per ciascun cliente la somma degli importi di tutti gli ordini estrarre l'ordine di importo piu' alto prodotto COD-PROD NOME PREZZO

Riflessioni Come arricchire lo schema? a differenza fra schema e istanza b due attivita' assai differenti: - progetto dello schema - gestione dell'istanza c passaggio dai dati all'informazione (Query language) VINCOLI DI INTEGRITA': escludono alcune istanze in quanto non rappresentano correttamente il mondo applicativo - CHIAVI - VINCOLI SUI VALORI NULLI (POI) - INTEGRITA' REFERENZIALE (POI) - VINCOLI GENERICI (POI) Nozione di chiave Sottoinsieme degli attributi dello schema che ha la proprieta' di unicita' e minimalita' unicita': non esistono due tuple con chiave uguale minimalita': sottraendo un qualunque attributo alla chiave si perde la proprieta' di unicita' Chiavi nell'esempio : gestione degli esami universitari studente NOME CITTA C-DIP esame COD-CORSO DATA VOTO corso COD-CORSO TITOLO DOCENTE impiegato assegnamento Chiavi nell'esempio : gestione personale NOME DATA-ASS SALARIO -MIL NUM-PROG PERC progetto NUM-PROG NOME PREZZO Chiavi nell'esempio : gestione ordini cliente COD-CLI INDIRIZZO P-IVA ordine COD-ORD COD-CLI DATA IMPORTO dettaglio COD-ORD COD-PROD QTA prodotto COD-PROD NOME PREZZO

Con molteplici chiavi: una e' definita CHIAVE PRIMARIA le rimanenti chiavi sono SECONDARIE CLIENTE (COD-CLIENTE,INDIRIZZO,P-IVA) Chiave primaria: COD-CLIENTE Chiave secondaria: P-IVA Sommario: Definizione formale e informale di relazione (o tabella) Descrizione informale di varie basi di dati relazionali e delle interrogazioni esprimibili su di esse Definizione e esemplificazione della nozione di chiave Prof. Stefano Ceri Sistemi ormativi Aziendali (965A) Lezione (4 lucidi) Linguaggi di interrogazione a linguaggi formali Classificazione Algebra relazionale Calcolo relazionale Programmazione logica b linguaggi programmativi Algebra relazionale definita da Codd (70) molto utile per imparare a formulare query insieme minimo di 5 operazioni che danno l'intero potere espressivo del linguaggio SQL: Structured Query Language QBE: Query By Example

Una visione d'insieme Esempio : gestione degli esami universitari operazioni unarie binarie selezione proiezione unione differenza join studente 45 70 esame 70 NOME Carlo Paola Antonio COD- CORSO CITTA Bologna Torino Roma DATA 7-9-97 8--98 7-9-97 C-DIP Log VOTO 0 8 0 corso COD- CORSO TITOLO matematica Barozzi informatica Meo DOCENTE Selezione Sintassi del predicato di selezione SELECT [NOME='Paola'] STUDENTE espressione booleana di predicati semplici e' una tabella (priva di nome) con schema : lo stesso schema di STUDENTE istanza : le tuple di STUDENTE che soddisfano il predicato di selezione 45 NOME Paola CITTA Torino C-DIP operazioni booleane : AND (P AND P) OR (P OR P) NOT (P) predicati semplici : TRUE, FALSE termine comparatore termine comparatore : =,!=, <, <=, >, >= termine : costante, attributo espressione aritmetica di costanti e attributi Esempio di selezione SELECT [(CITTA'='Torino') OR ((CITTA'='Roma') AND NOT (C-DIP='log'))] STUDENTE 45 70 NOME Carlo Paola Antonio CITTA Bologna Torino Roma C-DIP Log NOME Carlo Paola Antonio Proiezione PROJECT [NOME,C-DIP] STUDENTE e' una tabella (priva di nome) con schema : gli attributi NOME e C-DIP istanza : la restrizione delle tuple sugli attributi NOME e C-DIP C-DIP Log

Proiezione e duplicati nel modello formale la proiezione elimina i duplicati nel modello informale (e nei sistemi) la eliminazione dei duplicati va richiesta esplicitamente PROJECT [C-DIP] STUDENTE C-DIP Log Assegnamento serve per dare un nome al risultato di una espressione algebrica non fa parte delle operazioni algebriche INFORMATICI = SELECT [C-DIP=''] STUDENTI TORINESI = SELECT [CITTA'='Torino'] STUDENTI Unione TABELLA UNION TABELLA si puo' fare se TABELLA e TABELLA sono compatibili con lo stesso grado oppure (nei sistemi) con domini ordinatamente dello stesso tipo 45 NOME Carlo Paola CITTA Unione INFORMATICI UNION TORINESI e' una tabella (priva di nome) con schema : lo schema di INFORMATICI istanza : la unione delle tuple di INFORMATICI e TORINESI Bologna Torino C-DIP Differenza TABELLA MINUS TABELLA si puo' fare se TABELLA e TABELLA sono compatibili Differenza INFORMATICI MINUS TORINESI e' una tabella (priva di nome) con schema : lo schema di INFORMATICI istanza : la differenza delle tuple di INFORMATICI e TORINESI NOME Carlo CITTA Bologna C-DIP attenzione: non e' commutativa

Join STUDENTE JOIN [=] ESAME e' una tabella (priva di nome) con schema : la concatenazione degli schemi di STUDENTE e ESAME istanza: le tuple ottenute concatenando quelle tuple di STUDENTE e di ESAME che soddisfano il predicato STUDENTE. 70 NOME Carlo Carlo Antonio CITTA Bologna Bologna Roma C-DIP Log ESAME. 70 COD- CORSO DATA 7-9-97 8--98 7-9-97 VOTO 0 8 0 Sintassi del predicato di join espressione congiuntiva di predicati semplici: ATTR comp ATTR ove ATTR appartiene a TAB ATTR appartiene a TAB comp: =,!=, <, <=, >, >= attributi omonimi sono resi non ambigui usando la notazione puntata : ESAME., STUDENTE. Equi-join e Join naturale Join naturale di tre tabelle EQUI-JOIN : soli confronti di uguaglianza JOIN NATURALE : equi-join di tutti gli attributi omonimi STUDENTE JOIN ESAME 70 NOME Carlo Carlo Antonio CITTA Bologna Bologna Roma C-DIP Log COD- CORSO DATA 7-9-97 8--98 7-9-97 VOTO 0 8 0 70 STUDENTE JOIN ESAME JOIN CORSO NOME Carlo Carlo CITTA Bologna Bologna Antonio Roma C-DIP Log COD- CORSO DATA 7-9-97 8--98 7-9-97 VOTO TITOLO DOCENTE 0 8 0 matem barozzi infor infor meo meo Espressioni algebriche Concatenazione di piu' operazioni algebriche Esprimono interrogazioni in modo formale Consentono di estrarre informazioni dai dati Selezione e proiezione 45 70 NOME Carlo Paola Antonio CITTA Bologna Torino Roma C-DIP quali studenti sono iscritti al diploma di informatica? PROJECT [NOME] NOME SELECT [C-DIP=''] Carlo STUDENTE Log Paola

Selezione e proiezione 45 70 NOME Carlo Paola Antonio CITTA Bologna Torino Roma C-DIP Log quali studenti di Logistica non sono di Milano? PROJECT [NOME] SELECT [C-DIP='Log' AND CITTA!= 'Milano'] STUDENTE NOME Antonio Esempio : gestione degli esami universitari studente 45 70 esame 70 NOME Carlo Paola Antonio COD- CORSO CITTA Bologna Torino Roma DATA 7-9-97 8--98 7-9-97 C-DIP Log VOTO 0 8 0 corso COD- CORSO TITOLO matematica Barozzi informatica Meo DOCENTE Selezione, proiezione e join quali studenti hanno preso 0 in matematica? NOME 70 Carlo Carlo CITTA Bologna Bologna Antonio Roma C-DIP Log COD- CORSO DATA 7-9-97 8--98 7-9-97 VOTO TITOLO DOCENTE 0 8 0 matem barozzi infor infor meo meo Selezione, proiezione e join quali studenti hanno preso 0 in matematica? PROJECT [NOME] SELECT [VOTO=0 AND TITOLO='matematica'] (STUDENTE JOIN ESAME JOIN CORSO) NOME Carlo Equivalenza di espressioni quali studenti hanno preso 0 in matematica? PROJECT [NOME] SELECT [VOTO=0 AND TITOLO='matematica'] (STUDENTE JOIN ESAME JOIN CORSO) PROJECT [NOME] ( STUDENTE JOIN (SELECT [VOTO=0] ESAME) JOIN (SELECT [TITOLO='matematica'] CORSO)) Selezione, proiezione e join quali professori hanno esaminato Antonio? PROJECT [DOCENTE] SELECT [NOME = 'Antonio'] (STUDENTE JOIN ESAME JOIN CORSO) DOCENTE Meo

Equivalenza di espressioni PROJECT [DOCENTE] SELECT [NOME = 'Antonio'] (STUDENTE JOIN ESAME JOIN CORSO) PROJECT [DOCENTE] (CORSO JOIN (ESAME JOIN SELECT [NOME = 'Antonio'] STUDENTE)) Espressioni con unione e differenza estrarre la matricola degli studenti romani oppure degli studenti che hanno sostenuto un esame il giorno 8--98 ( PROJECT [] SELECT [CITTA'='Roma'] STUDENTE) UNION ( PROJECT [] (STUDENTE JOIN SELECT [DATA=8--98] ESAME)) 70 UNION 70 Espressioni con unione e differenza estrarre la matricola degli studenti che hanno preso almeno un voto superiore a 8 e non sono mai scesi sotto il 5 (PROJECT [] SELECT [VOTO>=8] ESAME) MINUS (PROJECT [] SELECT [VOTO<5] ESAME) MINUS 70 Esercizi Riprendere le basi di dati per la gestione del personale e degli ordini e esprimere in forma algebrica le interrogazioni : - in quali tipi di progetti lavora Giovanni? - chi e' il manager di Piero? - quali ordini ha emesso Paolo? - quali prodotti sono ordinati da un cliente di Milano? - quali prodotti hanno prezzo inferiore a L. 5000 e non sono presenti in nessun ordine? Esempio : gestione personale impiegato NOME Piero Giorgio DATA-ASS --95 --97 Giovanni -7-96 assegnamento NUM-PROG PERC 50 4 50 00 4 00 SALARIO M,5 M M -MGR null progetto NUM-PROG TITOLO TIPO 4 Idea Wide Esprit Esprit Esempio : gestione ordini cliente COD-CLI INDIRIZZO P-IVA ordine COD-ORD COD-CLI DATA IMPORTO dettaglio COD-ORD COD-PROD QTA prodotto COD-PROD NOME PREZZO

Prof. Stefano Ceri Sistemi ormativi Aziendali (965A) Lezione 4 (9 lucidi) Dichiarazione degli schemi in SQL Storia di SQL Definito nell'ambito del progetto SYSTEM R (IBM S. JOSE) nel 976 Nome originario: SEQUEL Adottato progressivamente da tutti i sistemi commerciali Standardizzato da ANSI e ISO Composizione di SQL Data Definition Language (DDL) definizione di: domini, tabelle, indici autorizzazioni, viste, vincoli, procedure, trigger Data Manipulation Language (DML) linguaggio di query, linguaggio di modifica, comandi transazionali Standardizzazione di SQL Progressione dello standard per estensioni quasi-compatibili - prima versione nel 986 (SQL-) - modifica alla prima versione nel 989 (SQL-89) - seconda versione nel 99 (SQL-, SQL-9) - terza versione attesa per il 998 (SQL-) In SQL-: - entry SQL (piu' o meno equivalente a SQL-89) - intermediate SQL - full SQL Potere espressivo di standard e sistemi commerciali un tipico sistema commerciale SQL- SQL-89 SQL- SQL-

Domini elementari in SQL- Altri domini elementari in SQL- a stringhe CHAR (N) VARCHAR (N) b numerici esatti NUMERIC (N) DECIMAL (N) c numerici approssimati FLOAT(N) N=, 0.7E04 = 700 b domini speciali DATE YYYYMMDD BIT (N) VARBIT (N) INTEGER SMALLINT REAL DOUBLE PRECISION TIME(N) HHMMSS.NNNN TIMESTAMP INTERVAL Il valore "null" null e' un valore polimorfico (che appartiene a tutti i domini) col significato di valore non noto il valore esiste in realta' ma e' ignoto al database (es.: data di nascita) il valore e' inapplicabile (es.: numero patente per minorenni) Vincoli di integrita' di dominio NOT NULL esclude il valore nullo PRIMARY KEY chiave primaria (implica NOT NULL) UNIQUE chiave secondaria (non implica NOT NULL) CHECK predicato che deve essere soddisfatto (POI) Definizione dei domini applicativi CREATE DOMAIN PrezzoQuotidiani AS INTEGER DEFAULT 500 NOT NULL CREATE DOMAIN OreLezione AS SMALLINT DEFAULT 40 Definizione delle tabelle CREATE TABLE STUDENTE ( CHAR(6) PRIMARY KEY NOME VARCHAR (0) NOT NULL CITTA' VARCHAR (0) C-DIP CHAR () )

Definizione delle tabelle () CREATE TABLE ESAME ( CHAR(6) COD-CORSO CHAR(6) DATA DATE NOT NULL VOTO SMALLINT NOT NULL PRIMARY KEY(,COD-CORSO) ) CREATE TABLE CORSO ( COD-CORSO CHAR(6) PRIMARY KEY TITOLO VARCHAR(0) NOT NULL DOCENTE VARCHAR(0) ) Integrita' referenziale Esprime un legame gerarchico (padrefiglio) fra tabelle Alcuni attributi della tabella figlio sono definiti FOREIGN KEY I valori contenuti nella FOREIGN KEY devono essere sempre presenti nella tabella padre Esempio: studente - esame Il problema degli orfani studente 45 studente 45 orfani: tuple che restano prive di padre a causa di cancellazioni e modifiche della tabella padre 70 esame 70 esame 70 70 Gestione degli orfani: cancellazione Cosa succede degli esami se si cancellano gli studenti? a CASCADE (si cancellano anche gli esami) b SET NULL c SET DEFAULT d NO ACTION Gestione degli orfani: modifica Cose succede degli esami se si modifica la matricola nella tabella STUDENTE? a CASCADE (si modifica la FOREIGN KEY anche nei corrispondenti esami) b SET NULL c SET DEFAULT d NO ACTION

Definizione : nella tabella figlio CREATE TABLE ESAME (...... FOREIGN KEY REFERENCES STUDENTI ON DELETE CASCADE ON UPDATE CASCADE ) E' lecito essere figli di piu' padri CREATE TABLE ESAME (... PRIMARY KEY(,COD-CORSO) FOREIGN KEY REFERENCES STUDENTI ON DELETE CASCADE ON UPDATE CASCADE FOREIGN KEY COD-CORSO REFERENCES CORSO ON DELETE NO ACTION ON UPDATE NO ACTION ) Una istanza scorretta Una istanza corretta NOME CITTA C-DIP 45 70 viola la chiave viola il NULL viola la integrita' referenziale 70 70 74 COD- CORSO DATA 7-9-97 8--98-8-97 7-9-97 NULL 7-9-97 esame VOTO 0 8 8 0 NULL 8 45 70 NOME CITTA C-DIP 70 COD- CORSO DATA 7-9-97 8--98 7-9-97 esame VOTO 0 8 0 Esempio : gestione ordini cliente COD-CLI INDIRIZZO P-IVA ordine COD-ORD COD-CLI DATA IMPORTO Definizione della tabella CLIENTE CREATE TABLE CLIENTE ( COD-CLI CHAR(6) PRIMARY KEY INDIRIZZO CHAR(50) P-IVA CHAR() UNIQUE ) dettaglio COD-ORD COD-PROD QTA prodotto COD-PROD NOME PREZZO

Definizione della tabella ORDINE CREATE TABLE ORDINE ( COD-ORD CHAR(6) PRIMARY KEY COD-CLI CHAR(6) NOT NULL DEFAULT='999999' DATA DATE IMPORTO INTEGER FOREIGN KEY COD-CLI REFERENCES ORDINE ON DELETE SET DEFAULT ON UPDATE SET DEFAULT) Definizione della tabella DETTAGLIO CREATE TABLE DETTAGLIO ( COD-ORD CHAR(6) COD-PROD CHAR(6) QTA SMALLINT PRIMARY KEY(COD-ORD,COD-PROD) FOREIGN KEY COD-ORD REFERENCES ORDINE ON DELETE CASCADE ON UPDATE CASCADE FOREIGN KEY COD-PROD REFERENCES PRODOTTO ON DELETE NO ACTION ON UPDATE NO ACTION) Definizione della tabella PRODOTTO CREATE TABLE PRODOTTO ( COD-PROD CHAR(6) PRIMARY KEY NOME CHAR(0) PREZZO SMALLINT ) Esercizio Riprendere le basi di dati per la gestione del personale (seconda lezione) ed esprimere in SQL la dichiarazione dello schema. Esempio : gestione personale impiegato NOME Piero Giorgio DATA-ASS --95 --97 Giovanni -7-96 assegnamento NUM-PROG PERC 50 4 50 00 SALARIO M,5 M M -MGR null progetto NUM-PROG TITOLO Idea 4 Wide TIPO Esprit Esprit Prof. Stefano Ceri Sistemi ormativi Aziendali (965A) Lezione 5 ( lucidi) 4 00

Dichiarativita' di SQL Interrogazioni in SQL In SQL l'utente specifica QUALE informazione e' di suo interesse ma non COME estrarla dai dati il sistema costruisce una strategia di accesso (QUERY OPTIMIZATION) e l'aspetto piu' qualificante delle basi di dati relazionali Struttura di SQL Basata sulla composizione di blocchi (SELECT FROM WHERE) Ogni blocco ha il potere espressivo di una qualunque combinazione di selezioni, proiezioni e join Esempio : gestione degli esami universitari studente 45 70 esame 70 NOME Carlo Paola Antonio COD- CORSO CITTA Bologna Torino Roma DATA 7-9-97 8--98 7-9-97 C-DIP Log VOTO 0 8 0 corso COD- CORSO TITOLO matematica Barozzi informatica Meo DOCENTE Interrogazione semplice Interrogazione semplice SELECT * FROM STUDENTE 45 70 NOME Carlo Paola Antonio CITTA Bologna Torino Roma C-DIP Log STUDENTE NOME CITTA C-DIP SELECT NOME FROM STUDENTE WHERE C-DIP = 'Log' INTERPRETAZIONE ALGEBRICA (a meno dei duplicati) PROJECT [NOME] SELECT [C-DIP='Log'] STUDENTE

Sintassi nella clausola SELECT SELECT * SELECT NOME, CITTA' SELECT DISTINCT CITTA' SELECT CITTA' AS LUOGO-DI-RESIDENZA SELECT REDDITO-CATASTALE * 0.05 AS TASSA-ICI SELECT SUM(SALARIO) Sintassi della clausola FROM FROM STUDENTE FROM STUDENTE AS X FROM STUDENTE, ESAME FROM STUDENTE JOIN ESAME ON STUDENTE.=ESAME. Sintassi della clausola WHERE Duplicati Espressione Booleana di predicati semplici (come in algebra) Alcuni predicati aggiuntivi: BETWEEN: DATA BETWEEN --90 AND --99 LIKE: C-DIP LIKE 'log%' TARGA LIKE 'MI_777_8%' SELECT DISTINCT C-DIP FROM STUDENTE C-DIP Log SELECT C-DIP FROM STUDENTE C-DIP Log Interrogazioni e valori nulli Predicati e valori nulli SELECT * FROM STUDENTE WHERE CITTA' IS [NOT] NULL attenzione : se CITTA' ha valore NULL (CITTA' = 'Milano') ha valore 'UNKNOWN' logica a tre valori (V,F,U) V AND U = U V OR U = V F AND U = F F OR U = U NOT U = U P = (CITTA' IS NOT NULL) AND (C-DIP LIKE '%') CITTA Milano Milano NULL Milano C-DIP NULL Log P V U F F TUPLA SELEZ si no no no

Interrogazione semplice con due tabelle Estrarre il nome degli studenti di Logistica che hanno preso almeno un 0. SELECT NOME FROM STUDENTE, ESAME WHERE STUDENTE. = ESAME. AND C-DIP LIKE 'Lo% AND VOTO = 0 NOME Carlo Interpretazione algebrica (a meno di duplicati e includendo nell'algebra il match parziale) SELECT NOME FROM STUDENTE, ESAME WHERE STUDENTE. = ESAME. AND C-DIP LIKE 'Lo% AND VOTO = 0 PROJECT [NOME] SELECT [(C-DIP LIKE 'Lo%') AND (VOTO=0)] (STUDENTE JOIN ESAME) Join di due tabelle (variante sintattica) SELECT NOME FROM STUDENTE, ESAME WHERE STUDENTE. = ESAME. AND C-DIP LIKE 'Lo% AND VOTO = 0 SELECT NOME FROM STUDENTE JOIN ESAME ON STUDENTE. = ESAME. WHERE C-DIP LIKE 'Lo%' AND VOTO > 0 Interrogazione semplice con tre tabelle Estrarre il nome degli studenti di Matematica che hanno preso almeno un 0. SELECT NOME FROM STUDENTE, ESAME, CORSO WHERE STUDENTE. = ESAME. AND CORSO.COD-CORSO = ESAME.COD-CORSO AND TITOLO LIKE 'mat%' AND VOTO = 0 PROJECT [NOME] SELECT [(TITOLO LIKE 'mat%') AND (VOTO=0)] (STUDENTE JOIN ESAME JOIN CORSO) Interrogazione semplice con variabili relazionali CHI SONO I DIPENDENTI DI GIORGIO? impiegato NOME Piero Giorgio DATA-ASS --95 --97 Giovanni -7-96 SALARIO M,5 M M -MGR null Chi sono i dipendenti di Giorgio? SELECT X.NOME FROM IMPIEGATO AS X, IMPIEGATO AS Y WHERE X.-MGR = Y. AND Y.NOME = Giorgio X.NOME Piero Giovanni X.-MGR Y. Y.NOME Giorgio Giorgio

Blocchi SQL per la modifica tre operazioni elementari inserzione cancellazione modifica Inserzione INSERT INTO STUDENTE VALUES ('456878', 'Giorgio Rossi', 'Bologna', 'Logistica e Produzione') INSERT INTO BOLOGNESI (SELECT * FROM STUDENTE WHERE CITTA' = 'Bologna') Cancellazione Modifica DELETE FROM STUDENTE WHERE = '678678' UPDATE ESAME SET VOTO = 0 WHERE DATA = -4-97 UPDATE ESAME SET VOTO = VOTO + WHERE = '787989' Esercizi Riprendere le basi di dati per la gestione del personale e esprimere in SQL le interrogazioni seguenti: - in quali tipi di progetti lavora Giovanni? - chi e' il manager di Piero? - in quali progetti lavora Piero? - quali impiegati lavorano nel progetto IDEA? - quali impiegati lavorano al 00% del loro tempo nel progetto WIDE? Esercizi Riprendere le basi di dati per la gestione del personale e esprimere in SQL le modifiche seguenti: - inserire la tupla <4,Luca,--97,M,> - modificare il salario di Piero assegnandolo a 4M - aumentare il salario di Giorgio del 5% - cancellare i dati di Giovanni

Esempio : gestione personale impiegato NOME Piero Giorgio DATA-ASS --95 --97 Giovanni -7-96 assegnamento NUM-PROG PERC 50 4 50 00 4 00 SALARIO M,5 M M -MGR null progetto NUM-PROG TITOLO TIPO 4 Idea Wide Esprit Esprit Esercizio in quali tipi di progetti lavora Giovanni? PROJECT [TIPO] SELECT [NOME= Giovanni'] (IMPIEGATO JOIN ASSEGNAMENTO JOIN PROGETTO) TIPO Esprit Esercizio in quali tipi di progetti lavora Giovanni? SELECT TIPO FROM IMPIEGATO AS I, ASSEGNAMENTO AS A, PROGETTO AS P WHERE I.=A. AND A.NUM-PROG=P.NUM-PROG AND NOME='Giovanni' Esercizio chi e' il manager di Piero? SELECT Y.NOME FROM IMPIEGATO AS X, IMPIEGATO AS Y WHERE X.-MGR=Y. AND X.NOME='Piero' Esercizio modificare il salario di Piero assegnandolo a 4M UPDATE IMPIEGATO SET SALARIO = 4M WHERE NOME='Piero' Esercizio 4 aumentare il salario di Giorgio del 5% UPDATE IMPIEGATO SET SALARIO = SALARIO *.05 WHERE NOME='Giorgio'

Prof. Stefano Ceri Sistemi ormativi Aziendali (965A) Lezione 6 (9 lucidi) Interrogazioni complesse Classificazione delle interrogazioni complesse Query con ordinamento Query con aggregazioni Query con raggruppamento Query binarie Query nidificate Esempio : gestione ordini cliente COD-CLI INDIRIZZO P-IVA ordine COD-ORD COD-CLI DATA IMPORTO dettaglio COD-ORD COD-PROD QTA prodotto COD-PROD NOME PREZZO ordine COD-ORD 4 5 6 Istanza di ordine COD-CLI 4 DATA -6-97 -8-97 -9-97 -7-97 -8-97 -9-97 IMPORTO 50.000.000 8.000.000 5.500.000.000.000.500.000 7.000.000 Query con ordinamento SELECT * FROM ORDINE WHERE IMPORTO > 00.000 ORDER BY DATA COD-ORD 4 5 6 COD-CLI DATA 4-6-97-7-97-8-97-8-97-9-97-9-97 IMPORTO 50.000.000.000.000.500.000 8.000.000.500.000 5.500.000

Order by COD-CLI Order by COD-CLI asc, DATA desc COD-ORD COD-CLI DATA IMPORTO COD-ORD COD-CLI DATA IMPORTO 4-7-97.000.000 5-8-97.500.000 5-8-97.500.000 4-7-97.000.000-6-97 50.000.000 6-9-97 5.500.000 6-9-97 5.500.000-9-97.500.000-9-97.500.000-6-97 50.000.000 4-8-97 7.000.000 4-8-97 7.000.000 Query aggregate Utilizzano le funzioni aggregate: SUM sommatoria AVG media MIN minimo MAX massimo COUNT cardinalita' Query con massimo Selezionare l importo massimo degli ordini. SELECT MAX(IMPORTO) AS MAX-IMP FROM ORDINE MAX-IMP 50.000.000 Query con sommatoria Selezionare la somma degli importi degli ordini relativi al cliente numero. SELECT SUM(IMPORTO) AS SOMMA-IMP FROM ORDINE WHERE COD-CLIENTE = SOMMA-IMP.500.000 Query con raggruppamento si aggiungono le clausole GROUP-BY (raggruppamento) HAVING (selezione dei gruppi) SELECT.. FROM.. WHERE.. GROUP BY.. HAVING..

Query con raggruppamento Passo : Valutazione WHERE Selezionare la somma degli importi degli ordini successivi al 0-6-97 per quei clienti che hanno emesso almeno ordini. COD-ORD COD-CLI 4 DATA -8-97 -9-97 IMPORTO 8.000.000 5.500.000 SELECT COD-CLI, SUM (IMPORTO) FROM ORDINE WHERE DATA > 0-6-97 GROUP BY COD-CLI HAVING COUNT (IMPORTO) >= 4 5 6-7-97-8-97-9-97.000.000.500.000 7.000.000 Passo : Raggruppamento Passo : Calcolo degli aggregati si valuta la clausola GROUP-BY COD-ORD 4 5 6 COD-CLI 4 DATA -7-97 -8-97 -9-97 -9-97 -8-97 IMPORTO.000.000.500.000.500.000 5.500.000 8.000.000 si calcolano SUM (IMPORTO) e COUNT (IMPORTO) per ciascun gruppo COD-CLI 4 SUM (IMPORTO).500.000.500.000 5.000.000 COUNT (IMPORTO) Passo 4 : Estrazione dei gruppi Passo 5 : Produzione del risultato si valuta il predicato COUNT (IMPORTO) >= COD-CLI 4 SUM (IMPORTO).500.000.500.000 5.000.000 COUNT (IMPORTO) COD-CLI SUM (IMPORTO).500.000.500.000

Query con raggruppamento e ordinamento E possibile ordinare il risultato delle query con raggruppamento SELECT.. FROM.. [ WHERE.. ] GROUP BY.. [ HAVING.. ] ORDER BY. Raggruppamento e ordinamento Selezionare la somma degli importi degli ordini successivi al 0-6-97 per quei clienti che hanno emesso almeno ordini, in ordine decrescente di somma di importo. SELECT COD-CLI, SUM (IMPORTO) FROM ORDINE WHERE DATA > 0-6-97 GROUP BY COD-CLI HAVING COUNT (IMPORTO) >= ORDER BY SUM(IMPORTO) DESC Risultato dopo la clausola di ordinamento COD-CLI SUM (IMPORTO).500.000.500.000 Doppio raggruppamento Selezionare la somma delle quantita' dei dettagli degli ordini emessi da ciascun cliente per ciascun prodotto, purche' la somma superi 50. SELECT COD-CLI, COD-PROD, SUM(QTA) FROM ORDINE AS O, DETTAGLIO AS D WHERE O.COD-ORD = D.COD-ORD GROUP BY COD-CLI, COD-PROD HAVING SUM(QTA) > 50 Situazione dopo il join e il raggruppamento Estrazione del risultato ordine COD-CLI ORDINE. DETTAGLIO. COD-PROD QTA COD-ORD COD-ORD 4 5 6 4 5 6 dettaglio 0 0 0 0 60 40 0 5 gruppo, gruppo, gruppo, gruppo, si valuta la funzione aggregata SUM(QTA) e il predicato HAVING COD-CLI COD-PROD SUM(QTA) 50 40 60 95

Query binarie Costruite concatenando due query SQL tramite operatori insiemistici: UNION unione INTERSECT intersezione EXCEPT (MINUS) differenza (si eliminano i duplicati) Unione Selezionare i codici degli ordini i cui importi superano 500.000 lire oppure presenti in qualche dettaglio con quantita' superiore a 000. SELECT COD-ORD FROM ORDINE WHERE IMPORTO > 500.000 UNION SELECT COD-ORD FROM DETTAGLIO WHERE QTA > 000 Differenza Selezionare i codici degli ordini i cui importi superano 500.000 lire ma non presenti in nessun dettaglio con quantita' superiore a 000. SELECT COD-ORD FROM ORDINE WHERE IMPORTO > 500.000 EXCEPT SELECT COD-ORD FROM DETTAGLIO WHERE QTA > 000 Intersezione Selezionare i codici degli ordini i cui importi superano 500.000 lire e che sono presenti in qualche dettaglio con quantita' superiore a 000. SELECT COD-ORD FROM ORDINE WHERE IMPORTO > 500.000 INTERSECT SELECT COD-ORD FROM DETTAGLIO WHERE QTA > 000 Query nidificate Costruite concatenando due query SQL nel predicato where: [NOT] IN [DOES NOT] EXISTS comp ANY, ALL comp: =,!=, <, <=, >, >= appartenenza esistenza quantificatori Query nidificate Selezionare nome e indirizzo dei clienti che hanno emesso qualche ordine di importo superiore a 0.000.000. SELECT NOME, INDIRIZZO FROM CLIENTE WHERE COD-CLI IN SELECT COD-CLI FROM ORDINE WHERE IMPORTO > 0.000.000

Equivalenza fra IN e query semplici SELECT NOME, INDIRIZZO FROM CLIENTE WHERE COD-CLI IN SELECT COD-CLI FROM ORDINE WHERE IMPORTO > 0.000.000 equivale (a meno di duplicati) a: SELECT NOME, INDIRIZZO FROM CLIENTE JOIN ORDINE ON CLIENTE.COD-CLI = ORDINE.COD-CLI WHERE IMPORTO > 0.000.000 Selezionare nome e indirizzo dei clienti che hanno emesso qualche ordine i cui dettagli comprendono il prodotto Pneumatico. SELECT NOME, INDIRIZZO FROM CLIENTE WHERE COD-CLI IN SELECT COD-CLI FROM ORDINE WHERE COD-ORD IN SELECT COD-ORD FROM DETTAGLIO WHERE COD-PROD IN SELECT COD-PROD FROM PRODOTTO WHERE NOME = 'Pneumatico' La query equivalente equivale (a meno di duplicati) a: SELECT NOME, INDIRIZZO FROM CLIENTE AS C, ORDINE AS O, DETTAGLIO AS D, PRODOTTO AS P WHERE C.COD-CLI = O.COD-CLI AND O.COD-ORD = D.COD-ORD AND D.COD-PROD = P.COD-PROD AND IMPORTO > 0.000.000 Uso di IN nelle modifiche aumentare di L. 5000 l importo di tutti gli ordini che comprendono il prodotto 456 UPDATE ORDINE SET IMPORTO = IMPORTO + 5000 WHERE COD-ORD IN SELECT COD-ORD FROM DETTAGLIO WHERE COD-PROD = '456' Query con NOT IN Selezionare nome e indirizzo dei clienti che non hanno emesso nessun ordine di importo superiore a 0.000.000. SELECT NOME, INDIRIZZO FROM CLIENTE WHERE COD-CLI NOT IN SELECT COD-CLI FROM ORDINE WHERE IMPORTO > 0.000.000 La query con ANY e ALL SELECT COD-ORD FROM ORDINE WHERE IMPORTO > ANY SELECT IMPORTO FROM ORDINE COD-ORD IMPORTO 50.000 00.000 90.000 SELECT COD-ORD FROM ORDINE WHERE IMPORTO >= ALL SELECT IMPORTO FROM ORDINE ANY F V V ALL F V F

Esercizi Riprendere le basi di dati per la gestione del personale e degli ordini ed esprimere in SQL le interrogazioni : - quale impiegati lavorano in un progetto in cui non lavora il loro manager? - quanti ordini ha emesso Paolo? - quante candele sono state ordinate il 5/7/97? - calcolare per ciascun cliente la somma degli importi di tutti gli ordini - estrarre l'ordine di importo piu' alto Esercizio (lezione precedente) in quali tipi di progetti lavora Giovanni? SELECT TIPO FROM IMPIEGATO WHERE IN SELECT FROM ASSEGNAMENTO WHERE NUM-PROG IN SELECT NUM-PROG FROM PROGETTO WHERE NOME='Giovanni' Esercizio (lezione precedente) chi e' il manager di Piero? SELECT NOME FROM IMPIEGATO WHERE -MGR IN SELECT FROM IMPIEGATO WHERE NOME='Piero' Prof. Stefano Ceri Sistemi ormativi Aziendali (965A) Lezione 7 ( lucidi) Aspetti evoluti del DDL Aspetti evoluti nella definizione degli schemi Creazione di indici Modifica degli schemi Gestione di viste Autorizzazioni d'accesso Vincoli di integrita (poi) Procedure e regole attive (poi)

Creazione di indici INDICI: meccanismi di accesso efficiente ai dati (spiegati poi) CREATE INDEX es.: CREATE INDEX DATA-IX ON ORDINI (DATA) CREATE UNIQUE INDEX es.: CREATE UNIQUE INDEX ORD-KEY ON ORDINI (ORD-COD) Comandi di modifica degli schemi Necessari per garantire l evoluzione della base di dati a fronte di nuove esigenze E possibile: CREARE NUOVI OGGETTI (CREATE) MODIFICARE OGGETTI PREESISTENTI (ALTER) CANCELLARE OGGETTI (DROP) Cancellazione degli oggetti DROP (domini, tabelle, indici, view, asserzioni, procedure, trigger) es.: DROP TABLE ORDINI es.: DROP INDEX DATA-IX OPZIONI RESTRICT e CASCADE RESTRICT: impedisce drop se gli oggetti comprendono istanze CASCADE: applica drop agli oggetti collegati Modifica degli oggetti ALTER (domini, tabelle) es.: ALTER TABLE ORDINI ADD COLUMN NUM-FATT CHAR(6) es.: ALTER TABLE ORDINI ALTER COLUMN IMPORTO ADD DEFAULT 0 es.: ALTER TABLE ORDINI DROP COLUMN DATA Viste relazionali Offrono la "visione" di tabelle virtuali (schemi esterni) Classificate in: SEMPLICI (Selezione e proiezione su una sola tabella) COMPLESSE Sintassi delle viste relazionali CREATE VIEW <Nome> AS <QUERY> CREATE VIEW <Nome> ( <Nome-attributi>) AS <QUERY> Le query possono include al loro interno viste definite in precedenza

ordini 4 6 Esempio di vista semplice Ordini di importo superiore a 0.000.000 CREATE VIEW ORDINI-PRINCIPALI AS SELECT * FROM ORDINI WHERE IMPORTO > 0.000.000-6-96 50.000.000-7-97.000.000-9-97 7.000.000 VISTA : ordini principali Uso della vista per query Vista: CREATE VIEW ORDINI-PRINCIPALI AS SELECT * FROM ORDINI WHERE IMPORTO > 0.000.000 Query: SELECT NUM-CLI FROM ORDINI-PRINCIPALI Composizione della vista con la query: SELECT NUM-CLI FROM ORDINI WHERE IMPORTO > 0.000.000 Modifiche tramite le viste Vista: CREATE VIEW ORDINI-PRINCIPALI AS SELECT * FROM ORDINI WHERE IMPORTO > 0.000.000 Modifica: UPDATE ORDINI-PRINCIPALI SET IMPORTO = IMPORTO *.05 WHERE NUM-CLI = Composizione della vista con la modifica: UPDATE ORDINI SET IMPORTO = IMPORTO *.05 WHERE NUM-CLI = AND IMPORTO > 0.000.000 Esempio di vista complessa CREATE VIEW CLI-PRO (CLIENTE,PRODOTTO) AS SELECT COD-CLI, COD-PROD FROM ORDINE JOIN DETTAGLIO ON ORDINE.COD-ORD = DETTAGLIO.COD-ORD Vista complessa (JOIN) CLIENTE PRODOTTO 45 JOIN COD-CLI COD-ORD.. COD-ORD COD-PROD.. 45 Interrogazione sulla vista complessa Query: SELECT CLIENTE FROM CLI-PROD WHERE PRODOTTO = 45 Composizione della vista con la query: SELECT COD-CLI FROM ORDINE JOIN DETTAGLIO ON ORDINE.COD-ORD = DETTAGLIO.COD-ORD WHERE COD-PROD = 45

Modifiche sulla vista complessa Vista complessa (JOIN) Non e' possibile modificare le tabelle di base tramite la vista perche' la interpretazione e' ambigua CLIENTE PRODOTTO 45 4 es.: UPDATE CLI-PROD SET PRODOTTO = 4 WHERE CLIENTE = a il cliente ha cambiato l'ordine b il codice del prodotto e' cambiato COD-CLI COD-ORD 45 JOIN.. COD-ORD COD-PROD.. 45 4 45 4 Autorizzazioni d accesso PRIVATEZZA: protezione selettiva della base di dati in modo da garantire l accesso solo agli utenti autorizzati. Meccanismi per identificare l utente (tramite PAROLA CHIAVE o PASSWORD): Quando si collega al sistema informatico Quando accede al DBMS UTENTI individuali e GRUPPI di utenti Autorizzazioni d accesso Si attribuiscono agli UTENTI dei PRIVILEGI DI ACCESSO alle RISORSE utenti: identificati tramite password risorse: tabelle, view (e altre) GRANT <privilegi> ON <risorse> TO <utenti> Principali privilegi di accesso Esempio SELECT [ATTRIBUTI] UPDATE [ATTRIBUTI] INSERT DELETE ALL PRIVILEGES GRANT ALL PRIVILEGES ON ORDINE TO User GRANT UPDATE(IMPORTO) ON ORDINE TO User GRANT SELECT ON ORDINE TO User, User

Concessione dei privilegi Il creatore di una risorsa ha tutti i privilegi Spesso l'utente DATABASE ADMINISTRATOR crea l'intera base di dati Chi detiene un privilegio puo' concederlo con GRANT OPTION GRANT ALL PRIVILEGES ON ORDINE TO User WITH GRANT OPTION Esempio di uso, grant option Database administrator GRANT ALL PRIVILEGES ON ORDINE TO User WITH GRANT OPTION User GRANT SELECT ON ORDINE TO User WITH GRANT OPTION User GRANT SELECT ON ORDINE TO User Revoca dei privilegi REVOKE <privilegi> ON <risorsa> FROM <utente> es: REVOKE UPDATE ON ORDINE FROM User REVOKE SELECT ON ORDINE FROM User Revoca di un previlegio con cascata DBA Revoca dei privilegi con cascata REVOKE <privilegi> ON <risorsa> FROM <utente> CASCADE User User Revoca di un privilegio con cascata Database administrator GRANT SELECT ON ORDINE TO User WITH GRANT OPTION User GRANT SELECT ON ORDINE TO User Database administrator REVOKE SELECT ON ORDINE FROM User CASCADE Viste e autorizzazioni di accesso Viste = unita di autorizzazione Consentono la gestione ottimale della privatezza

Esempio: gestione dei conti correnti Requisiti di accesso filiale filiale filiale Banca rete CONTO-CORRENTE(NUM-CONTO, FILIALE, CLIENTE, COD-FISC, DATA-APERTURA, SALDO) TRANSAZIONE(NUM-CONTO, DATA, PROGR, CAUSALE, AMMONTARE) funzionari cassieri cassieri, all previleges select update saldo, select all previleges select select conto-corrente NUM- N. CONTO FILIALE x y z transazione NUM- CONTO x x y... SALDO filiale filiale Viste relative alla prima filiale DEFINE VIEW CONTO AS ( SELECT * FROM CONTO-CORRENTE WHERE FILIALE = ) DEFINE VIEW TRANSAZIONE AS ( SELECT * FROM TRANSAZIONE WHERE NUM-CONTO IN ( SELECT NUM-CONTO FROM CONTO ) ) Autorizzazioni relative ai dati della prima filiale GRANT ALL PRIVILEGES ON CONTO TO FUNZIONARI GRANT UPDATE(SALDO) ON CONTO TO CASSIERI GRANT SELECT ON CONTO TO CASSIERI, CASSIERI, CASSIERI GRANT SELECT ON TRANSAZIONE TO FUNZIONARI GRANT ALL PRIVILEGES ON TRANSAZIONE TO CASSIERI GRANT SELECT ON TRANSAZIONE TO CASSIERI, CASSIERI Esercizi Riprendere le basi di dati per la gestione del personale ed esprimere: - i comandi per modificare la tabella IMPIEGATO aggiungendo il campo COD-FISC - una vista complessa che contiene il nomi degli impiegati che lavorano ai vari progetti - la vista che seleziona gli IMPIEGATI che lavorano al progetto Wide - le istruzioni che consentono all utente MGR-WIDE il pieno controllo sulla vista Prof. Stefano Ceri Sistemi ormativi Aziendali (965A) Lezione 8 (8 lucidi)

Vincoli, procedure e regole attive in SQL Qualita' dei dati Qualita' dei dati: correttezza, completezza, attualita'. In molte applicazioni reali i dati sono di scarsa qualita' (5% - 40% di dati scorretti). Per aumentare la qualita' dei dati: Regole di integrita' Manipolazione dei dati tramite programmi predefiniti (procedure e trigger) Esempio : gestione magazzino Vincoli di integrita' generici magazzino COD-PROD 4 5 QTA-DISP QTA-RIORD 50 0 70 500 00 80 50 50 Predicati che devono essere veri se valutati su istanze corrette (legali) della base di dati Espressi in due modi: - negli schemi delle tabelle - come asserzioni separate riordino COD-PROD DATA QTA-ORD Vincoli associati alle tabelle Si utilizza la clausola: CHECK (PREDICATO) associata ai vari attributi oppure espressa al termine della dichiarazione della tabella Esempio: definizione di MAGAZZINO CREATE TABLE MAGAZZINO AS ( COD-PROD CHAR() PRIMARY KEY QTA-DISP INTEGER NOT NULL CHECK(QTA-DISP>0) QTA-RIORD INTEGER NOT NULL CHECK (QTA-RIORD>0) CHECK (QTA-DISP>QTA-RIORD) )

Asserzioni Predicati espressi separatamente dalla definizione delle tabelle, che devono essere veri se valutati su istanze corrette (legali) CREATE ASSERTION Ordini-Limitati AS CHECK( 000 <= SELECT COUNT(COD-PROD) FROM RIORDINO) Significato dei vincoli La verifica dei vincoli puo' essere: a immediate (immediata): la loro violazione annulla l'ultima modifica b deferred (differita): la loro violazione annulla l'intera applicazione S0 V S S S f Modifica dinamica del significato dei vincoli Ogni vincolo e' definito di un tipo (normalmente "immediate") L'applicazione puo' modificare il tipo iniziale dei vincoli: - set constraints immediate - set constraints deferred Tutti i vincoli vengono comunque verificati, prima o poi. Procedure Moduli di programma che svolgono una specifica attivita' di manipolazione dei dati Non standard in SQL- ma presenti nei principali sistemi relazionali Due momenti: - dichiarazione (DDL) - invocazione (DML) Con architettura client-server sono: - invocate dai client - memorizzate e eseguite presso i server Esempio : prelievo dal magazzino magazzino COD-PROD QTA-DISP QTA-RIORD 4 5 50 0 70 500 00 80 50 50 riordino COD-PROD DATA QTA-ORD Specifica L utente indica un prelievo dando il codice del prodotto e la quantita' da prelevare Se la quantita' disponibile in magazzino non e' sufficiente la procedura si arresta con una eccezione Viene eseguito il prelievo, modificando la quantita' disponibile in magazzino Se la quantita' disponibile in magazzino e' inferiore alla quantita' di riordino si predispone un nuovo ordine d'acquisto.

COD-PROD 4 Interfaccia PROCEDURE PRELIEVO ( PROD INTEGER, QUANT INTEGER) Invocazione PRELIEVO(4,50) Stato iniziale nella base di dati QTA-DISP 70 QTA-RIORD 50 Realizzazione della procedura. DICHIARAZIONE VARIABILI. LETTURA DELLO STATO. SE LA QUANTITA' DISPONIBILE E' INSUFFICIENTE: ECCEZIONE 4. AGGIORNAMENTO DELLO STATO 5. SE LA NUOVA QUANTITA' DISPONIBILE E` INFERIORE ALLA QUANTITA' DI RIORDINO: EMISSIONE DI UN ORDINE Procedura PROCEDURE PRELIEVO (PROD INTEGER, QUANT INTEGER) IS Q, Q INTEGER X EXCEPTION BEGIN SELECT QTA-DISP, QTA-RIORD INTO Q, Q FROM MAGAZZINO WHERE COD-PROD = PROD; IF Q < QUANT THEN RAISE(X); UPDATE MAGAZZINO SET QTA-DISP = QTA-DISP - QUANT WHERE COD-PROD = PROD; IF Q - QUANT < Q THEN INSERT INTO RIORDINO VALUES(PROD, SYSDATE, Q) END Esempio di invocazione PRELIEVO(4,50) PROD=4, QUANT=50 SELECT QTA-DISP, QTA-RIORD INTO Q, Q FROM MAGAZZINO WHERE COD-PROD = PROD; COD-PROD 4 QTA-DISP 70 Q = 70, Q = 50 QTA-RIORD 50 Invocazione (continua) IF Q < QUANT THEN RAISE(X) non scatta UPDATE MAGAZZINO SET QTA-DISP = QTA-DISP - QUANT WHERE COD-PROD = PROD COD-PROD 4 QTA-DISP 0 QTA-RIORD 50 Q - QUANT < Q e' vero: INSERT INTO RIORDINO VALUES(PROD, SYSDATE, Q) COD-PROD 4 DATA 0-0-97 QTA-RIORD 50 Regole attive (trigger) Moduli di programma che svolgono una specifica attivita' di manipolazione dei dati Non standard in SQL- ma presenti nei principali sistemi relazionali Simili alle procedure, ma l'invocazione e' automatica Seguono il paradigma EVENTO-CONDIZIONE-AZIONE

Paradigma evento - condizione - azione (ECA) evento: modifica alla base di dati condizione: predicato azione: modifica alla base di dati, segnalazioni agli utenti informalmente: - quando accade l'evento - se la condizione e' vera - allora si esegue l'azione Esempio: gestione automatica del riordino. EVENTO: UPDATE(QDISP) IN MAGAZZINO. CONDIZIONE: LA NUOVA QUANTITA' DISPONIBILE E' INFERIORE ALLA (NUOVA) QUANTITA' DI RIORDINO: NEW.Q-DISP < NEW.Q-RIORD. AZIONE: SE LA QUANTITA' DISPONIBILE E ' INSUFFICIENTE: ECCEZIONE EMISSIONE DI UN ORDINE Regola attiva (trigger) CREATE TRIGGER GESTIONE-RIORDINO AFTER UPDATE OF QTA-DISP ON MAGAZZINO WHEN (NEW.QTA-DISP < NEW.QTA-RIORD) FOR EACH ROW X EXCEPTION BEGIN END IF NEW.QTA-DISP < 0 THEN RAISE(X); INSERT INTO RIORDINO VALUES(NEW.COD-PROD, SYSDATE, NEW.QTA-RIORD) Esecuzione dell'applicazione UPDATE MAGAZZINO SET QTA-DISP = QTA-DISP - 50 WHERE COD-PROD = 4 COD-PROD 4a QTA-DISP 0 QTA-RIORD 50 Esecuzione del trigger evento : UPDATE(QTA-DISP) ON MAGAZZINO condizione : VERA azione : IF NEW.QTA-DISP < 0 THEN RAISE(X) non scatta COD-PROD 4 INSERT INTO RIORDINO VALUES (NEW.COD-PROD, SYSDATE, NEW.QTA-RIORD) DATA 0-0-97 QTA 50 Problemi di progetto per procedure e trigger Decomposizione modulare delle applicazioni Paradigma di invocazione: - esplicita (procedure) - implicita (trigger) Aumento di: - efficenza - controllo - riuso

Conseguenze dell uso di procedure e trigger Aumenta la responsabilita' dell'amministratore della base di dati (rispetto al programmatore applicativo) Si sposta "conoscenza" dalle applicazioni allo schema della base di dati (independenza di conoscenza) (per saperne di piu': sito internet www.elet.polimi.it/idea) Esercizi Riprendere le basi di dati per la gestione degli ordini ed esprimere: - un vincolo di integrita' che impedisce la presenza di piu' di 00 dettagli per ciascun ordine. - una procedura che elimina tutti gli ordini e i relativi dettagli di un particolare cliente - un trigger che scatta quando viene cancellato un cliente ed elimina tutti gli ordini e i relativi dettagli di quel cliente Un breve ripasso MODELLO RELAZIONALE ALGEBRA RELAZIONALE - SELEZIONE, PROIEZIONE, UNIONE, DIFFERENZA, JOIN SQL - DATA DEFINITION - CREATE DOMAIN, TABLE, INDEX, VIEW, ASSERTION, PROCEDURE, TRIGGER - DROP, ALTER - GRANT, REVOKE SQL - DATA MANIPULATION - SELECT - INSERT, UPDATE, DELETE Prof. Stefano Ceri Sistemi ormativi Aziendali (965A) Lezione 9 (5 lucidi) Architettura dei sistemi informatici Tecnologia dei sistemi informativi LAN MAN ufficio citta distribuzione geografica WAN

Paradigma client-server Tecnica per strutturare sistemi software Viene resa "pubblica" una "interfaccia di servizi" Due tipologie di sistemi: CLIENT richiedono i servizi SERVER forniscono i servizi servizi richiesti dal CLIENT svolti dai SERVER Client-server nei sistemi informativi Separazione funzionale ideale CLIENT : presentazione dell'informazione SERVER : gestione dei dati SQL : il linguaggio ideale per separare gli ambienti CLIENT : formula query, elabora risultati SERVER : esegue query RETE : trasferisce i comandi di attivazione (es: di procedure SQL) e i risultati Architettura client-server classica Architettura con server applicativo CLIENT compone richieste in SQL CLIENT richiede applicazioni CLIENT CLIENT SERVER esegue richieste in SQL SERVER APPLICATIVO compone richieste in SQL DATABASE SERVER esegue richieste in SQL Parallelismo nei server Distribuzione dei dati Uso di macchine multiprocessore Elaborazione identica su ciascun processore Obiettivo : prestazioni DATABASE SERVER con parallelismo NON SOLO presenza di molteplici basi di dati MA ANCHE presenza di applicazioni che usano dati provenienti da piu' fonti CLIENT applicazione base di dati parallela processori dischi base di dati distribuita DATABASE SERVER DATABASE SERVER

Replicazione dei dati Motivazione: maggior disponibilita', efficienza, differente trattamento dei dati, affidabilita' base di dati replicata copia principale copia secondaria copia secondaria Separazione funzionali degli ambienti Ambiente operativo: gestione "in linea" dei dati, finalizzato alla gestione delle transazioni di modifica On Line Transaction Processing (OLTP) Ambiente di analisi: gestione "fuori linea" dei dati, finalizzato ad interrogazioni e analisi statistiche On Line Analytical Processing (OLAP) Ambiente per l'analisi : data warehouse Interazione fra OLTP e OLAP DATA WAREHOUSE: descrizione organizzata di tutti i dati necessari per una analisi strategica del comportamento dell'impresa Tecniche: analisi multidimensionale, data mining CLIENT OLTP CLIENT OLAP DATABASE SERVER DATABASE SERVER DATA WAREHOUSE Sistemi "LEGACY " Sistemi realizzati su architetture basate su MAINFRAME (grande calcolatore centrale) cui si collegano terminali poco sofisticati (spesso con interfaccia a caratteri) MAINFRAME Sistemi "LEGACY " terminale terminale terminale Normalmente obsoleti, ma spesso preziosi (assicurano la gestione operativa di applicazioni importanti, ad esempio finanziarie, fiscali, prenotazioni aeree, etc ) DATABASE MODEM linea telefonica MODEM terminale 4 terminale 5 sistema legacy