Upload
alessandro-congedo
View
95
Download
19
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.