90
LINGUAGGI DI PROGRAMMAZIONE E BASI DI DATI CORSO DI LAUREA IN INGEGNERIA INFORMATICA DOCENTE: M. MELCHIORI STUDENTE: NICOLA BONIZZARDI ANNO SCOLASTICO: 2010/2011 MODULO DI BASI DI DATI (6 CFU)

Riassunto Basi di Dati

Embed Size (px)

DESCRIPTION

Corso di basi di datiIngegneria informatica

Citation preview

  • LINGUAGGI DI PROGRAMMAZIONE E

    BASI DI DATI

    CORSO DI LAUREA IN INGEGNERIA INFORMATICA DOCENTE: M. MELCHIORI STUDENTE: NICOLA BONIZZARDI ANNO SCOLASTICO: 2010/2011

    MODULO DI

    BASI DI DATI (6 CFU)

  • Nicola Bonizzardi [email protected]

    Basi di dati |Sistema informativo 2

    BASI DI DATI una collezione organizzata di dati

    SISTEMA INFORMATIVO Insieme di risorse umane e materiali, di attivit e di strumenti che gestiscono le informazioni necessarie per raggiungere gli scopi dellorganizzazione. Le informazioni gestite, organizzate su vari livelli gerarchici, costituiscono la base per effettuare attivit e prendere decisioni.

    Sistema insieme organizzato di risorse, attivit e strumenti che interagiscono tra di loro per conseguire obiettivi;

    Informativo precisa che finalizzato alla gestione delle informazioni;

    Funzioni 1. Raccolta, acquisizione 2. Archiviazione, conservazione 3. Elaborazione 4. Distribuzione e scambio

    DATI ED INFORMAZIONI Dato Ci che immediatamente presente alla conoscenza prima di ogni elaborazione (un valore, una misura). I dati sono fatti elementari, informazioni codificate, che hanno bisogno di essere interpretati per fornire conoscenza. Informazione Notizia, elemento che consente di avere conoscenza pi o meno esatta di fatti, situazioni, modi di essere (interpretazione dei dati)

    Esempio: Mario 275 scritti su un foglio di carte sono due dati. Se il foglio di carta fornito in risposta alla domanda A chi mi devo rivolgere per il problema X: qual il suo numero di telefono?, allora i dati possono essere interpretati ad arricchire la conoscenza.

    Caratteristiche dei dati 1. Risorsa strategica per le organizzazioni 2. Possibilit di rappresentazione precisa 3. Possibilit di elaborazione automatica

    di informazioni

  • Nicola Bonizzardi [email protected]

    Basi di dati |Sistema Informatico 3

    Contesto di Business

    Sistema Azienda

    Sistema organizzativo

    Sistema informativo

    Sistema informatico

    SISTEMA INFORMATICO Sottoinsieme del sistema informativo finalizzato al trattamento automatico dellinformazione. Il sistema informatico dunque la parte del sistema informativo che gestisce informazioni per mezzo della tecnologia informatica.

    Collocazione

    Contesto di Business comprende lazienda e tutto ci che influisce sul suo successo (concorrenti, fornitori, clienti, )

    Sistema azienda strutture organizzative e processi aziendali collegati per la produzione di servizi/prodotti in un contesto di business, per clienti interni o esterni allorganizzazione

    Processi aziendali insieme di attivit che utilizzano risorse (informazioni, persone, materiali, ) per fornire servizi/prodotti ai clienti

    Sistema organizzativo insieme di risorse e regole per lo svolgimenti di processi aziendali

    Sistema informativo sistema dedicato alla gestione ed elaborazione delle informazioni utilizzate dai processi aziendali

    Sistema informatico porzione automatizzata del sistema informativo che gestisce informazioni mediante Information Technology

    Information Technology hardware (calcolatori, workstation, reti di comunicazione, ) e software

  • Nicola Bonizzardi [email protected]

    Basi di dati |Processi di elaborazione 4

    Schema generale

    PROCESSI DI ELABORAZIONE Sono costituiti da programmi scritti in opportuni linguaggi di programmazione ed eseguono operazioni ed/od azioni sulla base di dati. Un sistema informativo contiene N processi.

    Modalit di esecuzione a) Batch (differita) b) On-line (immediata)

    Classificazione a) Per ruolo nel sistema informatico: funzioni primarie, funzioni di servizio b) Azioni sulla base di dati: funzioni di aggiornamento, funzioni di interrogazione

    BASE DI DATI una raccolta di dati strutturati e permanenti, raggruppati in insiemi omogenei in relazione tra loro, organizzati con la minima ridondanza per essere usati da diverse applicazioni in modo controllato. I dati vengono rappresentati con un formato predefinito, resa possibile lassociazione fra dati e luso molteplice. Necessita di un sistema di controllo software per una gestione efficiente e per proteggere i dati da: utenti non autorizzati, accessi concorrenti, malfunzionamenti hardware e/o software.

    DBMS Sistema software che garantisce affidabilit e privatezza, efficienza ed efficacia. in grado di gestire collezioni di dati che sono (anche):

    1. Grandi, ovvero di dimensioni (molto) maggiori rispetto alla memoria centrale dei sistemi di calcolo utilizzati;

    2. Persistenti, ovvero con un periodo di vita indipendente dalle singole esecuzioni dei programmi che le utilizzano;

    3. Condivise, ovvero utilizzate da applicazioni diverse

    Processi (1 .. N)

    DBMS

    Base di dati

  • Nicola Bonizzardi [email protected]

    Basi di dati |Modello dei dati 5

    Condivisione dei dati Unorganizzazione pu svolgere diverse attivit o, pi in generale, divisa in pi settori (amministrazione, contabilit, magazzino, ). A ciascun settore corrisponde un sotto-sistema informativo; differenti settori possono avere i medesimi dati di interesse (lanagrafica dei fornitori, ad esempio), per cui potrebbero nascere delle sovrapposizioni fra i vari sotto-sistemi dei rispettivi settori. Da qui la necessit di avere una base di dati che sia una risorsa integrata e condivisa. Queste due caratteristiche (integrazione e condivisione) permettono la riduzione della ridondanza (evitando ripetizioni degli stessi dati in pi sotto-sistemi) e, conseguentemente, dellinconsistenza fra i dati. La condivisione, poich non mai completa (o comunque sarebbe opportuno che non lo sia), affiancata da meccanismi di definizione della privatezza dei dati, da autorizzazioni e dal controllo della concorrenza.

    Efficienza Viene misurata in termini di tempo di esecuzione (tempo di risposta) e spazio di memoria (principale e secondaria) ed il risultato della qualit del DBMS e delle applicazioni che lo utilizzano. A causa della maggiore complessit delle funzione che realizzano, i DBMS non sono necessariamente pi efficienti dei file system.

    MODELLO DEI DATI Esistono rappresentazioni dei dati, a livelli di astrazione diversi, che realizzano lindipendenza dei dati dalla loro rappresentazione fisica. Da questa necessit nasce il concetto di modello dei dati. Il modello dei dati un insieme di costrutti utilizzati per rappresentare la struttura dei dati di interesse, resa possibile attraverso un componente fondamentale che il costruttore di tipo. Analogamente a quanto accade nei linguaggi di programmazione, ogni modello dei dati dispone di meccanismi che permettono di definire nuovi tipi di dato a partire da tipi pi semplici (esempio: modello relazionale prevede il costruttore relazione).

    Costrutti del modello Elementi base del modello dei dati che vengono combinati tra loro secondo precise regole al fine di realizzare uno schema

    Schema Descrive la struttura della basi di dati (aspetto intensionale dei dati). Sostanzialmente invariante nel tempo.

    Istanza Costituita dai valori attuali assunti dalla base di dati, possono variare di molto nel corso del tempo (aspetto estensionale dei dati).

    Tipi principali di modelli a) Modelli logici

    Vengono utilizzati nei DBMS per lorganizzazione dei dati e sono indipendenti dalle strutture fisiche. Ad essi fanno riferimento i programmi. Esempi: modello relazionale, modello ad oggetti

    b) Modelli concettuali Permettono di rappresentare i dati indipendentemente dal DBMS e descrivono concetti della porzione di mondo reale di interesse. Sono utilizzati nelle fasi preliminari di progettazione. Esempi: modello ER (Entity-Relationship)

  • Nicola Bonizzardi [email protected]

    Basi di dati |Architettura ANSI-SPARC a 3 livelli 6

    ARCHITETTURA ANSI-SPARC A 3 LIVELLI

    Schema logico descrizione dellintera base di dati nel modello logico principale del DBMS

    Schema esterno descrizione di parte della base di dati in un modello logico

    Schema fisico rappresentazione dello schema logico per mezzo di strutture fisiche di memorizzazione.

    Indipendenza dei dati a) Fisica

    Il livello logico ed il livello esterno sono indipendenti da quello fisico; in base a questa propriet possibile modificare (entro certi limiti) le strutture fisiche di memorizzazione senza alterare lo schema logico ed esterno.

    b) Logica Il livello esterno indipendente da quello logico: Aggiunte di schemi esterni o modifiche a essi non richiedono modifiche del livello logico; Modifiche allo schema logico che lascino inalterato lo schema esterno sono trasparenti.

    Base di dati (Istanza)

    Schema fisico

    Schema logico

    Schema esterno

    Applicazione

    Schema esterno

    Utente Utente

    Schema esterno

    Utente Applicazione

  • Nicola Bonizzardi [email protected]

    Basi di dati |Classificazione dei DBMS 7

    CLASSIFICAZIONE DEI DBMS 1. Modello dei dati

    DBMS relazioni, DBMS Object-Oriented, DBMS reticolari, DBMS gerarchici 2. Numero di utenti

    DBMS mono utente, DBMS multi utente 3. Numero di siti su cui la Base di Dati distribuita

    DBMS centralizzato (un solo calcolatore), DBMS distribuito (BD e DBMS su molteplici calcolatori)

    LINGUAGGI PER BASI DI DATI Testuali interattivi (SQL) Con comandi immersi in un linguaggio ospite (Pascal, C, Cobol, ) Con comandi immersi in un linguaggio ad hoc (Oracle, PL/SQL, ) Con interfacce amichevoli (Access)

  • Nicola Bonizzardi [email protected]

    Modello Entity-Relationship (ER) |Entit 8

    MODELLO ENTITY-RELATIONSHIP (ER) introdotto da Peter Chen nel 1976

    Il modello ER usa simboli grafici per favorire limmediatezza della comprensione con laggiunta di frasi di specifica e di vincolo (non rappresentabili direttamente con gli elementi grafici di cui si dispone).

    Costruttori fondamentali i. Entit

    ii. Associazione iii. Attributo

    Altri costruttori i. Cardinalit (per associazioni ed attributi)

    ii. Identificatori iii. Attributi composti iv. Gerarchie di generalizzazione e sotto-insiemi

    ENTIT Lentit rappresenta una classe di oggetti del mondo reale di interesse per lapplicazione; tali oggetti possono avere una realt materiale (persone, automobili, ) oppure immateriale (conti correnti, corsi universitari, ).

    Ogni entit caratterizzata da un nome.

    ASSOCIAZIONE Rappresenta un legame logico tra entit di interesse per lapplicazione. Tra le stesse entit possono esserci diverse associazioni.

    Ogni associazione caratterizzata da un nome.

    PROPRIET Le propriet rappresentano caratteristiche delle entit e delle associazioni; ogni istanza di entit e di associazione possiede un valore per ciascuna propriet.

    Ogni propriet caratterizzata da un nome.

    Nome dellentit

    Nome dellassociazione

  • Nicola Bonizzardi [email protected]

    Modello Entity-Relationship (ER) |Classificazione delle propriet 9

    Propriet di entit

    Propriet di associazioni

    CLASSIFICAZIONE DELLE PROPRIET

    Scalare Semplice, un solo valore

    Multipla Ammissibili n valori, tra parentesi viene indicata la cardinalit della propriet

    Composta

    Opzionale ammessa la non esistenza del valore. Si indica ponendo a 0 la cardinalit minima di una propriet. La non esistenza diversa dal non sapere o dal non applicabile!

    Studente

    matricola cognome nome

    Fornisce Fornitore Prodotto

    prezzo periodo sconto

    matricola

    telefono (1,n)

    (1,1) giorno

    mese

    anno

    telefono (0,1)

    telefono (0,n)

  • Nicola Bonizzardi [email protected]

    Modello Entity-Relationship (ER) |Identificatore 10

    IDENTIFICATORE Un identificatore discrimina in modo univoco la singola istanza di entit.

    Esempi di identificatore sono: codice fiscale, partita iva, matricola,

    Identificatore composto

    CARDINALIT DELLE ASSOCIAZIONI Per cardinalit si intende il numero di volte che una data istanza di entit deve, o pu, partecipare allassociazione.

    (1,1) obbligatoria, una sola volta (1,n) obbligatoria, almeno una volta (0,1) opzionale, una sola volta (0,n) opzionale, n volte

    Associazioni N:M Detta anche associazione molti a molti.

    Presenza del vincolo: (1,m) un ingegnere deve partecipare ad almeno un progetto.

    Assenza del vincolo: (0,n) ad un progetto possono partecipare pi ingegneri, ma pu esistere un progetto al quale (in un dato istante) non partecipa nessun ingegnere.

    Associazioni 1:1

    Doppio vincolo: (1,1) un reparto deve avere un direttore ed il direttore uno solo; un direttore deve dirigere uno ed un solo reparto.

    Nome identificatore

    Comune nome provincia id_comune

    Partecipa Progetto

    id_proj

    Ingegnere

    matricola

    (0,n) (1,m)

    Dirige Reparto

    n_rep

    Direttore

    matricola

    (1,1) (1,1)

  • Nicola Bonizzardi [email protected]

    Modello Entity-Relationship (ER) |Auto-associazioni 11

    AUTO-ASSOCIAZIONI Vengono chiamate anche unarie od ad anello. Sono associazioni che hanno come partecipanti istanze provenienti dalla stessa entit.

    Per una maggiore comprensione, sul ramo dellassociazione pu essere indicato il ruolo assunto dallentit.

    ENTIT DEBOLI Le entit deboli sono quelle entit che contengono istanze la cui presenza nel sistema accettata solo se presenti determinate istanze di altre entit, da cui queste dipendono.

    Caratteristiche In caso di eliminazione dellistanza di riferimento, le istanze deboli ad essa collegate devono essere

    eliminate; Lidentificatore dellistanza debole deve contenere lidentificatore dellentit da cui dipende.

    Esempio: Se una compagnia di trasporti decidesse di sopprimere la Linea 7 non avrebbe pi senso tener memorizzate le informazioni riguardanti le sue corse

    Impiegato coniuge

    (0,1)

    (0,1)

    matricola

    marito

    moglie

    Ha Linea Bus

    nome

    Corsa (1,n) (1,1) ora_partenza

    direzione

  • Nicola Bonizzardi [email protected]

    Modello Entity-Relationship (ER) |Gerarchie 12

    GERARCHIE Durante lanalisi di un dominio pu risultare che delle entit risultino pi generali o pi specifiche luna rispetto allaltra (ad esempio, persona e studente). Si definisce quindi gerarchia di generalizzazione il legame logico che sussiste tra entit e sotto-entit.

    Definizioni Totale (t)

    Ogni istanza dellentit padre deve far parte di una delle entit figlie Parziale (p)

    Le istanze dellentit padre possono far parte di una delle entit figlie Esclusiva (e)

    Ogni istanza dellentit di padre deve far parte di una sola delle entit figlie Overlapping (o)

    Ogni istanza dellentit padre pu far parte di una o pi entit figlie

    Ereditariet Le propriet dellentit padre non devono essere replicate sullentit figlie in quanto automaticamente ereditate.

    Impiegato

    parametro

    Part-time

    ore

    nome Personale

    matricola cognome

    t,e

    nome Cittadino

    c.f. cognome

    Pescatore n_licenza tipo_licenza

    p,o

  • Nicola Bonizzardi [email protected]

    Modello Entity-Relationship (ER) |Non equivalenza tra associazioni ternarie e binarie 13

    NON EQUIVALENZA TRA ASSOCIAZIONI TERNARIE E BINARIE

    Il potere espressivo di unassociazione ternaria non equivalente a quello ottenibile convertendola con tre associazioni binarie, questo perch le associazioni binarie non catturano correttamente linformazione rappresentata dallassociazione ternaria.

    Si consideri ad esempio la seguente istanza dellassociazione ternaria fornitura:

    FORNITURA

    Articolo Fornitore Sede A2 F1 S1

    A1 F1 S2

    A2 F2 S2

    Convertendola in tre associazioni binarie si ottiene il seguente risultato:

    Basandoci sullassociazione ternaria e le tre associazioni binarie, rispondiamo alle seguenti domande:

    a) Esiste listanza (A2, F1, S2)? Notiamo che listanza (A2, F1, S2) non presente nellassociazione ternaria, ci nonostante troviamo nelle tre associazioni binarie i riferimenti (A2, F1), (A2, S2) e (F1, S2) che potrebbero far presumere lesistenza dellistanza presa in considerazione. La conversione ha creato una discrepanza nel contenuto informativo

    b) Cosa si pu dire se un articolo fornito da un solo fornitore? Sia nellassociazione ternaria che in quelle binarie larticolo A1 fornito unicamente dal fornitore F1. Durante la conversione linformazione non ha subito alterazioni.

    A_F

    F_S

    A_S Articolo Fornitore Fornitore Sede Articolo Sede

    A2 F1 F1 S1 A2 S1

    A1 F1 F1 S2 A1 S2

    A2 F2 F2 S2 A2 S2

    Fornitura Articolo

    Fornitore

    Sede

    A_S

    Articolo Fornitore

    Sede

    A_F

    F_S

  • Nicola Bonizzardi [email protected]

    Modello relazionale |Relazione matematica 14

    MODELLO RELAZIONALE proposto da E. F. Codd nel 1970

    Ha come costrutto principale la relazione la quale pu essere vista con una duplice prospettiva:

    Tabella: struttura dati semplice, intuitiva e flessibile Relazione n-aria: base matematica

    Motivazioni 1. Indipendenza fisica 2. Facilit duso 3. Flessibilit rispetto ad una vasta gamma di operazioni 4. Disponibilit di una definizione formale

    Base di dati relazionale Una base di dati relazionale rappresentata come una collezione di tabelle contraddistinte da un nome univoco. Ad ogni colonna associato un distinto attributo, ogni riga rappresenta una corrispondenza fra valori. Per ogni attributo precisato linsieme di possibili valori ammissibili, detto dominio.

    Pi formalmente possiamo dire che: Ogni riga unennupla ordinata di valori con dk appartenente al dominio Dk

    dellattributo Ak Una tabella un sottoinsieme del prodotto cartesiano D1 D2 Dn.

    RELAZIONE MATEMATICA Premesse:

    Dati D1, D2, , Dn con n insiemi anche non distinti Definito Il prodotto cartesiano D1 D2 Dn come linsieme di tutte le n-uple ordinate (d1, d2, ,

    dn) tali che d1D1, d2D2, , dnDn

    Si definisce relazione matematica su D1, D2, , Dn (detti domini della relazione) come un sottoinsieme del prodotto cartesiano D1 D2 Dn.

    Grado e cardinalit Una relazione su n domini ha grado n.

    La cardinalit della relazione data dal numero di n-uple di cui composta; nelle applicazione reali la cardinalit sempre finita

    Propriet Una relazione un insieme, quindi:

    1. Non definito alcun ordinamento fra le n-uple; 2. Le n-uple di una relazione sono distinte luna dalle altre.

    Le n-uple sono ordinate: li-esimo valore di ciascuna proviene dalli-esimo dominio ( quindi definito un ordinamento tra i domini).

  • Nicola Bonizzardi [email protected]

    Modello relazionale |Relazioni nel modello relazionale dei dati 15

    Struttura posizionale Calendario Stringa Stringa Data Data

    Rossi Logica 100101 300501 Verdi Matematica 030301 030601 Neri SO 060901 200202

    Bianchi Basi di dati 031001 010102

    Il dominio Data assume due ruoli distinti: data inizio e data fine. importante conoscere lordinamento per interpretare correttamente la relazione in quanto basata su una struttura posizionale.

    RELAZIONI NEL MODELLO RELAZIONALE DEI DATI

    Docente Corso Inizio Fine Rossi Logica 100101 300501 Verdi Matematica 030301 030601 Neri SO 060901 200202

    Bianchi Basi di dati 031001 010102

    A ciascun dominio associato un nome (attributo), unico nella relazione, che descrive il ruolo del dominio;

    Nella rappresentazione tabellare gli attributi possono essere usati come intestazioni delle colonne; Lordinamento fra gli attributi, avendone esplicitato il ruolo, diviene irrilevante: la struttura non

    posizionale.

    Formalizzando Lassociazione fra domini ed attributi definita da una funzione dom: X D che associa a ciascun

    attributo un dominio; Una ennupla su un insieme di attributi X una funzione che associa a ciascun attributo A, in X, un

    valore del dominio dom(A); Una relazione su X un insieme di n-uple su X Se t una ennupla su X e AX, allora t[A] (oppure t.A) indica il valore di t su A;

    esempio: t indica la prima ennupla della tabella qui sopra t[Docente] corrisponde al valore Rossi

    La stessa notazione estesa anche ad insieme di attributi, nel qual caso denota n-uple esempio: t[Docente,Corso] unennupla su due attributi con valori (Rossi, Logica)

    Tabelle e relazioni Una tabella rappresenta una relazione se:

    1. I valori di ciascuna colonna sono fra loro omogenei (appartenenti quindi allo stesso dominio) 2. Le righe sono diverse fra loro 3. Le intestazioni delle colonne sono diverse tra loro

    In una tabella che rappresenta una relazione:

    1. Lordinamento tra le righe e le colonne irrilevante 2. Lintestazione della tabella corrisponde allo schema di definizione della relazione

  • Nicola Bonizzardi [email protected]

    Modello relazionale |Relazioni nel modello relazionale dei dati 16

    Valori Il modello relazionale basato sui valori: i riferimenti fra dati, in relazioni diverse, sono rappresentati per mezzo di valori dei domini che compaiono nelle ennuple.

    Matricola Cognome Nome Data di nascita 6554 Rossi Mario 05/12/1978 8765 Neri Paolo 03/11/1976 9283 Verdi Luisa 12/11/1979 3456 Rossi Maria 01/12/1978

    Studente Voto Corso 3456 30 04 3456 24 02 9283 28 01 6554 26 01

    Codice Titolo Docente 01 Analisi Neri 02 Chimica Bruni 04 Chimica Verdi

    La studentessa Rossi Maria ha superato lesame di Chimica con una valutazione pari a 30

    Definizioni LIVELLO INTENSIONALE

    Schema di relazione un nome di relazione R con un insieme di attributi A1, A2, , An

    R(A1, A2, , An) Schema di base di dati Insieme di schemi di relazione con nomi diversi

    R = {R1(X1), R2(X2), , Rn(Xn)} LIVELLO ESTENSIONALE

    Istanza di relazione su uno schema R(X) Insieme r di ennuple su X

    Istanza di base di dati su uno schema R = {R1(X1), R2(X2), , Rn(Xn)} Insieme di relazioni r = {r1, r2, , rn} (con r1 relazione su R1)

    STUDENTI

    ESAMI

    CORSI

  • Nicola Bonizzardi [email protected]

    Modello relazionale |Relazioni nel modello relazionale dei dati 17

    Il problema dellinformazione incompleta: motivazioni e soluzioni Utilizzando il modello relazionale che impone ai dati una struttura rigida (informazioni rappresentante tramite n-uple che devono corrispondere agli schemi di relazione) inevitabile che i dati di interesse possano non corrispondere esattamente al formato previsto.

    Consideriamo ad esempio la seguente tabella:

    Citt Prefettura Roma Via IV Novembre

    Firenze Tivoli Prato

    Firenze, Tivoli e Prato non hanno il campo Prefettura valorizzato ma per differenti motivazioni:

    Firenze una provincia ma non conosciamo lindirizzo della prefettura.. Tivoli non una provincia; non ha quindi una prefettura!! Prato una nuova provincia: ha una prefettura?!

    Il modello relazionale impone che per le proprie relazioni venga associato a ciascun attributo un valore del corrispondente dominio. Questa caratteristiche non rispettata dalla tabella in esame, come risolvere il problema?

    Spesso, anche se non conviene, si fa ricorso a valori del dominio apparentemente non utilizzati (per esempio: 0, stringa nulla, etc). Questo trucchetto per presenta i seguenti problemi:

    a) Potrebbero non esistere valori non utilizzati; b) Valori che oggi consideriamo non utilizzati potrebbero diventare significativi col passare del tempo; c) In fase di utilizzo (come ad esempio nei programmi) risulta necessario conoscere la nuova

    semantica attribuita a quei particolari valori.

    Per ovviare al problema si adotta una tecnica rudimentale ma efficace: il valore nullo! Il valore nullo denota lassenza di un valore del dominio (e non considerato un valore appartenente al dominio!). Formalmente sufficiente estendere il concetto di ennupla: t[A] pu rappresentare o il valore del dominio dom(A) oppure il valore nullo NULL.

    Nel modello relazionale prevista la possibilit di imporre restrizioni sulla presenza di valori nulli.

    Al valore nullo possiamo associare differenti significati, alcuni dei quali sono:

    a) Valore sconosciuto b) Valore inesistente c) Valore senza informazione

    Ci nonostante i DBMS per il valore nullo assumono uno ed un solo significato: valore senza informazione.

  • Nicola Bonizzardi [email protected]

    Modello relazionale |Vincoli di integrit 18

    VINCOLI DI INTEGRIT

    Matricola Cognome Nome Data di nascita NULL Rossi Mario 05/12/1978 NULL Neri Paolo 03/11/1976 9283 Verdi Luisa 12/11/1979 3456 Rossi Maria 01/12/1978

    Studente Voto Corso 3456 30 04 3456 24 03 9283 28 01 1540 26 01

    Codice Titolo Docente 01 Analisi Neri 02 Chimica Bruni

    NULL Chimica Verdi

    Esistono istanze di basi di dati che, pur essendo sintatticamente corrette, non rappresentano informazioni possibili per lapplicazione di interesse.

    Il vincolo di integrit una propriet che deve essere soddisfatta dalle istanze (per cui interessa a livello di schema) che rappresentano informazioni corrette per lapplicazione. Ogni vincolo pu essere visto come una funzione booleana (o predicato) che associa ad ogni istanza il valore vero o falso.

    I vincoli di integrit sono stati introdotti con lo scopo di:

    a) Descrivere la realt di interesse in modo pi accurato; b) Fornire un contributo verso la qualit dei dati c) Costituire un elemento di ausilio alla progettazione d) Essere usati dal sistema nella scelta della strategia di esecuzione delle interrogazioni

    Ci nonostante va precisato che non tutte le propriet di interesse sono rappresentabili per mezzo di vincoli esprimibili direttamente.

    Tipi di vincoli Vincoli intra-relazioni

    I. Vincoli sui valori (o anche detti vincoli di dominio) II. Vincoli di ennupla

    Vincoli inter-relazionali

    Vincoli di ennupla e vincoli di dominio I vincoli di ennupla esprimono condizioni sui valori di ciascuna ennupla, indipendentemente dalle altre ennuple. Un vincolo di ennupla, se coinvolge un solo attributo, detto vincolo di dominio.

    Esempi: (Voto 18) AND (Voto 30) Lordo = (Ritenute + Netto)

    STUDENTI

    ESAMI

    CORSI

  • Nicola Bonizzardi [email protected]

    Modello relazionale |Vincoli di chiave 19

    VINCOLI DI CHIAVE

    Matricola Cognome Nome Data di nascita 6554 Rossi Mario 05/12/1978 8765 Neri Paolo 03/11/1976 9283 Verdi Luisa 12/11/1979 3456 Rossi Maria 01/12/1978

    La chiave un insieme di attributi che identificano univocamente le ennuple di una relazione. Esempi di chiave sono:

    Matricola: chiave composta da un solo attributo Cognome, Nome e Data di nascita: chiave composta da tre attributi

    Pi precisamente possiamo dire che:

    Un insieme K di attributi super-chiave per una relazione r se essa non contiene due n-uple distinte t1 e t2 con t1[K] = t2[K].

    K chiave per r se una super-chiave minimale, ovvero non contiene unaltra super-chiave.

    Facendo riferimento alle definizioni sopra riportate possiamo affermare che sia Matricola sia la combinazione Cognome, Nome, Data di nascita sono super-chiavi di studenti. Matricola anche chiave, non lo invece Cognome, Nome, Data di nascita in quanto (riferendoci esclusivamente allistanza presa in considerazione) sia Nome che Data di nascita identificano in modo univoco le righe della tabella (contiene quindi delle (super) chiavi).

    Individuazione delle chiavi Lindividuazione delle chiavi avviene:

    1. Considerando le propriet che i dati soddisfano nellapplicazione 2. Notando quali insiemi di attributi permettono di identificare univocamente le n-uple 3. Individuando i sottoinsiemi minimali di tali insiemi che conservano la capacit di identificare n-uple.

    Esistenza delle chiavi Poich le relazioni sono un insieme, non sono ammessi n-uple uguali fra loro. Esiste quindi per ogni relazione una super-chiave che data dallinsieme di tutti gli attributi di cui composta.

    Poich linsieme degli attributi finito, ogni schema di relazione ha (almeno) una chiave.

    STUDENTI

  • Nicola Bonizzardi [email protected]

    Modello relazionale |Vincoli di integrit referenziale 20

    Chiave primaria Matricola Cognome Nome Data di nascita

    NULL Rossi Mario 05/12/1978 8765 Neri Paolo 03/11/1976 9283 Verdi Luisa 12/11/1979 NULL Rossi Maria 01/12/1978

    In presenza di valori nulli, i valori degli attributi che formano la chiave non permettono di:

    i. Identificare le n-uple come desiderato ii. Realizzare facilmente i riferimenti da altre relazioni (ricordiamo che il modello basato sui valori)

    Si introduce quindi il concetto di chiave primaria:

    Per ogni relazione viene scelta una chiave (detta primaria) su cui non sono ammessi valori nulli. La chiave primaria viene contraddistinta sottolineando gli attributi di cui composta.

    Matricola Cognome Nome Data di nascita 6554 Rossi Mario 05/12/1978 8765 Neri Paolo 03/11/1976 9283 Verdi Luisa 12/11/1979 3456 Rossi Maria 01/12/1978

    VINCOLI DI INTEGRIT REFERENZIALE Come gi accennato, informazioni contenute in relazioni differenti sono correlate tra loro per mezzo di valori comuni, in particolare i valori delle chiavi (solitamente primarie). quindi importante che, ad esempio, nella relazione ESAMI non ci siano valori per lattributo Studente che non abbiano il corrispettivo con lattributo Matricola della relazione STUDENTI.

    Un vincolo di integrit referenziale fra un insieme di attributi X di una relazione R1 ed unaltra relazione R2 impone ai valori su X di ciascuna ennupla dellistanza di R1 di comparire come valori della chiave (primaria) dellistanza di R2.

    FORME DI RELAZIONI Gli attributi di una ennupla possono essere del tipo:

    a) Semplice attributo a valori atomico b) Multi valore attributo in cui un possibile valore un insieme di valori c) Strutturato attributo in cui un possibile valore una ennupla di valori

    Prima forma normale Uno schema di relazione R(X) detto in prima forma normale (1NF o flat) se ogni attributo appartenente a X un attributo semplice. Diversamente detta strutturata (o nested).

    Nel modello relazionale la 1NF deve essere garantita per ogni relazione, cos da privilegiare la semplicit nellinterpretazione ed una comoda gestione.

    Altre forme di relazione verranno trattate nel capitolo: Normalizzazione.

    STUDENTI

    STUDENTI

  • Nicola Bonizzardi [email protected]

    Algebra relazionale |Operatori su insiemi 21

    ALGEBRA RELAZIONALE un linguaggio di interrogazione

    Linguaggi relazionali di interrogazione Algebrici

    Ogni interrogazione unespressione composta da operatori che, applicati nellordine fissato dalla composizione, calcolano la relazione risultante.

    Basati sul calcolo di predicati Ogni interrogazione unespressione composta a partire da predicati che descrivono la relazione risultante

    Caratteristiche dellalgebra relazionale a) Indipendenza dalla struttura fisica b) Operazioni efficienti c) Potenza espressiva limitata, ma:

    i. Ottimizzazione decidibile ii. Linguaggio sufficientemente ricco per basi di dati

    d) Operandi: relazioni, costanti o variabili che denotano relazioni di grado fissato e) Operatori:

    i. Su insiemi ii. Specifici su relazioni

    OPERATORI SU INSIEMI Siano r ed s relazioni dello stesso grado e definite sugli stessi attributi, definiamo cos i seguenti operatori:

    Unione r s insieme delle ennuple appartenenti ad r OR s Differenza r s insieme delle ennuple appartenenti ad r AND NOT s Intersezione r s insieme delle ennuple appartenenti ad r AND s

    Consideriamo ora r definita su R(X) e s definita su S(Y), con intersezione tra X e Y vuota. Si definisce:

    Prodotto cartesiano r s insieme delle ennuple che sono combinazione delle ennuple di r ed s

    OPERATORI SU RELAZIONI

    Selezione Insieme delle ennuple di una relazione che soddisfano particolari condizioni espresse mediante formule proposizionali. Alla selezione si associa il concetto di decomposizione orizzontale.

    espressione booleana RELAZIONE

    Il risultato della selezione una tabella, priva di nome, con le seguenti caratteristiche:

    Schema lo stessa di relazione (grado =)

    Istanza le tuple di RELAZIONE che soddisfano il predicato di selezione (cardinalit )

  • Nicola Bonizzardi [email protected]

    Algebra relazionale |Operatori su relazioni 22

    La sintassi valida per lespressione booleana la seguente:

    Operazioni booleane P1 AND P2 P1 OR P2 NOT(P1)

    Comparatori =, !=, ,

    Predicati semplici TRUE, FALSE termine comparatore termine

    Termine costante, attributo espressione aritmetica di costanti ed attributi

    Esempio di una selezione:

    Matricola Nome Citt C-Dip 123 Carlo Bologna Inf 415 Paola Torino Inf 702 Antonio Roma Log

    (Citt = Torino) ((Citt = Roma) (C-Dip = Log)) STUDENTE

    Matricola Nome Citt C-Dip 415 Paola Torino Inf

    Proiezione Insieme delle ennuple di una relazione limitato su particolari attributi. Alla proiezione si associa il concetto di decomposizione verticale.

    elenco attributi RELAZIONE

    Il risultato della proiezione una tabella, priva di nome, con le seguenti caratteristiche:

    Schema attributi indicati in elenco attributi (grado )

    Istanza la restrizione delle tuple sugli attributi indicati in elenco attributi (cardinalit )

    Esempio di una proiezione:

    Matricola Nome Citt C-Dip 123 Carlo Bologna Inf 415 Paola Torino Inf 702 Antonio Roma Log

    Nome, C-Dip STUDENTE

    Nome C-Dip Carlo Inf Paola Inf

    Antonio Log

    STUDENTE

    STUDENTE

  • Nicola Bonizzardi [email protected]

    Algebra relazionale |Operatori su relazioni 23

    Esempio di una proiezione con rimozione dei duplicati:

    Matricola Nome Citt C-Dip 123 Carlo Bologna Inf 415 Paola Torino Inf 702 Antonio Roma Log

    C-Dip STUDENTE

    C-Dip Inf Log

    Leliminazione dei duplicati gestita in maniera differente a seconda del modello in uso:

    Formale eliminazione automatica dei duplicati

    Informale eliminazione dei duplicati va richiesta esplicitamente

    Assegnamento Loperatore di assegnamento non fa parte delle operazioni algebriche ma particolarmente utile in quanto indispensabile per poter dare un nome al risultato di unespressione algebrica.

    NOME RELAZIONE = espressione algebrica

    Esempi di assegnamento:

    INFORMATICI = C-Dip = Inf STUDENTI

    TORINESI = Citt = Torino STUDENTI

    Ridenominazione Loperatore di ridenominazione non fa parte delle operazioni algebriche; permette di modificare i nomi degli attributi

    elenco nomi nuovi elenco nomi attuali RELAZIONE

    Esempi di ridenominazioni:

    Genitore Padre PATERNITA

    Genitore Madre MATERNITA

    Espressioni algebriche Le espressioni algebriche (relazionali) non sono altro che una concatenazione di pi operazioni algebriche (relazionali). Il valore aggiunto delle espressioni algebriche :

    i. La possibilit di esprimere interrogazioni in modo formale ii. La possibilit di estrarre informazioni dai dati

    STUDENTE

  • Nicola Bonizzardi [email protected]

    Algebra relazionale |Operatori su relazioni 24

    Join Loperazione algebrica di join in realt un operatore derivato. Il significato delloperatore di join equivalente alla seguente espressione algebrica:

    RELAZIONE1.chiave = RELAZIONE2.chiave RELAZIONE1 RELAZIONE2

    La sintassi delloperatore di join la seguente:

    RELAZIONE1 RELAZIONE1.chiave = RELAZIONE2.chiave RELAZIONE2

    Come si pu notare dalle due notazioni, in caso di attributi omonimi si ricorre alla notazione puntata.

    Il risultato della join una tabella, priva di nome, con le seguenti caratteristiche:

    Schema concatenazione degli schemi di RELAZIONE1 e RELAZIONE2

    Istanza le tuple ottenute concatenando le sole tuple di RELAZIONE1 e RELAZIONE2 che soddisfano il predicato

    Esempio di join:

    Matricola Nome Citt C-Dip 123 Carlo Bologna Inf 415 Paola Torino Inf 702 Antonio Roma Log

    Matricola C-Corso Data Voto 123 1 07/09/97 30 123 2 08/01/98 28 702 2 07/09/97 20

    STUDENTE STUDENTE.Matricola = ESAME.Matricola ESAME

    STUDENTE.Matricola Nome Citt C-Dip ESAME.Matricola C-Corso Data Voto 123 Carlo Bologna Inf 123 1 07/09/97 30 123 Carlo Bologna Inf 123 2 08/01/98 28 702 Antonio Roma Log 702 2 07/09/97 20

    Il predicato di join dispone dei seguenti operatori di confronto: =, !=, ,

    STUDENTE

    ESAME

  • Nicola Bonizzardi [email protected]

    Algebra relazionale |Operatori su relazioni 25

    Equi-join e join naturale Si definisce equi-join una join in cui partecipano solo confronti di uguaglianza; si definisce join naturale unequi-join di tutti gli attributi omonimi. Nella join naturale si omette il predicato (in quanto implicito) e nella tabella risultante si eliminano le colonne ripetute.

    Esempio di join naturale:

    STUDENTE ESAME

    Matricola Nome Citt C-Dip C-Corso Data Voto 123 Carlo Bologna Inf 1 07/09/97 30 123 Carlo Bologna Inf 2 08/01/98 28 702 Antonio Roma Log 2 07/09/97 20

    Semi-join un operatore derivato, equivalente alla seguente espressione:

    RELAZIONE1.* (RELAZIONE1 RELAZIONE1.Chiave = RELAZIONE2.Chiave RELAZIONE2)

    La cui sintassi :

    RELAZIONE1 RELAZIONE1.Chiave = RELAZIONE2.Chiave RELAZIONE2

    Esempio di semi-join:

    STUDENTE STUDENTE.Matricola = ESAME.Matricola ESAME

    Matricola Nome Citt C-Dip 123 Carlo Bologna Inf 702 Antonio Roma Log

    Cos facendo otteniamo una relazione con stesso schema di STUDENTE e con istanza le tuple di quegli studenti che hanno superato almeno un esame.

    Semi-join naturale Si indica come segue:

    RELAZIONE1 RELAZIONE2

    Ed il suo significato equivalente alla seguente espressione:

    RELAZIONE1.* (RELAZIONE1 RELAZIONE2)

    Esempio di semi-join naturale:

    STUDENTE ESAME

    Matricola Nome Citt C-Dip 123 Carlo Bologna Inf 702 Antonio Roma Log

  • Nicola Bonizzardi [email protected]

    Algebra relazionale |Operatori su relazioni 26

    Terminologia Due ennuple sono dette joinabili se contribuiscono alla join Una ennupla che non contribuisce alla join detta dangling Una join completa se nessuna delle relazioni contiene ennuple dangling

    Osservazioni La join un operatore commutativo ed associativo; come gi visto pu essere espresso in termini di:

    i. Prodotto cartesiano ii. Selezione

    iii. Proiezione

    Una join naturale tra relazioni che non hanno attributi comuni coincide con il prodotto cartesiano.

  • Nicola Bonizzardi [email protected]

    Linguaggio SQL |Introduzione 27

    LINGUAGGIO SQL Structured Query Language

    INTRODUZIONE Il linguaggio SQL si compone di:

    1. Data Definition Language (DDL) Definizione di domini, tabelle, indici, viste, procedure e trigger

    2. Data Manipulation Language (DML) Linguaggio di query, linguaggio di modifica e di comandi transazionali

    3. Data Control Language (DCL) Definizione di autorizzazioni

    Storia e standardizzazione Prima proposta SEQUEL (IBM Research, 1974)

    Prima implementazione commerciale SQL/DS (IBM, 1981)

    La standardizzazione stata cruciale per la diffusione di SQL

    Dal 1983, standard de facto Prima versione ufficiale nel 1986 (SQL-1), rivista nel 1989 (SQL-89) Seconda versione nel 1992 (SQL-2 o SQL-92) Terza versione nel 1999 (SQL-3 o SQL-99) Quarta versione nel 2003 (ISO/IEC 9075-2:2003 o SQL-2003)

    La struttura a livelli di SQL-92 composta da:

    1. Entry SQL (simile a SQL-89) 2. Intermediate SQL 3. Full SQL

    La maggior parte dei sistemi reali conforme al livello Entry e offre delle estensioni proprietarie per le funzioni avanzate.

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |SQL come linguaggio di interrogazione 28

    DATA MANIPULATION LANGUAGE interrogazione e manipolazione dei dati

    SQL COME LINGUAGGIO DI INTERROGAZIONE In SQL le interrogazioni sono dichiarative: lutente specifica quale informazione di suo interesse, ma non come estrarla dai dati. Le interrogazioni vengono tradotte dallottimizzatore (query optimizer) nel linguaggio procedurale interno al DBMS.

    In questo modo il programmatore non ha necessit di focalizzarsi sullefficienza ma solo sulla leggibilit: aspetto pi qualificante delle basi di dati relazionali.

    INTERROGAZIONI SQL Le interrogazioni SQL hanno una struttura select from where, in cui le tre parti sono chiamate rispettivamente: clausola select, clausola from e clausola where. La sintassi EBNF-like la seguente:

    select AttrEspr [[as] Alias] {, AttrEspr [[as] Alias]} from Tabella [[as] Alias] {, Tabella [[as] Alias]} [where Condizione]

    Mentre la semantica dellinterrogazione la seguente:

    la query effettua il prodotto cartesiano delle tabelle presenti nella clausola from, considera solo le righe che soddisfano la condizione della clausola where e per ogni riga valuta le espressioni della clausola select.

    Interpretazioni algebriche delle query SQL Consideriamo una generica query SQL:

    select T_1.Attributo_11, , T_h.Attributo_hm from Tabella_1 T_1, , Tabella_n T_n where condizione

    corrisponde allinterrogazione in algebra relazione:

    T_1.Attributo11, , T_h.Attributo_hm ( Condizione (Tabella_1 Tabella _n))

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Interrogazioni SQL 29

    Interrogazione semplice select * from Studente

    Matricola Nome Citt C-Dip 123 Carlo Bologna Inf 415 Paola Torino Inf 702 Antonio Roma Log

    select Nome from Studente where C-Dip = Log

    che equivale (a meno dei duplicati) alla seguente espressione algebrica

    Nome ( C-Dip = Log STUDENTE)

    Nome Antonio

    Sintassi della clausola select select * select Nome, Citt select distinct Citt select Citt as LuogoDiResidenza select RedditoCatastale * 0.05 as TassaIci select sum(Salario)

    Sintassi della clausola from from Studente from Studente as X from Studente, Esame from Studente join Esame on Studente.Matricola = Esame.Matricola

    Sintassi della clausola where Nella clausola where la condizione rappresentata da unespressione booleana di predicati semplici, analogamente allalgebra relazionale.

    Sono stati per introdotti dei predicati aggiuntivi come:

    between: Data between 1-1-90 and 31-12-99

    like: C-Dip like Lo% Targa like MI_777_8%

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Gestione dei duplicati 30

    Esempi:

    a) Estrarre gli studenti di Roma che frequentano il corso in Informatica o in Logistica

    select * from Studente where Citt = Roma and (C-Dip = Inf or C-Dip = Log)

    Matricola Nome Citt C-Dip 702 Antonio Roma Log

    b) Estrarre gli studenti con un nome che ha una a in seconda posizione e finisce per o

    select * from Studente where Nome like _a%o

    Matricola Nome Citt C-Dip 123 Carlo Bologna Inf

    GESTIONE DEI DUPLICATI A differenza di quanto accade nellalgebra relazione in cui i risultati delle interrogazioni non contengono elementi duplicati, con lSQL leliminazione dei duplicati deve essere richiesta espressamente utilizzando la parola chiave distinct nella clausola select.

    GESTIONE DEI VALORI NULLI Come gi accennato, i valori nulli hanno un significato intrinseco che varia a seconda della situazione:

    i. Valore non applicabile (non fa parte del dominio, ad esempio) ii. Valore applicabile ma sconosciuto

    iii. Non si sa se il valore sia applicabile o meno

    A seconda della versione dellSQL la gestione dei valori nulli risulta differente:

    SQL-89 usa una logica a 2 valori (vero, falso); un confronto con null restituisce come risultato false

    SQL-2 usa una logica a 3 valori (vero, falso, unknown); un confronto con null restituisce unknown

    LOGICA A TRE VALORI (V, F, U)

    V and U = U F and U = F U and U = U V or U = V F or U = U U or U = U

    not U = U

    Si sfrutta quindi la valutazione in corto circuito (da sinistra a destra) tipica degli operatori booleani binari.

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Operatore is 31

    OPERATORE IS Per verificare se un valore nullo si utilizza loperatore is:

    Attributo is [not] null

    JOIN IN SQL-2 Estrarre il nome degli studenti di Logistica che hanno preso almeno un 30

    select Nome from Studente, Esame where Studente.Matricola = Esame.Matricola and C-Dip = Log and Voto = 30

    La soluzione pi immediata in SQL per effettuare una join quella di sfruttare la semantica della query SQL: viene eseguito il prodotto cartesiano delle tabelle indicate nella clausola from e selezionate solo quelle righe che soddisfano la condizione della clausola where.

    Tuttavia SQL-2 ha introdotto una sintassi alternativa per eseguire delle join, rappresentandole esplicitamente nella clausola from:

    select AttrEspr [[as] Alias] {, AttrEspr [[as] Alias]} from Tabella [[as] Alias] {[TipoJoin] join Tabella [[as] Alias] on Condizioni} [where Condizione]

    TipoJoin inner, (right | left | full) outer

    Tipi di join in SQL-2 Inner join visto finora, crea una nuova tabella combinando i valori delle due tabelle di

    partenza basandosi su una certa condizione di confronto

    Outer la tabella risultante da una outer join trattiene quei record che non hanno corrispondenza tra le tabelle (che verrebbero quindi ignorati da una inner join). Per effettuare una outer join necessario precisare se essa di tipo left, right oppure full

    Left precisa che la outer join tratter i record della tabella di sinistra; di conseguenza il risultato conterr tutte le righe della tabella di sinistra in aggiunta alle sole righe della tabella di destra che soddisfano le condizioni di join.

    Le righe della colonna di sinistra che sono state trattenute della left outer join riportano dei valori null per gli attributi dello schema della tabella di destra (in quanto non hanno trovato corrispondenza).

    Right precisa che la outer join tratter i record della tabella di destra

    Full precisa che la outer join tratter i record sia della tabella di sinistra sia della tabella di destra.

    Anche se di rado tale funzionalit viene implementata, possibile aggiungere la parola chiave natural prima di TipoJoin per eseguire una join naturale.

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Variabili in SQL 32

    VARIABILI IN SQL Luso delle variabili corrisponde alloperatore di ridenominazione dellalgebra relazionale. Gli alias di tabella possono essere visti come delle variabili, con valore pari ad unintera tabella.

    Matr Nome DataAss Salario MatrMgr 1 Piero 01-01-95 3 M 2 2 Giorgio 01-01-97 2,5 M null 3 Giovanni 01-07-96 2 M 2

    Chi sono i dipendenti di Giorgio?

    select X.Nome, X.MatrMgr, Y.Matr, Y.Nome from Impiegato as X, Impiegato as Y where X.MatrMgr = Y.Matr and Y.Nome = Giorgio

    X.Nome X.MatrMgr Y.Matr Y.Nome Piero 2 2 Giorgio

    Giovanni 2 2 Giorgio

    ORDINAMENTO In SQL possibile ordinare le righe della tabella risultante da uninterrogazione sfruttando la clausola order by. Le condizioni di ordinamento vengono valutate in sequenza: a pari valore del primo attributo si considera lordinamento sul secondo, e cos via.

    La sintassi della clausola order by

    order by AttributoOrdinamento [asc | desc] {, AttributoOrdinamento [asc | desc]} asc il valore di default

    Esempio

    CodOrd CodCli Data Importo 1 3 01-06-97 50.00 2 4 03-08-97 8.00 3 3 01-09-97 1.50 4 1 01-07-97 12.00 5 1 01-08-97 1.50 6 3 03-09-97 5.50

    select * from Ordine order by Data

    CodOrd CodCli Data Importo 1 3 01-06-97 50.00 4 1 01-07-97 12.00 5 1 01-08-97 1.50 2 4 03-08-97 8.00 3 3 01-09-97 1.50 6 3 03-09-97 5.50

    Impiegato

    Ordine

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Funzioni aggregate 33

    select * from Ordine order by CodCli asc, Data desc

    CodOrd CodCli Data Importo 5 1 01-08-97 1.50 4 1 01-07-97 12.00 6 3 03-09-97 5.50 3 3 01-09-97 1.50 1 3 01-06-97 50.00 2 4 03-08-97 8.00

    FUNZIONI AGGREGATE Le interrogazioni con funzioni aggregate non posso essere rappresentate tramite lalgebra relazionale, il risultato di una query con funzioni aggregate dipende dalla valutazione del contenuto di un insieme di righe. Gli operatori aggregati presenti in SQL-2 sono:

    1. count cardinalit 2. sum sommatoria 3. max massimo 4. min minimo 5. avg media

    Operatore count Restituisce il numero di righe o valori di uninterrogazione, la sintassi la seguente:

    count ((* | [distinct | all] ListaAttributi))

    la semantica corrispondente :

    * restituisce il numero di righe della tabella

    ListaAttributi restituisce il numero di valori (anche ripetuti) presenti nella colonna, siccome null non considerato un valore del dominio le sue occorrenze non vengono conteggiate. Pu usufruire delle opzioni distinct ed all.

    distinct considera solo valori univoci non null

    all considera tutti i valori non null (comportamento di default).

    Operatori sum, max, min, avg La sintassi dei seguenti operatori :

    operatore sum | max | min | avg operatore (([distinct | all] AttrEspr))

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Raggruppamento 34

    Esempi

    A. Estrarre limporto massimo degli ordini

    select max(Importo) as MaxImp from Ordine

    B. Estrarre la somma degli importi degli ordini del cliente numero 1

    select sum(Importo) as SommaImp from Ordine where CodCli = 1

    C. Estrarre lordine massimo tra quelli contenenti il prodotto con codice ABC Per la risoluzione dellesercizio si consideri il seguente schema Dettaglio(CodOrd, CodProd, Qt)

    select max(Importo) as MaxImportoPerABC from Ordine, Dettaglio where Ordine.CodOrd = Dettaglio.CodOrd and CodProd = ABC

    RAGGRUPPAMENTO Nelle interrogazioni si possono applicare le funzioni aggregate ad un sottoinsieme di righe eseguendo un raggruppamento, per fare ci necessario aggiungere le seguenti clausole:

    group by (raggruppamento) having (selezione dei gruppi) [opzionale]

    Esempio: Estrarre la somma degli importi degli ordini successivi al 10-06-97 per quei clienti che hanno emesso almeno 2 ordini

    select CodCli, sum(Importo) as ImpCli from Ordine where Data > 10-06-97 group by CodCli having count(*) 2

    vediamo nel dettaglio lordine di esecuzione delle clausole:

    1. Schema della tabella risultante

    CodCli ImpCli

    2. Valutazione clausola where

    CodOrd CodCli Data Importo 2 4 03-08-97 8.00 3 3 01-09-97 1.50 4 1 01-07-97 12.00 5 1 01-08-97 1.50 6 3 03-09-97 5.50

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Query binarie 35

    3. Valutazione clausola group by

    CodOrd CodCli Data Importo 4 1 01-07-97 12.00 5 1 01-08-97 1.50 3 3 01-09-97 1.50 6 3 03-09-97 5.50 2 4 03-08-97 8.00

    4. Valutazione delle funzioni aggregate

    CodCli sum(Importo) count(*) 1 13.50 2 3 32.50 2 4 5 1

    5. Valutazione della clausola having

    CodCli sum(Importo) count(*) 1 13.50 2 3 32.50 2

    6. Produzione del risultato

    CodCli ImpCli 1 13.50 3 32.50

    QUERY BINARIE

    Con query binarie si intende la concatenazione di due query SQL tramite gli operatori insiemistici. La sintassi di una query binaria la seguente:

    QuerySQL {(union | intersect | except) [all] QuerySQL}

    In cui:

    union unione

    intersect intersezione

    except differenza

    Senza laggiunta della parola chiave all, vengono rimossi i duplicati.

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Query binarie 36

    Union Esempio: estrarre i codici degli ordini i cui importi superano 5.00 oppure presenti in qualche dettaglio

    con quantit superiore a 1000

    select CodOrd from Ordine where Importo > 5.00

    union

    select CodOrd from Dettaglio where Qta > 1000

    Notazione posizionale Consideriamo le seguenti tabelle:

    Padre Figlio Sergio Franco Luigi Olga Luigi Filippo

    Franco Andrea Franco Aldo

    Madre Figlio Luisa Maria Luisa Luigi Anna Olga Anna Filippo Maria Andrea Maria Aldo

    e la seguente query binaria:

    select Padre, Figlio from Paternit

    union

    select Madre, Figlio from Maternit

    La tabella risultante avr necessariamente 2 colonne, ma quali saranno i nomi dei suoi attributi? Padre, Figlio oppure Madre, Figlio? Risposta: quelli del primo operando, per cui: Padre, Figlio. Per dare un maggiore senso alla tabella risultante possibile eseguire una ridenominazione:

    select Padre as Genitore, Figlio from Paternit

    union

    select Madre, Figlio from Maternit

    Paternit

    Maternit

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Query binarie 37

    Otteniamo quindi come risultato la seguente tabella:

    Genitore Figlio Sergio Franco Luigi Olga Luigi Filippo

    Franco Andrea Franco Aldo Luisa Maria Luisa Luigi Anna Olga Anna Filippo Maria Andrea Maria Aldo

    Consideriamo ora la seguente query binaria:

    select Padre as Genitore, Figlio from Paternit

    union

    select Figlio, Madre as Genitore from Maternit

    per effetto della notazione posizionale quello che si ottiene la seguente tabella:

    Genitore Figlio Sergio Franco Luigi Olga Luigi Filippo

    Franco Andrea Franco Aldo Maria Luisa Luigi Luisa Olga Anna

    Filippo Anna Andrea Maria

    Aldo Maria

    Nonostante la query sia sintatticamente corretta, non lo (ragionevolmente) semanticamente. Infatti le righe contraddistinte dal corsivo hanno nella colonna denominata Genitore il nome del figlio, mentre hanno nella colonna denominata Figlio il nome della rispettiva madre.

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Query binarie 38

    Differenza Esempio: estrarre i codici degli ordini i cui importi superano 5.00 ma non presenti in qualche dettaglio

    con quantit superiore a 1000

    select CodOrd from Ordine where Importo > 5.00

    except

    select CodOrd from Dettaglio where Qta > 1000

    Esempio: estrarre i codici degli ordini che presentano una linea dordine con quantit maggiore di 10, ma non presentino nessuna linea dordine con quantit superiore a 1000

    select CodOrd from Dettaglio where Qta > 10

    except

    select CodOrd from Dettaglio where Qta > 1000

    Anticipazione: le query binarie con operatore di differenza possono essere rappresentate anche tramite query nidificate che verranno trattate pi avanti.

    Intersezione Esempio: estrarre i codici degli ordini i cui importi superano 5.00 e che sono presenti in qualche

    dettaglio con quantit superiore a 1000

    select CodOrd from Ordine where Importo > 5.00

    intersect

    select CodOrd from Dettaglio where Qta > 1000

    Anticipazione: anche in questo caso si pu rappresentare la query binaria tramite una query nidificata.

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Query nidificate 39

    QUERY NIDIFICATE Nella clausola where possono comparire predicati che confrontano un attributo (o unespressione sugli attributi) con il risultato di una query SQL:

    Operator = | | < | | > | ScalarValue Operator (any | all | [not] in | exists) SelectSQL

    Gli operatori di confronti si aspettano dei valori scalari, se per loperando di sinistra non ci sono problemi in quanto uno ScalarValue per definizione, non si pu dire lo stesso per SelectSQL che, essendo una tabella, pu contenere 0, 1 o pi righe. Se il risultato della SelectSQL unico allora non ci sono problemi, in caso contrario (o nelleventualit in cui non si abbia certezza sul numero di righe della tabella risultante) necessario utilizzare le seguenti condizioni:

    any il predicato vero se almeno una riga restituita dalla query SelectSQL soddisfa il confronto

    all il predicato vero se tutte le righe restituite dalla query SelectSQL soddisfano il confronto

    in stabilisce se ScalarValue contenuto nella tabella risultante di SelectSQL equivalente alle seguente combinazione: = any

    not in stabilisce se ScalarValue non contenuto nella tabella risultante di SelectSQL equivalente alla seguente combinazione: all exists il predicato vero se SelectSQL restituisce un risultato non vuoto

    Consideriamo le seguenti query SQL

    select CodOrd select CodOrd from Ordine from Ordine where Importo > any select Importo where Importo all select Importo from Ordine from Ordine

    applicata alla seguente tabella:

    Cod-Ord Importo 1 50 2 300 3 90

    Si ottiene la seguente tabella di verit:

    Cod-Ord Importo > Any All 1 50 F F 2 300 V V 3 90 V F

    Ordine

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Query nidificate 40

    Esempio: estrarre gli ordini che non contengono il prodotto ABC

    select distinct CodOrd from Ordine where CodOrd all (select CodOrd from Dettaglio where CodProd = ABC)

    oppure:

    select CodOrd from Ordine except select CodOrd from Dettaglio where CodProd = ABC

    max e min con query nidificate Esempio: estrarre lordine con il massimo importo

    select CodOrd from Ordine where Importo = ( select max(Importo) from Ordine)

    oppure

    select CodOrd from Ordine where Importo all ( select Importo from Ordine)

    nel caso di min si utilizza all.

    Precisazioni Le query possono essere nidificati a pi livelli, va per tenuto presente che questa scelta pu porre dei problemi di efficienza (a favore, qualche volta, di una maggiore leggibilit della query stessa) durante la fase di ottimizzazione dei DBMS.

    Le sotto-interrogazioni non possono contenere operatori insiemistici (limitazione comunque non significativa); la semantica delle sotto-interrogazioni la seguente: linterrogazione interna viene eseguita per ciascuna ennupla dellinterrogazione esterna.

    Regole di visibilit a) Non possibile fare riferimenti a variabili definite in blocchi pi interni b) Se un nome di variabile omesso, si assume riferimento alla variabile pi vicina c) In un blocco si pu fare riferimento a variabili definite nello stesso blocco o in blocchi pi esterni.

    Di seguito viene presentato qualche esempio esplicativo

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Query nidificate 41

    Consideriamo le seguenti tabelle:

    Padre Figlio Sergio Franco Luigi Olga Luigi Filippo

    Franco Andrea Franco Aldo

    Madre Figlio Luisa Maria Luisa Luigi Anna Olga Anna Filippo Maria Andrea Maria Aldo

    Ed i seguenti schemi: Persone (Nome, Citt) Impiegato (Nome, Cognome, Dipart) Dipartimento (Nome, Indirizzo, Citt)

    i. Corretto Riferimento ad una variabile di un blocco pi esterno

    select * from Persone where exists ( select * from Paternit where Padre = Nome) or exists ( select * from Maternit where Madre = Nome)

    nelle sotto-interrogazioni si fa riferimento allattributo Nome che per non fa parte dello schema n di Paternit n di Maternit. Per le regole di visibilit si cerca quindi il riferimento pi vicino, dato dalla tabella Persone facente parte della clausola from della query pi esterna.

    ii. Sbagliato Nomi di variabili che fanno riferimento a blocchi dello stesso livello

    select * from Impiegato where Dipart in ( select Nome from Dipartimento D1 where Nome = Produzione) or Dipart in ( select Nome from Dipartimento D2 where D2.Citt = D1.Citt)

    Come gi detto, si pu fare riferimento solo a variabili definite nello stesso blocco o in blocchi pi esterni.

    Paternit

    Maternit

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Manipolazione dei dati 42

    iii. Sbagliato Nomi di variabili che hanno riferimento a blocchi di livello pi interno

    select Nome, Reddito, F.Reddito from Persone where Nome in ( select Padre from Paternit where Figlio in ( select Nome from Persone F where F.Reddito > 20 ))

    MANIPOLAZIONE DEI DATI Possibilit di:

    Inserimento insert Eliminazione delete Modifica update

    di una o pi ennuple di una relazione sulla base di una condizione che pu coinvolgere anche altre relazioni.

    Insert Il comando ha la funzione di inserire i dati nelle tabelle.

    Le colonne (o campi) di destinazione dei valori possono essere o meno dichiarate nel comando. Se non vengono dichiarate, necessario passare al comando un valore per ogni colonna della tabella, rispettando rigorosamente l'ordine delle colonne stesse. Se, invece, le colonne di destinazione vengono dichiarate, possibile indicare le sole colonne per le quali vengono passati dei valori, purch vengano inseriti comunque i valori per tutte le colonne che non possono essere nulle della tabella.

    Di per s il comando insert opera inserendo in tabella una sola riga per volta. possibile, per, inserire pi di una riga in modo automatico passando all'insert una serie di righe (o tuple) risultanti da un comando di select, purch tali righe siano compatibili con le colonne della tabella su cui si inseriscono i dati.

    Le due sintassi del comando sono le seguenti:

    insert into Tabella [Attributo {, Attributo}] values Valore {, Valore}

    insert into Tabella [Attributo {, Attributo}] select

    i. Lordinamento degli attributi (se presente) dei valori significativo, al primo elemento della lista degli attributi associato il primo elemento della lista dei valori, e cos via. Ne segue quindi che le 2 liste devono avere lo stesso numero di elementi.

    ii. Se la lista di attributi omessa, si fa riferimento a tutti gli attributi della relazione rispettando lordine con cui sono stati definiti nello schema

    iii. Se la lista di attributi non contiene tutti gli attributi indicati nello schema della relazione, agli attributi omessi viene assegnato o un valore nullo (sempre che sia ammesso sul quel particolare attributo) o il valore di default.

  • Nicola Bonizzardi [email protected]

    Data Manipulation Language |Manipolazione dei dati 43

    Update Il comando ha la funzione di modificare i dati delle tabelle.

    Il nome di ogni campo che deve essere modificato va dichiarato dopo la parola chiave set e deve essere seguito dal simbolo " = " (uguale) e dal nuovo valore che deve assumere (il valore pu anche corrispondere al risultato di unespressione).

    possibile modificare pi campi della stessa riga in un unico comando update, separandoli l'uno dall'altro con il simbolo " , " (virgola).

    Il comando generico aggiorna tutte le righe della tabella. possibile restringerne il numero applicando la parola chiave aggiuntiva where, che permette di effettuare una selezione delle righe imponendo delle condizioni sui dati presenti prima dell'aggiornamento.

    La sintassi del comando :

    SetCondition set Attributo = (Espressione | select | null | default) update Tabella {SetCondition, } SetCondition [where Condizione]

    Delete Il comando ha la funzione di cancellare i dati delle tabelle.

    Il comando delete (come il comando update) pu operare in modo generico, cancellando tutte le righe della tabella, oppure pu identificare le righe da cancellare mediante la parola chiave where e la condizione (o le condizioni) ad essa associata.

    La sintassi del comando :

    delete from Tabella [where Condizione]

    il comando delete pu causare eliminazione da altre relazioni se i vincoli di integrit referenziale (che verranno trattati nella parte di DDL dellSQL) sono definiti con politiche cascade.

  • Nicola Bonizzardi [email protected]

    Data Definition Language |Definizione di schemi 44

    DATA DEFINITION LANGUAGE definizione dello schema

    DEFINIZIONE DI SCHEMI Uno schema una collezione di oggetti (domini, tabelle, indici, asserzioni, viste e privilegi) caratterizzato da nome e proprietario. un po' come la parte dichiarativa di un programma scritto con un linguaggio imperativo: prima creiamo i tipi, le funzioni e le procedure, poi le utilizziamo nel corpo. La sintassi per la creazione di uno schema la seguente:

    create schema [NomeSchema] [[authorization] Autorizzazione] {DefinizioneElementoSchema}

    Autorizzazione il nome dellutente proprietario dello schema, se mancante si assume che sia lutente che ha eseguito il comando di create schema

    NomeSchema il nome che identifica lo schema, se omesso il nome sar quello dellutente proprietario.

    Rimozione di uno schema drop schema NomeSchema [cascade | restrict ]

    cascade tutti gli oggetti che fanno parte dello schema verranno cancellati

    restrict valore di default, gli oggetti che fanno parte dello schema verranno preservati

    DEFINIZIONE DI TABELLE Una tabella SQL consta di:

    1. Un insieme ordinato di attributi 2. Un insieme (eventualmente vuoto) di vincoli

    Per la creazione di una tabella si utilizzano le seguenti sintassi:

    DefAttr NomeAttributo Dominio [ValoreDefault] [Constraints] create table NomeTabella (DefAttr {, DefAttr} [AltriConstraints])

    create table NomeTabella as select

    NomeTabella pu essere scritto indifferentemente in maiuscolo o in minuscolo, purch rispetti le seguenti regole:

    i. Pu essere formato da lettere e numeri, ma il primo carattere deve essere una lettera;

    ii. Non pu superare i 30 caratteri di lunghezza iii. Non pu avere lo stesso nome di una tabella o vista gi esistente sullo stesso

    utente di database.

  • Nicola Bonizzardi [email protected]

    Data Definition Language |Vincoli intra-relazionali e inter-relazionali 45

    Modificare la struttura di una tabella La modifica della struttura di una tabella avviene per mezzo delloperatore alter table in combinazione con:

    add consente di inserire una nuova colonna su una tabella esistente o di aggiungere delle constraint alle colonne gi presenti

    modify consente di cambiare il tipo di dato e/o la constraint proprio di ogni colonna di una tabella drop consente di eliminare le constraint dalla colonna

    Rimozione di una tabella drop table NomeTabella [cascade | restrict]

    il comando elimina fisicamente la tabella dal database; loperazione irreversibile.

    VINCOLI INTRA-RELAZIONALI E INTER-RELAZIONALI I vincoli, nella sua accezione generale, rappresentano condizioni che devono essere verificate da ogni istanza della base di dati.

    Vincoli intra-relazionali Vincoli che coinvolgono una sola relazione, essi sono:

    not null precisa che lattributo non ammette il valore null unique permette la definizione di chiave candidata, la sua sintassi la seguente:

    un solo attributo: si usa la parola chiave unique dopo il dominio dellattributo pi attributi: unique(Attributo {, Attributo}) nella clausola AltriConstraints.

    primary key definisce la chiave primaria (una per ogni tabella), implicito il vincolo not null. Stessa sintassi di unique.

    check approfondito successivamente

    Esempi di vincoli intra-relazionali

    A. unicit sulla combinazione Nome, Cognome

    Nome char(20) not null, Cognome char(20) not null, unque(Nome, Cognome)

    B. unicit sia per lattributo Nome che per lattributo Cognome

    Nome char(20) not null unique, Cognome char(20) non null unique

  • Nicola Bonizzardi [email protected]

    Data Definition Language |Vincoli inter-relazioni e vincoli di integrit referenziale 46

    Esempi di creazione di tabelle

    1. create table Studente (

    Matr char(6) primary key, Nome varchar(30) not null, Citta varchar(20), C-Dip char(3) )

    2. create table Esame create table Corso ( ( Matr char(6), C-Corso char(6) primary key, C-Corso char(6), Titolo varchar(30) not null, Data date not null, Docente varchar(20) Voto integer not null, ) primary key (Matr, C-Corso) )

    VINCOLI INTER-RELAZIONI E VINCOLI DI INTEGRIT REFERENZIALE Il vincolo di integrit referenziale esprime un legame tra i valori di un attributo della tabella corrente (A) e i valori di un attributo di un'altra tabella (B) che in relazione alla tabella A. Il vincolo impone che per ogni riga della tabella A il valore dell'attributo specificato, se diverso dal valore null, sia presente nellinsieme dei valori del corrispondente attributo della tabella B.

    I vincoli inter-relazionali sono:

    check approfondito successivamente integrit referenziale un solo attributo: si usa la parola chiave references dopo il dominio

    pi attributi: foreign key (Attributo {, Attributo}) references

    possibile associare anche delle politiche di reazione alle violazioni dei vincoli di integrit referenziale.

    Reazioni in violazione dei vincoli di integrit referenziale Si considerino le seguenti tabelle:

    Matr 123 415 702

    Matr 123 123 702

    Cosa accadrebbe se la riga dello studente con matricola 123 venisse eliminata? O se venisse semplicemente modificato il valore della matricola? In entrambi i casi verrebbero a crearsi degli orfani (tuple che restano prive del riferimento nella tabella referenziata a causa di cancellazioni o modifiche) nella tabella Esame.

    Esame

    Studente

  • Nicola Bonizzardi [email protected]

    Data Definition Language |Vincoli inter-relazioni e vincoli di integrit referenziale 47

    In SQL sono previste delle reazioni che operano sulla tabella (Esame) che referenzia attributi di unaltra tabella (Studente), esse sono:

    cascade propaga la modifica o la cancellazione set null setta a null lattributo che fa riferimento set default assegna il valore di default allattributo no action impedisce che la modifica o cancellazione possa avvenire

    la sintassi degli eventi la seguente:

    on (delete | update) (cascade | set null | set default | no action)

    in considerazione alle tabelle di esempio Studente ed Esame:

    REAZIONE ON DELETE ON UPDATE

    cascade si cancellano gli esami dello studente si modifica la matricola degli esami dello studente

    set null si pone a null la matricola dei relativi esami si pone a null la matricola dei relativi esami

    set default si pone al valore di default la matricola dei relativi esami si pone al valore di default la matricola dei relativi esami

    no action si impedisce la cancellazione dello studente si impedisce la modifica della matricola dello studente

    Esempio: create table Esame ( Matr char(6), C-Corso char(6), Data date not null, Voto integer not null, primary key (Matr, C-Corso) foreign key Matr references Studente on delete cascade on update cascade foreign key C-Corso references Corso on delete no action on update no action )

  • Nicola Bonizzardi [email protected]

    Data Definition Language |Vincoli inter-relazioni e vincoli di integrit referenziale 48

    Facendo riferimento al codice SQL per la creazione della tabella Esame, due esempi di:

    Matr 123 415 702

    A. istanza non corretta

    Matr C-Corso Data Voto 123 1 07-09-97 30 123 2 08-01-98 28 123 2 01-08-97 28 702 2 07-09-97 20 702 1 null null 714 1 07-09-97 28

    B. istanza corretta

    Matr C-Corso Data Voto 123 1 07-09-97 30 123 2 08-01-98 28 702 2 07-09-97 20

    Studente

    Esame

    Esame

  • Nicola Bonizzardi [email protected]

    Data Definition Language |Viste 49

    VISTE Le viste generalmente vengono utilizzate per semplificare le query. Se il database realmente relazionale, leggere un insieme di dati avente un significato potrebbe essere complesso, poich potrebbe richiedere eccessive join fra tabelle; con una vista possibile semplificare molto la stesura di query che leggono le informazioni.

    Un altro scopo delle viste potrebbe essere quello di semplificare o potenziare la gestione dei permessi. Ad esempio si potrebbe creare una query che legge solo alcuni dati da una tabella (tramite la clausola where), per poi assegnare il permesso in lettura ad un certo utente sulla vista, ma non sulla tabella di base. In questo modo l'utente non vedr i dati che non vengono estratti dalla vista.

    Le viste vengono classificate in:

    semplici selezione e proiezione su una sola tabella composte

    La loro sintassi la seguente:

    create view NomeVista [Attributo {, Attributo} as SelectSQL [with [local | cascaded] check option]

    Esempio di vista semplice: ordini di importo superiore a 10.000,00

    create view OrdiniPrincipali as select * from Ordine where Importo > 10000

    1 3 01-06-96 50000 4 1 01-07-97 12000 6 3 03-09-97 27000

    Le viste in SQL possono contenere nella definizione altre viste precedentemente definite, ma non vi pu essere mutua dipendenza (non ammessa ricorsione). Oltre ad essere usate per formulare query complesse (le viste decompongono il problema e producono una soluzione pi leggibile), talvolta sono necessarie per esprimere:

    a) query che combinano e nidificano diversi operatori aggregati b) query che fanno un uso sofisticato delloperatore di unione

    Esempio: estrarre il cliente che ha generato il massimo fatturato sfruttando le viste

    create view CliFatt (CodCli, FattTotale) as select CodCli, sum(Importo) from Ordine group by CodCli select CodCli from CliFatt where FattTotale = (select max(FattTotale) from CliFatt)

    Ordine

  • Nicola Bonizzardi [email protected]

    Data Definition Language |Modifiche degli schemi 50

    MODIFICHE DEGLI SCHEMI Le modifiche degli schemi sono necessarie ed indispensabili per garantire levoluzione della base di dati a fronte di nuove esigenze.

    I comandi alter e drop, gi presentati per gli schemi e per le tabelle, presentano la seguente sintassi:

    alter ObjectSQL (ClausolaAdd | ClausolaModify | ClausolaDrop)

    drop ObjectSQL NomeComponente [restrict | cascade]

    CATALOGHI RELAZIONALI Il catalogo contiene il dizionario dei dati (data dictionary), ovvero la descrizione della struttura dei dati contenuti nel database. Basato su struttura relazionale, nello standard SQL-2 organizzato su due livelli:

    1. Definition_Schema composto da tabelle, non vincolante 2. Information_Schema composto da viste, vincolante

  • Nicola Bonizzardi [email protected]

    Data Control Language |Controllo dellaccesso 51

    DATA CONTROL LANGUAGE aggiunta e rimozioni delle autorizzazioni

    CONTROLLO DELLACCESSO

    Privatezza Protezione selettiva della base di dati in modo da garantire laccesso solo agli utenti autorizzati

    Meccanismi di identificazione Mediante parola chiave o password quando si collega al sistema informatico e/o quando accede al DBMS.

    AUTORIZZAZIONI Ogni componente dello schema pu essere protetto (tabelle, attributi, viste, domini, ); i privilegi di ogni risorsa vengono assegnati dal rispettivo proprietario. Esiste un amministratore di sistema predefinito chiamato _system che ha pieno accesso a tutte le risorse.

    Le parti che caratterizzano un privilegio sono:

    1. La risorsa 2. Lutente che concede il privilegio 3. Lutente che riceve il privilegio 4. Lazione che viene consentita sulla risorsa 5. La possibilit di passare il privilegio ad altri utenti

    I tipi di privilegi offerti da SQL sono:

    1. insert per inserire un nuovo oggetto nella risorsa 2. update per modifica il contenuto della risorsa 3. delete per rimuovere un oggetto dalla risorsa 4. select per accedere al contenuto della risorsa in una query 5. references per costruire un vincolo di integrit referenziale che coinvolge la risorsa 6. usage per usare la risorsa in una definizione di schema

    prevista la parola chiave all privileges che li riassume tutti

    Concessione di un privilegio grant (Privilegio {, Privilegio} | all privileges)

    on Risorsa {, Risorsa} to (public |Utente {, Utente}) [with grant option]

    public indica che il privilegio deve essere assegnato a tutti gli utenti, compresi quelli che verranno creati in seguito e ai quali non verr espressamente negato.

    with grant option specifica che lutente che riceve i privilegi avr la possibilit di assegnare gli stessi anche ad altri utenti, o eventualmente revocarli.

  • Nicola Bonizzardi [email protected]

    Data Control Language |Autorizzazioni 52

    Revoca di un privilegio revoke [grant option for] (Privilegio {, Privilegio} | all privileges)

    on Risorsa {, Risorsa} from (public | Utente {, Utente}) (restrict | cascade)

    grant option for specifica che non si intende eliminare il privilegio in s, ma il diritto di un certo utente di accordare o revocare tale permesso ad altri

    public indica che il permesso viene revocato a tutti gli utenti, compresi quelli che verranno creati in futuro e ai quali non verr espressamente garantito

    cascade indica che bisogna eliminare gli oggetti ai quali nessun utente ha pi il permesso di acceder; restrict (che il valore di default) indica che tali oggetti devono essere preservati.

  • Nicola Bonizzardi [email protected]

    Progettazione logica |Introduzione 53

    PROGETTAZIONE LOGICA dal diagramma ER allo schema logico

    INTRODUZIONE

    Lo schema ER descrive un dominio applicativo ad un dato livello di astrazione e risulta particolarmente utile per:

    a) Fornire una descrizione sintetica e visiva b) Rappresentare buona parte della semantica dellapplicazione c) Scambiare informazioni sullattivit progettuale tra i membri del team di progetto e mantenere una

    documentazione

    La fase di progettazione logica si prefigge come obbiettivo quello di costruire uno schema logico in grado di descrivere in modo corretto ed efficiente tutte le informazioni contenute nello schema ER.

    Prima di procedere con la traduzione necessario che lo schema ER venga ristrutturato per:

    Semplificare lo schema, rimuovendo costrutti non traducibili nel modello logico Ottimizzare il progetto, in termini del carico di lavoro previsto (dimensione dei dati, costo delle

    operazioni, )

    Diverse alternative di traduzione i. Le propriet logiche sono comunque primarie rispetto ai motivi di efficienza

    ii. Tenere sulla stessa identit informazioni che verranno di frequente consultate insieme iii. Tenere su entit separate informazioni che verranno consultate separatemene iv. Limitare lincidenza dei valori nulli per attributi opzionali

    dominio applicativo

    raccola requisiti

    progettazione concettuale

    schema concettuale (ER)

    progettazione logica

    schema logico (SQL DDL)

    DBMS (SQL DDL, SQL DML)

    DB

  • Nicola Bonizzardi [email protected]

    Progettazione logica |Fasi del progetto logico 54

    FASI DEL PROGETTO LOGICO 1. Eliminazione delle gerarchie ISA 2. Selezione delle chiavi primarie, eliminazione delle identificazioni esterne 3. Normalizzazione degli attributi composti 4. Traduzione di entit e associazioni in schemi di relazioni 5. Verifica di normalizzazione

    ELIMINAZIONE DELLE GERARCHIE

    Il modello relazionale non rappresenta le gerarchie, le gerarchie sono sostituite da entit e associazioni:

    a) Mantenimento delle entit con associazioni b) Collasso verso lalto c) Collasso verso il basso

    Lapplicabilit e la convenienza delle soluzioni dipendono dalle propriet di copertura (t, p, e, o) e dalle operazioni previste.

    E K A

    E1

    A1

    E2

    A2

  • Nicola Bonizzardi [email protected]

    Progettazione logica |Eliminazione delle gerarchie 55

    Mantenimento delle entit con associazioni

    Soluzione che sempre possibile, indipendentemente dalla copertura

    Tutte le entit vengono mantenute Le entit figlie sono in associazione con lentit padre Le entit figlie sono identificate esternamente tramite lassociazione

    Collasso verso lalto

    t, e selettore a N valori, quante sono le sotto-entit

    p,e selettore a N+1 valori, il valore in pi serve per le istanze che non appartengono ad alcuna sotto-entit.

    o occorrono tanti selettori booleani quante sono le sotto-entit, sel_i vero per ogni istanza di E che appartiene ad E_i. Se la copertura parziale i selettori possono essere tutti falsi, in caso di copertura totale almeno 1 deve essere vero. Le associazioni connesse alle sotto-entit si trasportano su E, le eventuali cardinalit minime diventano 0.

    E K A

    E1

    A1

    (0,1)

    (1,1)

    E2

    A2

    (0,1)

    (1,1)

    E K

    A

    A1 (0,1)

    A2 (0,1)

    selettore

    E K

    A selettore_i

    selettore_1

    (0,n)

  • Nicola Bonizzardi [email protected]

    Progettazione logica |Scelta della chiave primaria 56

    Collasso verso il basso

    Si elimina lentit padre trasferendone gli attributi su tutte le entit figlie

    Unassociazione del padre replicata tante volte quante sono le entit figlie La soluzione interessante in presenza di molti attributi di specializzazione (con il collasso verso

    lalto si avrebbe un eccesso di valori nulli) Favorisce le operazioni in cui si accede separatamente alle entit figlie

    Limiti di applicabilit:

    Se la copertura parziale il collasso verso il basso non applicabile (dove mettere le istanze di E che non sono n di E1 n di E2?)

    Se la copertura overlapping si introduce ridondanza: per unistanza presente sia in E1 che in E2 si rappresentano due volte gli attributi di E.

    SCELTA DELLA CHIAVE PRIMARIA necessario che tra i diversi identificatori di unentit venga designata una chiave primaria, i criteri euristici di scelta sono:

    1. Scegliere la chiave che usata pi frequentemente per accedere allunit 2. Preferire chiavi semplici a chiave composte, interne piuttosto che esterne.

    E1

    K A A1

    E2

    K A A2

  • Nicola Bonizzardi [email protected]

    Progettazione logica |Identificatori esterni 57

    IDENTIFICATORI ESTERNI

    Una componente di identificazione esterna di unentit E2 da una entit E1 attraverso unassociazione R comporta il trasporto della chiave primaria di E1 su E2.

    In questo modo lassociazione rappresentata attraverso la chiave e pu essere eliminata. La chiave trasportata chiave esterna, in presenza di identificazioni in cascata necessario iniziare la propagazione dallentit che non ha identificazioni esterne.

    ATTRIBUTI COMPOSTI Le relazioni, per definizione, non possono contenere attributi composti ma solamente attributi atomici.

    Due possibili soluzioni:

    1. Eliminare lattributo composto e considerare i suoi componenti come attributi semplici (sullentit Dipendente verranno aggiunti gli attributi via, num, citt), in questo modo si perde la visiona unitaria ma si mantiene larticolazione dei componenti

    2. Eliminare i componenti e considerare lattributo come semplice (nellesempio si creerebbe un solo attributo con nome indirizzo sullentit Dipendente), in questo modo lo schema risulta semplificato, perdendo parte dei dettagli.

    Stabilimento codice

    denominazione

    lavora

    Dipendente matr

    cognome

    (1,n)

    (1,1)

    [E1]

    [E2]

    [R]

    Stabilimento codice

    denominazione

    Dipendente matr

    cognome

    codice

    Dipendente cognome via

    cf

    num

    citt

  • Nicola Bonizzardi [email protected]

    Progettazione logica |Attributi ripetuti 58

    ATTRIBUTI RIPETUTI La definizione di relazione impone che, se unentit E ha un attributo A multi-valore, si crei una nuova entit che contenga lattributo e sia collegata ad E.

    A. Un valore pu comparire una sola volta nella ripetizione La nuova entit ha come identificatore la composizione dellidentificatore di E pi lattributo A

    B. Un valore pu comparire pi volte nella ripetizione La nuova entit ha come identificatore la composizione dellidentificatore di E con un valore identificante sintetico (ad esempio una numerazione progressiva)

    Dipendente cognome

    cf Qualifica

    cf codice descr

    (1,1) (0,n)

    Partita casa data

    Marcatore data casa n_ordine

    (1,1) (0,n)

    ospiti

    marcatore

  • Nicola Bonizzardi [email protected]

    Progettazione logica |Traduzione standard 59

    TRADUZIONE STANDARD Ogni entit tradotta in una relazione con gli stessi attributi Ogni associazione tradotta in una relazione con gli stessi attributi, ai quali vanno aggiunti gli

    identificatori di tutte le entit che essa collega.

    ALTRE TRADUZIONI

    Seppur la traduzione standard sempre possibile (ed lunica possibilit per le associazioni molti-a-molti), sono previste altre forme di traduzione per le cardinalit uno-a-uno ed uno-a-molti.

    Caratteristiche delle altre forme di traduzione:

    i. Fondono in una stessa relazione entit ed associazioni ii. Danno origine ad un minor numero di relazioni e generano quindi uno schema pi semplice

    iii. Richiedono un minor numero di join per la navigazione attraverso unassociazione iv. Penalizzano le operazioni che consultano soltanto gli attributi di unentit che stata fusa

    Associazione binaria 1 a N E1 (1,1) E2 (1,n)

    E1 viene fusa con lassociazione, ottenendo la seguente soluzione a 2 relazioni E1 (K1, A1, K2, AR, BR) E2 (K2, A2) (soluzione preferibile alla traduzione standard)

    E1 (0,1) E2 (1,n) La soluzione a 2 relazioni avrebbe valori nulli in K2, AR, BR per le istanze di E1 che non partecipano allassociazione, per questo motivo si preferisce utilizzare la traduzione standard.

    Nota:

    Nel caso di associazioni binarie 1 a N si nota facilmente che ad un dato valore di K1 corrisponde uno ed un solo valore di K2. Si pu quindi dire che K1 implica K2 (o che esiste una dipendenza funzionale da K1 a K2). Questa dipendenza implica che nella traduzione standard la chiave di relazione, che traduce lassociazione, riducibile a K1.

    E1 (K1, B1) E2 (K2, A2) R (K1, K2, AR, BR)

    E1 K1

    A1

    R

    E2

    (1,n)

    (1,n) K2

    A2

    BR

    AR E1 (K1, A1)

    E2 (K2, A2)

    R (K1, K2, AR, BR)

  • Nicola Bonizzardi [email protected]

    Progettazione logica |Altre traduzioni 60

    Associazione binaria 1 a 1 E1 (1,1) E2 (1,1)

    (Associazione obbligatoria per entrambe le entit) La traduzione avviene con una sola relazione:

    E12 (K1, A1, K2, A2, AR, BR) La chiave della relazione pu essere indifferentemente K1 o K2 (si sceglie quella pi significativa)

    Resta comunque possibile effettuare la traduzione in 3 ed in 2 relazioni, come visto in precedenza.