Sei sulla pagina 1di 48

2010-2011

Lezioni di Basi di dati

INTRODUZIONE
Eugenio Di Sciascio disciascio@poliba.it http://sisinflab.poliba.it/disciascio Esame: prova orale Basi di dati Come imparare a fare diverse cose: Modellare una base di dati dal punto di vista puramente concettuale. DEF: Collezione strutturata di dati memorizzata su supporto di memoria stabile, che spesso gode anche di particolari propriet tali da rendere il sistema transazionale. Ad una base di dati informatizzata si associano tecniche per il recupero efficiente e selettivo di porzioni dei dati memorizzati. Ci concentreremo su basi di dati strutturati. Esistono anche, per completezza, sistemi per la gestione di dati non strutturati. Impareremo a modellare una base di dati: 1) Concettualmente 2) secondo un modello logico implementabile direttamente allinterno di un DBMS (Data Base Management System): le basi di dati vengono informatizzate allinterno di sistemi informatici. Es. Oracle fa DBMS (vi sono le nostre carriere studentesche) Microsoft SQL Server IBM DB2 MySQL & PostgreSQL sono alternative gratuite. In unimplementazione di un database realizziamo la struttura per metterci dentro i dati e recuperarli dopo, selettivamente. Lo scopo dellimmagazzinamento recuperare in un secondo momento in maniera efficiente e selettiva quei dati o parte di essi. Impareremo quindi dei linguaggi. Lalgebra relazionale alla base dellinterrogazione dei dati. Ne daremo un breve accenno. Ci concentreremo sul linguaggio SQL (chiamato anche Sequel); il suo acronimo sta per Structured Query Language 1, ossia Linguaggio di interrogazione strutturata. La prima caratteristica di questo linguaggio il suo essere strutturato. DEE 3 piano stanza 33 int 3641

Originariamente era SEQUEL (Structured English Query Language) poi modificato per motivi di copyright

Esistono molti linguaggi (C++, Basic, Java). SQL un linguaggio totalmente standardizzato. Avendo a che fare con i database, nel 99% dei casi si tratta di SQL utilizzato in tutti i DBMS. La struttura base del linguaggio stata definita una volta per tutte dai consorzi, per cui totalmente standardizzato. Per come stato definito, sembra si tratti solo di un linguaggio di interrogazione, ma SQL anche un linguaggio di modellazione: Interrogazione SQL: Modellazione SQL non precisamente un linguaggio di programmazione, perch di per s non un linguaggio Turing-Completo; infatti non provvisto di IF. IF il costrutto condizionale alla base di tutta linformatica: Teorema di Bhm-Jacopini: qualunque algoritmo pu essere implementato utilizzando tre sole strutture, la sequenza, la selezione ed il ciclo (iterazione), da applicare ricorsivamente alla composizione di istruzioni elementari. Sequenza esegui il comando successivo Selezione IF THEN ELSE Iterazione fare qualcosa un certo numero di volte.

Lezioni di Basi di dati

2010-2011

Combinando opportunamente queste tre strutture posso fare qualsiasi algoritmo. Il teorema potrebbe essere ancora pi ristretto (restrittivo), perch literazione schematizzabile anche come ri-esecuzione:

Finch E verificato, continua a iterare; quando non lo pi, esegui il comando successivo (Esci). Qualsiasi comando, anche del cell, alla fine si riconduce a una selezione. LSQL inoltre un linguaggio DICHIARATIVO e non procedurale. Un linguaggio procedurale consiste in una serie di istruzioni atte ad esplicitare i passi necessari allottenimento di un risultato (esecuzione di un compito).

2010-2011

Un linguaggio dichiarativo mira invece alla dichiarazione di ci che si vuole ottenere come risultato. Es: Trovami [la penna]. Ci implica che ci sia qualcun altro che scriva il codice per trovare ci che si cerca. Dati strutturati Le basi di dati sono per antonomasia basi di dati strutturati. Sono strutturati se hanno naturalmente una propria organizzazione che sia assimilabile a una struttura tabellare. Es: una fattura: 1a pagina: dati strutturati tabella 2a pagina: dati non strutturati. In una tabella i dati hanno inerentemente una loro struttura. Si riesce immediatamente a dare una semantica a ci che si legge. In altre parole, il significato attaccato ai valori. In un dato non strutturato ho bisogno del contesto per capire il significato dei valori. I dati strutturati hanno sempre avuto successo nella storia perch pi facili da gestire. Il computer non in grado di comprendere il testo. Tutto ci che ha a che fare con dati non strutturati necessariamente probabilistico. Tutto ci che ha a che fare con dati strutturati tendenzialmente ESATTO. Concetto di rilevanza di una risorsa 2 rispetto a un bisogno informativo: IF in informatica: IF-THEN-ELSE non un concetto semplice da definire Immagazzinamento di info non strutturate si presenta il problema di fornire un digest, ossia una descrizione sintetica che identifichi lelemento. Bisogno informativo alla stessa persona, in istanti diversi, con gli stessi dati di partenza corrispondono bisogni informativi differenti. Il problema complesso. Un motore di ricerca, per antonomasia Google, contiene database, ma la nostra interfaccia con dati non strutturati. Il web basato su dati non strutturati. La ricerca si basa sulla Social Wisdom 3. Effettuando una ricerca si ottengono risultati in un ordine dovuto al fatto che Google implementa un meccanismo che si chiama Page Rank. I suoi ideatori (Brin & Page) erano convinti che le pagine su cui puntava un maggior numero di link erano le pi importanti e meritevoli (Teoria delle reti). Google ha fatto al sua fortuna su un meccanismo di raccomandazione (in senso anglosassone, quindi non negativo). Ogni persona ha una sua credibilit ogni volta che fa un endorsement cede parte della sua credibilit. Limportante non tanto il contenuto del documento, ma chi lo raccomanda. La gente su Google implicitamente vota quando linka determinati siti, inserisce una citazione. E questo voto non di pari valore per chiunque, ma tanto pi importante quanto pi lo chi lo sta esprimendo.
2 3

Lezioni di Basi di dati

dato, informazione, pagina di un libro Ossia saggezza sociale Alla base di Wikipedia c lidea di arrivare a qualcosa di condiviso da tutti.

Page e Brin hanno quindi inventato lidea di ranking dei siti (in un certo modo analoga a quella delle citazioni di articoli nella comunit scientifica). Se un autore molto citato vuol dire che il suo lavoro ha un valore. Citare equivale a linkare, ossia a puntare. Maggiori citazioni maggiore credibilit. C una saggezza sociale, come anticipato, perch la gente punta pi spesso a ci cui pi interessata. (Concetto di Google Bomb) Se un sufficiente numero di persone punta a una certa risorsa (ad esempio la pagina web di un pollitico) indicando nel link la parola idiota, possibile arrivare a ottenere quella pagina come prima risorsa, se nel motore di ricerca si inserisce la parola idiota. La branca dellinformatica di cui ci stiamo occupando si chiama Information Retrieval, ossia un sistema che riporta qualcosa quando la si cerca. Lezione 31/03/2011 Lasciamo perdere PageRank Appunti maniacali Il modello entit-relazione di Chen un modello concettuale di dati. molto diffuso data la sua notevole immediatezza e semplicit. Fornisce una serie di strutture (grafiche ed intuitive) atte a descrivere la realt di interesse (detta mondo o dominio) in una maniera facile da comprendere (tramite schemi concettuali espliciti, comodi, pratici e immediati) e che prescinde dai criteri di organizzazione dei dati nei calcolatori. La modellazione concettuale infatti ha lo scopo di rappresentare le specifiche informali della realt (dominio) dinteresse in maniera completa, senza preoccuparsi delle modalit con le quali tale contenuto informativo della base di dati che si sta progettando verr codificato in un sistema reale, n dellefficienza dei programmi applicativi che faranno uso di queste informazioni. Nella progettazione E-R il dominio informativo dinteresse viene modellato assumendo che ci che non interessa, semplicemente non esiste. Pertanto si parla di mondo chiuso o di minimondo chiuso per indicare tale dominio. Entit: descrive un concetto tangibile o non tangibile del mondo reale; una entit una classe di oggetti che hanno propriet comuni ed esistenza autonoma; tali oggetti sono detti istanze (oppure occorrenze) di unentit. Esempio di entit di unapplicazione universitaria. - Gaetano Pavone una particolare istanza dellentit studente; - Analisi e Fisica sono due istanze dellentit esame; - Ing. informatica una particolare istanza dellentit CdL.

Lezioni di Basi di dati

2010-2011

2010-2011

Attributo: particolare caratteristica di unentit; gli attributi descrivono propriet elementari e di interesse delle entit (o anche di relazioni). Ad ogni attributo si associa un dominio,ovvero un insieme di valori ammissibili per quellattributo; si assume che un attributo sia atomico, cio che a ogni istanza di entit corrisponda uno e un solo valore di un certo attributo. N.B. Nelle basi di dati che andremo a modellare esistono anche attributi non atomici. Poi si vedr come trattarli. Esistono inoltre attributi composti: particolari attributi formati da pi parti, eventualmente appartenenti a domini diversi, caratterizzanti lattributo stesso (sono definiti per un recupero dati intelligente). Indirizzo, ad es., un attributo composto dagli attributi via e citt, per i quali il dominio linsieme delle stringhe di n caratteri, e civico, che un numero e avr chiaramente un dominio differente. Attributi multi valore: a ciascuna istanza di entit pu essere associato un numero di valori di un attributo non definito e non definibile a priori; uno studente pu avere pi numeri telefonici, pertanto a una particolare istanza di studente non sar associabile solo un numero telefonico, ma pi valori numerici del medesimo attributo (telefono cell). Attributi derivati o derivabili: particolare attributo i cui valori possono essere derivati da altri attributi della medesima istanza. Sono attributi i cui valori variano nel tempo con una alta frequenza, per cui non conviene aggiornarli manualmente tramite laggiornamento dellintera base di dati. Il classico esempio di attributo derivato let, derivabile dallattributo data di nascita. Un altro esempio lattributo n_studenti, derivabile da un conteggio delle istanze. Business rules: (regole aziendali o di comportamento) descrizioni testuali associate ai modelli concettuali in cui si esplicitano le modalit di derivazione degli attributi, la descrizione di un concetto rilevante o di un vincolo di integrit sui dati dellapplicazione. Ciascuna istanza univocamente individuabile sulla base dei valori di attributo ad essa associati; ogni istanza unica, cio esiste almeno un valore di attributo che la distingue da unaltra istanza. Una istanza di entit pu non avere un valore di attributo associato alla entit cui appartiene perch tale valore non conosciuto o non applicabile; in tal caso si associa allistanza il valore speciale NULL per quel particolare attributo. Pertanto tutti i possibili valori di un generico attributo saranno dati dal dominio { } {}.

Lezioni di Basi di dati

Se si certi che ogni istanza univocamente individuabile, possibile sulla base della conoscenza dei domini degli attributi di unentit, individuare un sottoinsieme degli attributi di unentit tali da garantire lunicit di ogni istanza di quellentit; tale sottoinsieme si dice superchiave. Le superchiavi di unentit possono essere molteplici; sicuramente linsieme di tutti gli attributi di unentit una superchiave di quella entit. Chiave candidata: una superchiave che gode della propriet di minimalit, cio che sia tale da non poter sottrarre alcun attributo dal sottoinsieme senza che la propriet di unicit cada. Naturalmente una chiave non pu contenere attributi con valore null, perch ci renderebbe impossibile capire se due insiemi di attributi si riferiscano alla stessa istanza oppure a due istanza differenti. In genere unentit pu avere pi chiavi candidate; si dice chiave primaria quella chiave scelta tra le chiavi candidate (un cui non vi sono attributi che possono assumere valore null). In generale la chiave primaria una chiave candidata opportunamente scelta.

Lezioni di Basi di dati

2010-2011

2010-2011

APPUNTI CRISTINA

Lezioni di Basi di dati

MODELLAZIONE CONCETTUALE

Studieremo una modellazione totalmente concettuale, a partire dalla modellazione pi diffusa: il modello Entit-Relazione (Entity-Relationship), introdotto da CHEN nel 1975. Viene usato per interfacciare linformatico con il committente. SI realizza un database per qualche utente, per cui necessario poter spiegare allutente come funzioner il database. importante che sia immediatamente comprensibile, quindi grafico. Entit: un insieme matematico e corrisponde a una classe di concetti tangibili o intangibili del mondo reale, che posso individuare allinterno del dominio che voglio modellare in termini di organizzazione di dati.

Cercher ad es. nel dominio dei dischi, un insieme di individui (particolari dischi) tangibili. La fattura invece un concetto intangibile. Quando individuo un insieme ne determino anche delle caratteristiche qualitative che chiamo attributi, che sono comuni agli individui appartenenti alla stessa classe, ma assumono valore diverso per ciascun individuo. Es. Colore_dei_capelli un attributo Castano, nero, biondo sono valori che lattributo pu assumere. Quando individuo una caratteristica, determino anche un dominio dei dati insieme finito di valori che possono essere assunti come insieme di valori ammissibili. Dal punto di vista informatico, noto il dominio, si individuano linsieme dei valori e linsieme delle operazioni ammissibili su quei valori. Es. Caratteristica income annuo Tipo di dato numero Operazioni eseguibili sul dominio somma, %, prodotto Lentit si rappresenta con un rettangolo al cui interno c letichetta che denomina lentit stessa. Entit Insieme Caratteristiche associate allentit.

Lezioni di Basi di dati

2010-2011

Lattributo individuato attraverso un segmento che parte dalletichetta dellentit, un pallino e letichetta relativa allattributo. N.B. Lo spazio non viene usato nei nomi, perch informaticamente si configurerebbe come %20. Si usa allora lunderscore (citt_nascita) oppure si scrivono le singole parole senza soluzione di continuit (corsodistudi). N.B. 2 Notare che tra gli attributi dellentit studente non abbiamo scritto, ad es, colore dei capelli, perch non rilevante. Si introduce nella base di dati solo ci che rilevante. Ciascun attributo avr un suo costo: innanzitutto occuper spazio, spesso potrebbe non essere (?). Se, al contrario, non abbiamo inserito degli attributi che ci servono, il costo necessario dopo per la modifica notevole!. Bisogna trovare un compromesso tra quel che serve, quel che potrebbe servire e quello di cui si pu fare a meno. Gli attributi per definizione del modello sono tendenzialmente atomici, non divisibili, e ad ogni istanza associato un solo valore per ogni attributo. Citt_di_nascita una sola. Esistono per due classi di attributi che non rispettano questa definizione. Ad esempio uno studente pu avere pi numeri di telefono. Vi pu quindi essere un numero non definito a priori di valori per una determinata istanza. Il fatto che non sappia a priori il numero di valori vuol dire che non posso associare una definizione a quellistanza. Si definiscono quindi gli attributi multivalore (rappresentati da un doppio pallino). Esistono inoltre gli attributi composti, attributi che hanno una propria struttura (esempio classico: data_di_nascita si scompone in dd, mm, yyyy; oppure indirizzo si scompone in citt, via, civico). Tali attributi forniscono ununica informazione, ma costituita da pip parti. Se non volessimo strutturare i dati potremmo fissare un rifermimento e contare da quel punto in poi. Ad esempio la data di nascita pu essere espressa come numero di giorni d.C. Ci sarebbe per poco pratico.

2010-2011

Non si in grado di individuare strutturalmente dei dati che sono di per s strutturati. (???). Lattributo et importante ma cambia in continuazione un attributo derivabile (o calcolabile) dallattributo data_di_nascita per sottrazione. Tali attributi si indicano con linee tratteggiate. Per ricavare un attributo derivabile si utilizzano le cosiddette business rules (regole di comportamento, letteralmente regole aziendali), che caratterizzano attributi che non sono esprimibili con il modello concettuale. Es. et un attributo calcolabile come Today() - data_di_nascita. La business rule pu essere scritta in linguaggio naturale ma strutturato. Lo stesso discorso vale, facendo un altro esempio, per il numero di studenti iscritti a un certo corso di laurea. Se manca il valore di un attributo o parte di esso (ad es. il numero civico in una strada la cui urbanizzazione non ancora completa), si pone il problema di rappresentare la non conoscenza / non applicabilit di tale valore. Il vuoto esplicito si indica con null, e pu voler dire: sconosciuto valore esistente, ma non noto (es.: cilindrata di un automobile) inapplicabile il civico pu non esistere. Lezione 07/04/2011

Lezioni di Basi di dati

ENTIT
ENTIT: insieme di istanza caratterizzate da valori (attributi). Dalla definizione di insieme si garantisce che ogni elemento matematico sia singolarmente identificabile. Ne consegue che ogni istanza di unentit sia identificabile univocamente. Poich caratterizziamo le istanze attraverso valori associati ad ogni caratteristica, non esiste una coppia di istanze che abbia i medesimi valori su tutti gli attributi. Si definisce superchiave un sottoinsieme degli attributi di una entit, eventualmente coincidente con lintero insieme degli attributi, in grado di garantire lunicit di unistanza. Per definizione di insieme, sono sicuro che nel tempo non avr mai due istanze coincidenti. Per garantire questo posso considerare un sottoinsieme di attributi, i quali gi da soli individuano una sola istanza. Se sono in grado di definire questo sottoinsieme, lo chiamo superchiave. Linsieme di tutti gli attributi ovviamente una superchiave, detta superchiave banale. Un insieme pu contenere anche pi superchiavi. Poniamoci lobiettivo di individuare delle superchiavi minime, cio tali da costituire un sottoinsieme di attributi che goda della propriet di unicit ma anche di minimalit non

si pu eliminare neanche un attributo da questo sottoinsieme senza che lunicit venga a mancare. O, in altre parole, non c ridondanza. Una chiave che soddisfi i requisiti di unicit e di minimalit detta chiave candidata. Essa un sottoinsieme che contiene attributi necessari e sufficienti ad individuare univocamente unistanza. Lindividuazione di una superchiave basata sulla semantica degli attributi e del contesto. Si definisce una chiave candidata sulla base dellosservazione del dominio dei valori.

Lezioni di Basi di dati

2010-2011

La terna matricola-nome-cognome una superchiave. Anche la coppia CF-cognome una superchiave, ma non una chiave candidata perch, pur togliendo cognome, CF funziona ancora come identificativo univoco. CF una chiave candidata. Osserviamo per:

Qual la chiave candidata dellentit Esame sostenuto? Per costruzione, linsieme degli attributi sempre una superchiave. Lattributo matricola individua univocamente uno studente, ma non un esame, altrimenti lo studente potrebbe sostenere solo un esame. Se scegliessimo la coppia matricola, cod_esame, potremmo identificare lentit Esame superato, ma non Esame sostenuto! La terna fondamentale quindi: cod_esame, matricola, data_esame. Tra le possibili chiavi candidate, se ne sceglie una, che viene quindi detta chiave primaria.

10

2010-2011

Il fatto che un attributo sia chiave in unentit, non vuol dire che sia chiave anche in unaltra. A seconda del contesto, un attributo pu svolgere o meno la funzione di chiave. Per lentit studente, il CF una chiave candidata, ma la chiave primaria? Digressione sul CF: il codice fiscale non nasce univoco, perch pu esserci una coincidenza di data e comune di nascita e delle sei lettere che identificano cognome+nome (omocodia). In tal caso, per il primo bambino che venga registrato con quelle caratteristiche si calcola il CF con il normale algoritmo 4, mentre allarrivo del secondo, il sistema evita la formazione di un CF duplicato e genera un codice alternativo sostituendo consecutivamente (a partire dallultima) le cifre con una lettera. Tornando a bomba, decido che lentit in esame sia costituita da:

Lezioni di Basi di dati

Da un punto di vista modellativo, questa entit scorretta perch possono esistere soggetti omonimi nati nello stesso giorno e iscritti allo stesso corso di studi. Questo per non rappresenta un errore tout court; se infatti si decide di adottare questo schema, la modellazione pu comunque funzionare. sbagliato da un punto di vista modellativo, ma non si ha un errore in termini di risultato. Teoricamente potrebbe essere giusto perch nel mio piccolo dominio (minimondo) plausibile che non esistano due individui che condividano tutti i dati da me considerati, oppure, quandanche esistessero, nella mia modellazione quelle due persone verrebbero a coincidere in una sola.

RELAZIONE
Nel modello concettuale, una relazione unassociazione logica che si stabilisce tra due o pi entit. Graficamente, si rappresenta come un rombo con dei segmenti che lo collegano alle entit (le quali, come gi visto, sono racchiuse in due riquadri).

La maggior parte delle relazioni di grado 2. Esistono anche relazioni di grado 3. Qualsiasi relazione di grado maggiore di tre scorretta o, meglio, potrebbe essere rappresentata con relazione di grado minore o uguale a tre.

http://it.wikipedia.org/wiki/Codice_fiscale#Generazione_del_codice_fiscale

11

Lezioni di Basi di dati

2010-2011

La relazione una associazione logica: avendo due concetti e due entit, li si mette in relazione. Unistanza di unentit legata concettualmente ad altre istanze di altre entit. Unentit pu avere tante associazioni logiche con altre entit. Ad esempio:

Osservando la realt, modelliamo il fatto che ci sia una corrispondenza tra unentit e unaltra. Caratterizziamo la relazione in termini di possibili collegamenti tra un lato e laltro: si parla di cardinalit minima e di cardinalit massima. Uno studente pu essere contemporaneamente iscritto a pi corsi di studio? No. Rappresentiamo le relazioni con un Diagramma di Eulero-Venn: un pirulicchio (cio unistanza) di Studente collegato al massimo a un pirulicchio di Corso di Studi. Diversamente, un Corso di Studi pu avere pi di uno Studente iscritto.

12

2010-2011

La relazione:

Lezioni di Basi di dati

a un corso di laurea si iscrivono N = "molti" studenti perch ogni studente iscritto al pi a un corso di studi del tipo N:1 Molti a uno, La relazione:

del tipo M:N Molti a molti. La relazione:

del tipo 1:1

Uno a uno.

Potremmo anche avere, per rimanere nellambito pollitico:

1 e N sono significativi per quello che definiamo cardinalit massima. La cardinalit minima stabilisce se unistanza debba o meno partecipare a delle associazioni logiche. Es.: una persona deve necessariamente guidare unauto? No. Ma di certo lauto deve essere necessariamente guidata da una persona. Modelliamo la relazione partecipa tra ministri e governi: Un ministro partecipa al pi ad un governo, mentre il governo necessariamente formato da pi di un ministro.

13

Modelliamo la relazione presiede, sempre tra le entit ministri e governi:

Lezioni di Basi di dati

2010-2011

Non pu esistere un governo che non sia presieduto da alcun ministro. Viceversa ci pu essere un ministro che non presiede alcun governo.

Il numero (1 in questo caso) indica la Cardinalit massima. Il grassetto indica lobbligatoriet, ossia la Cardinalit minima. Le relazioni si leggono

Se scrivo:

Modello correttamente una parte della realt. La chiave di Condominio indirizzo: Condominio (indirizzo) Lentit scala individuabile solo a patto di specificare lindirizzo del condominio di cui fa parte. Per questo tipo di relazioni si parla di entit debole: quando lentit ha concettualmente senso, ma per poterla individuare univocamente c bisogno di riferirsi a unaltra entit. In altre parole, ho bisogno della relazione perch lentit sussista. Si dice debole perch ha una dipendenza esistenziale, in quanto senza la relazione non pu stare. Scala (nro_scala, indirizzo_condominio, millesimi) Lattributo nro_scala, insieme alla relazione, individua univocamente unistanza. Ovviamente dal lato destro la relazione indispensabile (quindi indicata in grassetto). Gli attributi dellentit debole che partecipano allindividuazione di unistanza si chiamano chiavi parziali (ad es. nro_scala).

14

2010-2011

Es. La modellazione seguente pu funzionare?

Lezioni di Basi di dati

Se il condominio non ha una scala, lattributo nro_scala diventa null. Il che, oltre a occupare inutilmente spazio nel database, causa un errore perch contempla la possibilit che una chiave contenga un valore null, mentre abbiamo gi visto che ci non ammesso. Questa modellazione dunque concettualmente sbagliata, pu funzionare solo se c la certezza che ogni condominio abbia almeno una scala. Questo esempio ha reso chiaro un vincolo di entit che implicito ma vale sempre. Una volta identificato un sottoinsieme di attributi (che formino una chiave? Aggiunta mia), un attributo non potr assumere valore null, altrimenti non si identifica un bel niente. Ricapitolando: unentit debole in alcuni casi indispensabile per modellare correttamente la realt, quindi necessario modellare quellinformazione con una relazione.

anche possibile modellare una gerarchia:

La modellazione di una gerarchia si esplicita attraverso un triangolo al cui interno compare la scritta IS-A (ossia un):

Questo simbolo esprime un rapporto: di specializzazione dallalto verso il basso; di generalizzazione dal basso verso lalto.

Si parla anche di relazione GEN-SPEC.

15

Ad esempio, veicolo il padre/madre dei figli auto, moto, , i quali condividono tutti gli attributi del padre/madre, ma anche altri, propri di ciascuna specializzazione:

Lezioni di Basi di dati

2010-2011

velocit_max un attributo associato a qualunque entit sottostante; Moto, invece, caratterizzato dallattributo cilindrata, che manca a bicicletta; autocarro possiede lattributo nro_assi perch questo pu variare; al contrario, auto, moto e bicicletta, per le quali tale attributo ininfluente perch sempre pari a 2. E cos via. Le gerarchie possono essere classificate in base alla completezza: totali: parziali: ogni istanza del padre presente in almeno una delle figlie 5; non ogni istanza del padre presente in almeno una delle figlie.

Inoltre si classificano in base allesclusivit: esclusiva: ogni istanza del padre presente al pi in una delle figlie 6; sovrapposta: una istanza del padre pu essere presente anche in pi figlie. In definitiva, possono esistere: Esempi:

Totale ed esclusiva: - totale perch attraverso uomo e donna abbiamo incluso tutte le possibili istanze di persona; - esclusiva a meno dellermafroditismo.

5 6

In altre parole: lunione dei sottoinsiemi dei figli costituisce la totalit dellinsieme del padre. Ossia: lintersezione dei sottoinsiemi dei figli vuota.

16

2010-2011

Lezioni di Basi di dati

La gerarchizzazione di veicolo gi vista prima : parziale e sovrapposta:

parziale perch non comprende altri tipi di veicolo, che pure esistono; sovrapposta perch alcune entit foglie possono essere sovrapposizioni (es. bici motorizzate) parziale e sovrapposta: - parziale perch non comprende, ad esempio, casalinghe e pensionati; - sovrapposta perch esistono senzaltro studenti lavoratori.

Nel caso specifico, la sovrapposizione pu aggiungendo alla gerarchia studente lavoratore.

essere

eliminata

17

Lezioni di Basi di dati

2010-2011

MODELLO RELAZIONALE

Lezione 14/04/2011

Possiamo modellare una base di dati in modo totalmente concettuale attraverso la rappresentazione grafica, ed quello che abbiamo fatto finora. Questa modellazione, di facile e immediata comprensione, non ha per alcun riferimento informatico immediato. Per implementare nellelaboratore elettronico un database con le caratteristiche espresse nel modello concettuale, entra in gioco la: MODELLAZIONE LOGICA Modellazione logica: punta a realizzare una rappresentazione di un database che sia corrispondente a quella direttamente implementata nellelaboratore elettronico. Si tratta di una vista di pi alto livello, anche se non di livello massimo, come ad esempio la modellazione concettuale (giusto?). Il modello logico che adotteremo allo scopo il modello relazionale. Nota bene la differenza tra: Entity Relationship: detta anche associazione logica per distinguerla Relational Model: uno dei modelli logici proposti nella rappresentazione dei dati, implementato nei DBMS.
o I DBMS su cui implementato il modello relazionale sono perci detti RDBMS, ossia Sistemi di gestione di basi di dati relazionali.

I modelli logici possibili sono:


Modello gerarchico: The data is sorted hierarchically, using a downward tree. This model uses pointers to navigate between stored data. It was the first DBMS model.

Modello relazionale (RDBMS, Relational


Si basa sullalgebra relazionale e sulla teoria degli insiemi; strutturato attorno al concetto di relazione (o tabella).
database management system):

Modello reticolare (o CODASYL): like the hierarchical model, this model uses pointers toward stored data. However, it does not necessarily use a downward tree structure.

The object model (ODBMS, object-oriented database management system): the data is stored in the form of objects, which are structures called classes that display the data within. The fields are instances of these classes.

18

2010-2011

Il modello relazionale il pi diffuso nei database di uso comune (commerciale, amministrativo, etc). Esistono ancora vecchi database basati sui primi due modelli: sono sistemi di tipo legacy (letteralmente un retaggio del passato). Ad esempio, per la prenotazione degli aerei esiste un sistema ormai vecchissimo, ma che nessuno cambia perch il costo di modifica sarebbe troppo elevato. Il modello relazionale fu ideato da Codd (1970), che lavorava allIBM. ORACLE ha ripreso il modello di Codd, rendendolo famoso e standard de facto nella gestione dei dati. ORACLE gestisce grandi database, ha caratteristiche di efficienza molto elevate. Anche ACCESS un DBMS, ma gestisce una quantit di dati limitata, ed pi user friendly di Oracle. Ad ogni modo, si relaziona con SQL. Alternative gratuite sono MySQL e PostgreSQL; gestiscono quantit di dati medio-alte, ma non raggiungono i livelli di Oracle. Il modello relazionale si basa sul concetto molto semplice di relazione. La relazione assimilabile a una tabella. Il database una collezione di tabelle opportunamente vincolate tra loro. Una tabella costituita da righe e colonne. La prima riga e la prima colonna hanno significato speciale: descrivono quello che succede nei corrispondenti campi di quelle successive. La tabella identificata mediante: il nome della relazione; i nomi delle colonne attributi, con lo stesso significato gi visto nel modello E-R.

Lezioni di Basi di dati

Tutti i valori di una certa colonna sono del medesimo tipo appartengono allo stesso dominio 7 (insieme dei valori ammissibili) (null). Ogni riga rappresenta una sequenza di valori logicamente correlati tra loro. Ciascuna riga della tabella denominata tupla, ed vista come un elemento di un insieme matematico. Nota: storicamente, stato elaborato prima il modello relazionale, e poi il modello E-R. Abbiamo detto che per ogni tabella sono dati: un nome; vari attributi.

Ogni tupla rappresenta una sequenza nota di valori che sono logicamente correlati tra loro, ma ciascuna tupla lelemento di un insieme.

Il dominio un insieme di valori atomici (indivisibili); ad ogni dominio si associa un tipo di dato o formato.

19

Rispetto alle tabelle cui siamo abituati a pensare, sulle righe non esiste un ordinamento perch matematicamente non ha senso parlare di ordinamento dei valori di un insieme. Le righe sono una pura rappresentazione: alterandone lordine, si ottiene la stessa tabella, ossia la stessa relazione. Non si possono distinguere i dati in base alla loro posizione sulle righe, ma solo in base ai loro valori. Ossia: non si pu distinguere una tupla dallaltra perch la prima posizionata nella
riga 5 e la seconda nella riga 7, ma perch la sequenza di valori della prima tupla necessariamente diversa da quella della seconda tupla (certezza che ci deriva dalla stessa nozione di insieme).

Lezioni di Basi di dati

2010-2011

Si individuano le tuple solo ed esclusivamente per la loro sequenza di valori. Quando si definisce una tabella, si definisce anche lo schema o INTENSIONE della relazione R, che specificata come un nome R e una lista ordinata dei suoi attributi (1 , 2 , , ). Ad es.: Ciascun attributo corrisponde a un dominio ( ) nello schema relazionale. Studente (nome, cognome, matricola, data_nascita, data_immatr)

Quando si considerano una tabella e tutte le sue tuple, si parla di ESTENSIONE o ISTANZA di R: essa dunque un insieme di tuple: () = (1 , 2 , , ). Ciascuna tupla una lista ordinata di valori = (1 , 2 , , ). dom() Ciascun valore pu assumere un valore appartenente al suo dominio oppure valore null:

Lintensione stabile una volta definita, non si modifica mai, a meno che non si modifichi lintera struttura del database. Lestensione non stabile si modifica ogni volta che si aggiunge, si elimina o si modifica una tupla. Si definiscono: GRADO di una relazione: il numero di attributi in essa presenti (il numero delle colonne, ossia lintensione);

Il grado, legato allintensione, non cambia.

CARDINALIT di una relazione: il numero delle tuple presenti in una relazione (il numero delle righe, ossia la sua estensione ().

La cardinalit, legata allestensione, in genere cambia nel tempo. Sulla tabella si stabiliscono dei vincoli che modellano il comportamento della base di dati nei confronti dellinserimento, modifica e cancellazione di tuple.

20

2010-2011

VINCOLI DI MODELLO

Lezioni di Basi di dati

Si tratta di vincoli sullo schema, cio determinati a partire dalla semantica che assegniamo (?) a queste relazioni. Anche se il vincolo poi si esplicita sulla singola tupla, esso viene stabilito sulla base della conoscenza del significato delle tuple delle tabelle (?). Ricordando il concetto di superchiave (insieme di attributi che gode della propriet di unicit), di chiave candidata (una superchiave che goda anche della propriet di minimalit, ossia non abbia ridondanza) e di chiave primaria (una chiave candidata arbitrariamente scelta), si stabilisce il: Vincolo di chiave: gli attributi che costituiscono la chiave primaria non possono assumere valore null.

Torniamo agli appunti maniacali: Le strutture del modello relazionale ci permettono di organizzare le informazioni di interesse per le nostre applicazioni; in molti casi, per, non vero che qualsiasi insieme di tuple sullo schema rappresenti informazioni corrette e coerenti per lapplicazione considerata. Per evitare incongruenze, si introduce il concetto di vincolo dintegrit, come propriet che deve essere soddisfatta dalle istanze che rappresentano informazioni corrette per lapplicazione; un vincolo pu essere intrarelazionale (definito nellambito di una singola relazione) o interrelazionale (se coinvolge pi relazioni). 1) Vincolo di DOMINIO: ogni valore di una tupla associato a un attributo deve essere compreso nel dominio dellattributo, oppure essere null. 2) Vincolo di CHIAVE: per ogni coppia di tuple appartenenti allestensione di una relazione posso comunque individuare un sottoinsieme SK di attributi che mi garantiscano lunicit delle tuple ristrette a tale sottoinsieme di attributi: SK si dice superchiave della relazione R; le superchiavi possono essere molteplici per una stessa relazione; una relazione ha sicuramente almeno una superchiave, cio linsieme di tutti i suoi attributi. Consideriamo, allinterno di una relazione 1 , un sottoinsieme di attributi FK i cui valori si riferiscano a corrispondenti valori in unaltra relazione 2 : se vogliamo che la corrispondenza fra tali valori di attributi di diverse entit si mantenga nel tempo, necessario introdurre un vincolo di integrit referenziale tra le relazioni 1 ed 2 . 3) Vincolo di INTEGRIT REFERENZIALE 8:
Questo vincolo alla base del modello relazionale, caratterizza e determina lintegrit e la coerenza di una database.
8

dom()

1 , 2 () 1 [] 2 []

1 Studente (nome, cognome, matricola)

21

In questo caso il vincolo di integrit referenziale consiste nel fatto che i valori appartenenti allestensione della relazione esame per lattributo matricola devono necessariamente essere contenuti in quelli appartenenti allestensione della relazione studente sotto la voce matricola. La correlazione tra gli attributi matricola di entrambe le relazioni considerate consiste nel fatto che solo gli studenti effettivamente iscritti (dunque in possesso di regolare numero di matricola) possono sostenere esami. Naturalmente importante che questo vincolo si mantenga nel tempo, al variare dellestensione. Ci impone implicitamente un altro vincolo: non possibile cancellare o modificare arbitrariamente i valori della tabella studente alla voce 2matricola, poich questo potrebbe portare nella tabella esame a tuple che si riferiscano a istanze di esami sostenuti da studenti inesistenti, e ci violerebbe lintegrit del database. Se si cancella una tupla da studente, o si modifica un valore di matricola in studente, un modo per mantenere lintegrit del database cancellare o modificare tutte le tuple con quel valore in esame, oppure porre uguale a null tale attributo per quelle stesse tuple, sempre che questo non faccia parte di una chiave. Formalmente, si dice che FK un vincolo di integrit referenziale (o Foreign Key, cio chiave esterna) di 1 se, data una relazione 2 e detta PK la sua chiave primaria, si ha: [] = [] con 1 e 2 Esempio: e sono tuple

2 Esame (matricola, voto, data, corso)

Lezioni di Basi di dati

2010-2011

matricola FK e ha lo stesso dominio della PK di studente, cio matr..

22

2010-2011

lecito eliminare una tupla dalla tabella esame o aggiungerne una alla tabella studente, purch abbia un valore differente da 1 e 2 per lattributo matr.. Non consentito, invece, modificare da 1 a 3 il valore di matr. per la tupla (antonio, ardito, 1), poich nella relazione esame vi sarebbe una tupla spuria e senza significato, in cui uno studente con matricola 1 (inesistente in seguito alla modifica) ha sostenuto un esame valido! Per lo stesso motivo non permesso nemmeno eliminare da 2 la tupla (arturo, astante, 2). Si potrebbe tuttavia effettuare la modifica e leliminazione di tuple, se si prevedesse un meccanismo di modifica ed eliminazione di tuple in cascata, per tutte le tabelle correlate tra loro, in modo tale da conservare lintegrit del DB 9.

Lezioni di Basi di dati

Torniamo ai quaderni di Cristina. Vincolo di chiave esterna ( un vincolo interrelazionale). un vincolo che definisce legami tra due o pi tabelle. Il vincolo interrelazionale pi utilizzato quello di integrit referenziale (in SQL detto vincolo di chiave esternao foreign key) . in 1 un sottoinsieme di attributi non banale (cio non vuoto) che chiamo FK; in 1 un sottoinsieme di attributi corrispondente alla chiave primaria, che chiamo PK, e gli attributi di FK e PK siano compatibili, cio che abbiano lo stesso dominio. 1 (1 ) 2 (2 ) 1 [] = 2 [] 1 [] =

Esso si stabilisce tra due relazioni 1 ed 2 per le quali venga individuato:

Poste queste condizioni, esiste un vincolo di chiave esterna se per ogni tupla 1 appartenente allestensione di 1 esiste una tupla 2 appartenente allestensione di 2 tale che 1 ristretta su FK sia uguale a 2 ristretta su PK o assuma valore null. Si dice in questo caso che 1 referenzia 2 .

In altre parole, prendo la tupla 1 e ne considero solo i valori corrispondenti a FK; se c un vincolo di chiave esterna, quei valori devono essere esattamente uguali a 2 [PK] oppure 1 [FK] null.

La modifica di matr. da 1 a 3 per la tupla (antonio, ardito, 1) relativa allomonimo studente deve comportare anche la modifica da 1 a 3 di matricola per tutte le tuple che sono istanza degli esami validi da lui sostenuti. Leliminazione dellistanza (arturo, astante, 2) deve comportare anche leliminazione in 1 di tutte le tuple aventi il campo matricola pari a 2.

23

Ogni volta che ci riferiamo a valori di unaltra tabella, dobbiamo aver cura di selezionare valori esistenti significativi. Chiariamo con un esempio: Abbiamo due tabelle: 1) Studente (matricola, nome, cognome, Cds_N) 2) Corso_di_laurea (Cds_N, nome_corso, coord_CdS) Le tabelle sono cos popolate:
S matricola 1 2 3 4 CdS_N 1 2 3 Nome Topo Gamba Zio Clara Nome_corso Ing. meccanica Ing. Civile Ing. Civile LS Cognome Lino Dilegno Paperone Bella Coord_CdS Monno Boghetich Boghetich CdS_N 2 2 1 3

Lezioni di Basi di dati

2010-2011

Stabilisco il vincolo: _ la chiave primaria = PK _ = chiave esterna (FK) 1

Il vincolo di chiave esterna stabilito implica che, per esempio, nella tabella 1 non si pu scrivere:
S

tupla S deve esistere (etc etc)


matricola 5

poich il CdS_N 4 non esiste in 2 . A causa del vincolo, questa tupla deve avere valore null. Ci implica, inoltre, che non si pu cancellare o modificare alcuna tupla in tabella C, perch cos facendo qualche tupla in S mancherebbe di riferimento in C. Per fare una modifica in C bisogna contestualmente farne unaltra, opportuna, in S. Il vincolo di chiave esterna molto potente, perch collega le tabelle, che sarebbero altrimenti indipendenti. Inoltre tende a collegare da un lato la chiave primaria con gli attributi che si riferiscono ad essa in unaltra tabella (in cui appunto chiave esterna).

Nome Mickey

Cognome Mouse

CdS_N 4

24

2010-2011

MAPPING

Lezioni di Basi di dati

Dal modello concettuale E-R al modello logico relazionale di Codd.

1) Ad ogni entit semplice del modello E-R corrisponder una tabella (o relazione) di
identico nome, e in cui si riportano tutti gli attributi esplicitati dallentit; gli attributi composti devono essere scomposti in attributi atomici.

2) 1:1 Per ogni associazione 1:1 si copia da una tabella allaltra, come chiave esterna,
la chiave primaria di una delle due tabelle; se una delle due entit ha partecipazione totale, si sceglie di portare la chiave primaria dellentit che non ha partecipazione totale come chiave esterna dentro lentit che ha partecipazione totale; eventuali attributi dellassociazione logica vengono trascinati con la chiave esterna.

N:1 Per ogni associazione molti a uno, indipendentemente dalla partecipazione delle entit coinvolte, si porta nel lato N dellassociazione la chiave primaria dellentit che partecipa allassociazione dal lato 1; eventuali attributi dellassociazione logica vengono trascinati con la chiave esterna sul lato N.

25

M:N Per ogni associazione molti a molti si crea una nuova tabella con lo stesso nome dellassociazione logica, che avr come attributi quelli propri dellassociazione e come chiavi esterne le chiavi primarie delle entit partecipanti alla associazione; chiave primaria della relazione creata lunione delle chiavi primarie delle entit partecipanti allassociazione.

Lezioni di Basi di dati

2010-2011

3) Per ogni entit debole si crea una tabella con il medesimo nome, che abbia come
attributi gli attributi proprio dellentit debole; si copia in tale tabella la chiave primaria dellentit da cui lentit debole dipende come chiave esterna; si definisce come chiave primaria della nuova tabella lunione della chiave esterna e delle eventuali chiavi parziali dellentit debole.

4) Per ogni attributo multi-valore si crea una nuova tabella con il medesimo nome
dellattributo multi-valore, in cui si riporta lattributo stesso e si copia come chiave esterna la chiave primaria dellentit di cui lattributo multi-valore; chiave primaria della nuova tabella lunione della chiave esterna e dellattributo multi-valore stesso.

26

2010-2011

5) Poich il modello relazionale non prevede limplementazione di gerarchie IS-A (a


meno che non si tratti di un modello relazionale ad oggetti), tali gerarchie devono essere eliminate; sono possibili tre metodi. a) riportare le entit figlie nellentit padre.

Lezioni di Basi di dati

Per ogni attributo non associato direttamente allentit padre, si avranno dei null a seconda che la tupla considerata si riferisca o meno a una delle entit figlie 10. b) riportare lentit padre nelle entit figlie. N.B. Ci possibile solo se la gerarchia totale (e anche esclusiva?). donna (2 , 3 , 1 , 2 ) uomo (1 , 1 , 2 )

c) creare entit figlie deboli rispetto allentit padre. Cfr. esercizi (boh).

10

se 1 = situazione_militare, logico che tutte le tuple della relazione persona aventi S=donna avranno il campo 1 con valore null.

27

ALGEBRA RELAZIONALE

Lezioni di Basi di dati

2010-2011

Come si opera sulle tabelle? Con l'algebra relazionale: un banalissimo linguaggio procedurale, definito per come un algebra chiusa. Linguaggio procedurale: le operazioni vengono specificate descrivendo il procedimento da seguire. Algebra chiusa: poich l'algebra relazionale e definita su relazioni e da valori sulle relazioni. quindi un linguaggio procedurale i cui operatori ricevono in ingresso una o pi relazioni e producono in uscita una relazione. Ci rende l'algebra relazionale anche composizionale, cio posso applicare i valori di quest'algebra in cascata. In altre parole, il risultato di un'operazione pu essere ulteriormente manipolato. Se ho un operatore definito su matrici di grado tre, che abbia valori nel dominio di numeri complessi, una volta che da questo ottengo un risultato, non posso applicarlo su un altro operatore perch ha valori nel dominio dei numeri complessi! Ad esempio: ingresso: uscita: V: Se invertiamo la cosa non funziona pi: F: e composizionale perch N ha valori su .

poich non ha valori su (i numeri reali comprendono quelli naturali ma non vale viceversa (. Se l'algebra chiusa vuol dire che il dominio di uscita compatibile con quello di ingresso: pertanto, il risultato di un'operazione pu essere ulteriormente manipolato.

OPERATORI DELL'ALGEBRA COMPOSIZIONALE


Sono di due tipi. Operatori unari: operano su una relazione che hanno valori corrispondenti a una relazione. Operatori binari: sono definiti su due relazioni e ne restituiscono una.
UNARI Selezione (opera sulle tuple, ossia sulle righe) Ridenominazione (ridenomina gli attributi) Proiezione (opera sugli attributi, ossia sulle colonne) Unione Intersezione Differenza Prodotto cartesiano Join "collegamento"

BINARI

operatori insiemistici

28

2010-2011

(saltiamo gli altri operatori e andiamo direttamente a ridenominazione)

Lezioni di Basi di dati

RIDENOMINAZIONE.
Possiamo ridenominare a piacere, ma dobbiamo ricordare che in genere si preferisce la notazione puntata. Esempio: www.facebook.com In molti contesti, inclusa l'informatica, usiamo il punto per separare in termini gerarchici i nomi. Cio quando leggiamo:
www.facebook.com www.facebook.it global.nytimes.com www.fbi.gov

come si leggono questi indirizzi? In realt li leggiamo da destra verso sinistra, in termini di domini, dal pi generico e specifico: La classificazione dei nomi gerarchica, esistono:

un'organizzazione che sotto di s gestisce gerarchicamente le sue macchine. global, www, ... Sono i nomi assegnati alla singola macchina all'interno del dominio. Si tratta di una classificazione gerarchica che si legge da destra verso cio dal generico pi specifico, nel caso di Internet:
www.poliba.it

TOP LEVEL DOMAIN:

it: poliba: www:

la macchina registrata in Italia, cio in dominio italiano dominio che si chiama "poliba" nel dominio poliba c' un computer che si chiama "www"

29

La logica analoga a quella dei CAP:

Lezioni di Basi di dati

2010-2011

Bari --> 701_ _ a seconda della zona abbiamo dei numeri diversi, ma con una gerarchizzazione che va da sinistra a destra (dal pi globale al pi locale). In informatica una cosa che si fa normalmente usare il punto come separatore di una classificazione gerarchica. Tornando alla tabella che dobbiamo costruire come prodotto cartesiano di POLLITICI x PARTITI, non succede che il nome di un attributo proprio uguale ad un altro della seconda tabella: "ID_Partito". Come faccio a distinguerli? Uso una classificazione gerarchica puntata, quella che chiamiamo "DOT NOTATION". Scriver quindi:
pollitici.id_partito partiti.id_partito

il che vuol dire che mi sto riferendo ad un attributo che parte di un'altra cosa, con l'unica differenza (rispetto al caso di Internet) che in questo caso la notazione e da sinistra verso destra la notazione Internet based invece da destra verso sinistra. La maggior parte delle notazioni tuttavia da sinistra verso destra (dal pi generale al pi specifico). La notazione puntata comunque in generale consta nell'andare "da una parte all'altra" attraverso una classificazione gerarchica. Creo quindi una tabella:
cod 1 1 1 2 2 2 3 3 3 nome Silvio Silvio Silvio Pierluigi Pierluigi Pierluigi Pierferdi Pierferdi Pierferdi cognome Berlusconi Berlusconi Berlusconi Bersani Bersani Bersani Casini Casini Casini pollitici.id_partito PDL PDL PDL PD PD PD UDC UDC UDC partiti.id_partito PDL PD UDC PDL PD UDC PDL PD UDC nome_partito Popolo della libert Partito democratico Unione di centro Popolo della libert Partito democratico Unione di centro Popolo della libert Partito democratico Unione di centro

Come si fa il prodotto cartesiano: si prende ciascuna tupla di una relazione e la si unisce con ogni altra tupla dell'altra relazione.

30

2010-2011

Ovviamente parliamo di prima, seconda, terza tupla solo per comodit, ma sappiamo che non esiste questa distinzione. Abbiamo messo insieme il contenuto delle due tabelle di partenza. L'operazione di tipo COMBINATORIO. Se abbiamo due tabelle ciascuna con 1000 tuple, il risultato del prodotto cartesiano una tabella con 1 milione di tuple, che non poco. Immaginiamo se invece dei pollitici avessimo gli studenti del politecnico. Se abbiamo 10.000 studenti che hanno sostenuto in media 25 esami, quando andiamo a mettere insieme le cose c' un esplosione combinatoria, cio dobbiamo mettere insieme 250.000 tuple per cominciare a scoprire chi relazionato con cosa. Guardiamo la tabella ottenuta dal prodotto cartesiano pollitici X partiti. Contiene informazioni corrette? Si pu osservare che alcune tuple contengono informazioni scorrette dal punto di vista semantico, non dal punto di vista dell'operatore. Per come abbiamo definito il prodotto cartesiano, esso stato eseguito in maniera formalmente corretta. La tabella precedentemente ottenuta rappresenta: (prodotto cartesiano)

Lezioni di Basi di dati

che in quanto prodotto cartesiano corretto.

Ci che non risulta corretto in base alla nostra conoscenza di dominio e alla correlazione tra le due tabelle il significato delle informazioni contenute in alcune tuple. Ci sono delle tuple in cui il senso dell'informazione e corretto, altre in cui esso scorretto. Il prodotto cartesiano che stiamo facendo : . Il prodotto cartesiano e definito indipendentemente dal significato di quei dati.

Poich abbiamo detto che l'algebra relazionale COMPOSIZIONALE, prendo il risultato di tale prodotto e vi applico l'operatore di selezione: . _ = . _ ( ) =

Ricordiamo che algebra "COMPOSIZIONALE" significa: poich dall'applicazione di un operatore ottengo sempre una relazione come risultato, posso applicare in cascata gli operatori sul risultato. In seguito alla selezione, ottengo una nuova relazione B che costituita sempre dallo stesso schema (che infatti non cambia in seguito all'operatore ) ma scompaiono le righe che non rispettano il predicato di selezione.

Tabella B
cod 1 2 3 nome Silvio Pierluigi Pierferdi cognome Berlusconi Bersani Casini pollitici.id_partito PDL PD UDC partiti.id_partito PDL PD UDC nome_partito Popolo della libert Partito democratico Unione di centro

31

Quello che trovo in questo mondo corretto da un punto di vista della mia conoscenza di dominio: Berlusconi associato all'PDL Bersani associato al PD Casini associato all'UDC Le relazioni ottenute funzionano perch ho eguagliato gli attributi in un modo ben preciso: ho eguagliato degli attributi che sono: chiave per una delle tabelle chiave esterna per l'altra tabella.

Lezioni di Basi di dati

2010-2011

Ricordando che: CHIAVE: identificativo univoco e minimo della tabella CHIAVE ESTERNA: riferimento tra una tabella ed un'altra tabella (si deve riferire ad un valore esistente). Eguagliare cose dal punto di vista matematico un'operazione che si pu fare sempre, ma il risultato che si ottiene pu essere corretto oppure privo di senso. Il fatto di eseguire un'operazione correttamente non implica che essa abbia senso. Se si moltiplica ad esempio lo stipendio mensile per 100 volte il risultato non ha molto senso, a differenza che se lo moltiplicarsi per 13 volte, ottenendo lo stipendio annuo. Il risultato ha senso se si eguagliano attributi che sono da un lato chiave e dall'altro chiave esterna la cosa funziona perch il senso che le stiamo dando corretto. Avevamo visto un altro operatore binario: JOIN, ossia "collegamento"

OPERATORE DI JOIN

Possiamo vederlo come una operazione elementare, ma in realt un'operazione derivata come prodotto cartesiano seguito da un'operazione di selezione, il cui predicato e rappresentato attraverso : il corrisponde al predicato di selezione.

Quindi il join, nella sua formula pi generale di rappresentazione un prodotto cartesiano seguito da un'operazione di selezione.

= ( )

In generale si parla di quando la condizione di selezione non specificata (si tratta di un join con un predicato di selezione generico).

32

2010-2011

Quando la condizione espressa dal un'uguaglianza si parla di equi-join. Normalmente, di fatto, usiamo l'equi-join, che un join in cui il predicato di selezione una condizione di uguaglianza tra attributi omologhi delle due relazioni.

Avevamo infatti visto che l'operatore di selezione s era costituito da atomi proposizionali, cio da condizioni di confronto unite da AND, OR e NOT che costituivano un predicato di selezione.

Lezioni di Basi di dati

In altri termini, si tratta di una condizione di uguaglianza fatta tratti buchi omologhi (i cui nomi non sono identici ma "si assomigliano") di una e dell'altra relazione di partenza, tipicamente CHIAVE e CHIAVE ESTERNA. Vi poi il natural join, che non presenta pi il predicato di selezione a parte. Somiglia all'equi-join, ma non richiede la ridenominazione degli operatori. Assume, cio che gli attributi delle relazioni di partenza su cui va fatto l'equi-join abbiano lo stesso nome, e tale attributo viene riportato UNA SOLA VOLTA nella relazione di arrivo (risultato). Riepilogando: il join una sequenza delle operazioni e . Il -join la versione pi generale, che consente un qualsiasi predicato di selezione: non si usa praticamente mai, perch non ci serve "una qualsiasi condizione", ma una che ci permetta di collegare logicamente una tabella ad un'altra. Quando ho le due tabelle, pongo una relazione di uguaglianza tra gli attributi dell'Usa e gli attributi dell'altra, ben sapendo che per una tabella l'attributo sar chiave e per l'altra sar chiave esterna. Per questo avevamo dovuto cambiare nome, perch in una relazione non si possono avere attributi con lo stesso nome, altrimenti non sappiamo distinguerli. Nel natural join si ragiona come segue: siccome stiamo eguagliando attributi che nascevano con lo stesso nome, e che per costruzione del risultato avranno lo stesso valore, non effettuiamo ad un preliminare cambiamento di nome, ma assumiamo che si possano implicitamente confrontare i valori dei due attributi provenienti dalle due relazioni e, nel risultato, far risultare una sola volta quell'attributo, sicuri che il valore sia uguale. (Nota: siamo sicuri che quei valori saranno uguali, per la stessa costituzione delle tabelle: pi conveniente riportarli una volta sola). Il natural join risparmia la presenza duplicata degli attributi di "join", nonch l'operazione di ridenominazione. In realt non c' nessuna semplificazione perch nellimplementazione pratica accade che: vengono riportate tutte le tuple; si confrontano gli attributi; il sistema che gestisce il processo crea implicitamente degli attributi con nomi temporanei e li confronta; si tolgono le tuple buone; si crea una nuova tabella in cui si riporta una sola volta la tupla buona;

33

Il tutto avviene implicitamente. Quindi se scrivo:

Lezioni di Basi di dati

2010-2011

ottengo esattamente una tabella che ha:

cinque attributi (perch pollitici.id_partito = partiti.id_partito) tre tuple

Il join un'operazione costosa, ma in pratica si cerca di risparmiare il pi possibile sul costo computazionale. Il join viene usato in molte circostanze perch l'operatore che collega le tabelle. Se, ad esempio, vogliamo rispondere alla domanda: "qual il partito di Silvio Berlusconi?" Dobbiamo individuare, in questo contesto il nome del partito di Silvio Berlusconi (non la sigla). La risposta che devo ottenere "popolo della libert", ossia una tabella che contenga un'unica tupla il cui contenuto "popolo della libert". Sappiamo che: seleziona per righe (tuple) seleziona per colonne (attributi) nome _partito (nome
="Silvio " cognome = "Berlusconi " (Pollitici

Otteniamo la risposta cercata scrivendo:

eseguiamo una sulla tabella ottenuta, in cui cerchiamo una tupla che abbia come valore di nome "Silvio" e () di cognome "Berlusconi" rimane cos solo la tupla che era in posizione uno effettuiamo una proiezione sul solo nome del partito. Ricapitolando, nella tabella abbiamo selezionato dapprima la tupla relativa al politico che ci interessava, che risponde ad un preciso nome cognome, ma di questa tupla abbiamo proiettato solo il nome del partito.

Pollitici Partiti fornisce una tabella costituita da tre tuple e cinque attributi; Quindi:

Partiti))

Osservazione 1: se ipotizziamo di avere 600 deputati per ciascuno dei tre partiti, dovremmo fare la selezione vista poc'anzi su 1800 tuple. Ci chiediamo: c' un modo per ridurre l'esplosione combinatoria che propedeutica alla risposta che abbiamo cercato? Un modo c' ed quello che in gergo si dice: "spingere le selezioni in avanti". Si chiama, appunto, push delle selezioni.

34

2010-2011

Se esamino la procedura seguita per ottenere il risultato, che concettualmente corretta osservo per che se avessi preso la selezione: nome = "Silvio" cognome = "Berlusconi"

Lezioni di Basi di dati

e l'avessi spinta dove potevo, cio sulla relazione "pollitici", sarebbe successo che di tutti i 600 parlamentari ne sarebbe rimasto subito solo uno. Gli altri 599 gli averi eliminati a priori "spingendo in avanti", cio applicando la selezione prima di fare l'operazione di join, anche se da un punto di vista elaborativo concettuale il contrario. Se spingo in avanti, possibile elaborare solo tre tuple, anzich 1800. Ma fare il push delle selezioni non banale. Il selection push un'operazione che qualsiasi sistema reale fa in automatico per ottimizzare le operazioni. Se prendiamo un DBMS, un sistema che gestisce database, notiamo che ciascuno possiede delle tecniche di ottimizzazione delle interrogazioni, ma tutti hanno in comune il selection push. anche se non ottimizzare niente perch non ho situazioni complesse, qualsiasi DBMS effettua a prescindere push delle selezioni perch si sa che i risparmi in molti casi notevole. Spingendo in avanti il pi possibile, cio facendo prima le selezioni, sicuramente si risparmia (poco o molto, ma si risparmia). Osservazione 2: Perch dobbiamo mantenere le due tabelle separate, quando possiamo usarne una sola (come quella proveniente dal join) con le informazioni gi pronte? Se guardiamo la tabella B:
cod 1 2 3 nome Silvio Pierluigi Pierferdi cognome Berlusconi Bersani Casini pollitici.id_partito PDL PD UDC partiti.id_partito PDL PD UDC nome_partito Popolo della libert Partito democratico Unione di centro

ci accorgiamo che una chiave della tabella il codice associato ciascun politico. Di conseguenza, se elimino Silvio Berlusconi, automaticamente elimino l'informazione relativa al PDL. Quello che succede in questo contesto che si verifica la cosiddetta anomalia da cancellazione, cio un comportamento improprio, perch eliminando un'informazione, sto cancellando automaticamente, senza esplicitamente scoprirlo, anche delle informazioni non totalmente correlate: il Pdl esiste a prescindere da Silvio Berlusconi, ma verrebbe eliminato dalla tabella B. Avendo due tabelle separate, questo non succede. Ugualmente, si pu avere una anomalia da inserimento: se volessimo registrare un nuovo partito, non potremmo introdurlo nella tabella B, poich la chiave non il partito ma il codice associato a ciascun parlamentare, in relazione al partito. Paradossalmente,

35

quando s'inserisce un partito in tabella B bisogna associarvi una persona, ma questa in generale non vero, perch il concetto di partito e indipendente dal suo componente. Immaginiamo che, anzich un solo componente per partito, ci fossero tutti i deputati. Se Fini rivendica il nome del Pdl, si pu cambiare il nome del partito di Berlusconi in F.I.? Nella tabella "partiti" (id_partito,nome_partito) basterebbe sostituire "popolo delle libert" con "Forza Italia"; ci non possibile nella tabella B in quest'ultima, per cambiare un'unica informazione devo cambiare il nome del partito in corrispondenza di ciascun deputato! La questione che, sebbene il join sia un'operazione costosa dal punto di vista computazionale, esso serve a mantenere dei concetti diversi in relazioni distinte e di unirle solo quando necessario, senza avere informazione ridondante perch l'informazione ridondante causa anomalie. Di fatto le anomalie sono degli effetti della ridondanza. La tabella grande (B) ridondante perch, in generale, le informazioni in essa riportate sono in surplus. Esistono tecniche di normalizzazione dei database, che servono a ridurre o eliminare la ridondanza, e pertanto anche ad evitare le anomalie ad essa collegate.

Lezioni di Basi di dati

2010-2011

36

2010-2011

SQL

Lezioni di Basi di dati

(lezione 26 maggio 2011) SQL: letteralmente l'acronimo di "linguaggio di interrogazione strutturata". Prima era SEQL: Structured English Query Language, ossia linguaggio di interrogazione in inglese strutturato, poi la parola "english" stata tolta per motivi di copyright. Il concetto fondamentale che si effettua un'interrogazione in inglese, ma in maniera strutturata, cio secondo 1:00 forma SQL= unione di due linguaggi in termini modellativi:

DDL

Data Definition Language


da un punto di vista concettuale il linguaggio con cui vengono descritti e definiti gli schemi, con la struttura delle tabelle. la parte del linguaggio che si occupa di definire lo schema, la struttura delle tabelle e i vincoli ad esse associati.

DML

Data Manipulation Language


il linguaggio direttamente collegato alla manipolazione dei dati, cio alle interrogazioni vere e proprie (tutto ci che serve a chiedere risposta al sistema), nonch alla manipolazione in termini di inserimento, modifica e cancellazione dei dati.

Tutto ci che attiene alla modifica della struttura del database DDL; tutto ci che attiene alla vita normale del database DML. Quando parliamo di linguaggio di interrogazione, pensiamo solo al DML, ma in realt SQL fa sia una cosa che l'altra, che concettualmente sono due cose distinte. Una parte si occupa di descrivere la struttura, l'altra parte di usare i dati, ma non di modificare la struttura degli stessi. Cambiare una tabella, cio mettere un attributo in pi, vuol dire accedere al DDL, alla definizione dei dati. Inserire una nuova tupla vuol dire accedere attraverso il DML. SQL un linguaggio dichiarativo. Avevamo distinto linguaggi dichiarativi e procedurali; l'algebra relazionale, per esempio, procedurale, cos come sono il C, il Basic. SQL: Permette di "dichiariare" cosa vogliamo come risultato, non la procedura per ottenere il risultato. un linguaggio standardizzato: tutti i produttori, insieme, contribuiscono allo standard--> a differenza di altre aree della programmazione informatica, nel campo dei database si usa quasi esclusivamente SQL.

37

Esistono varie versioni di SQL, ma il core del linguaggio sempre lo stesso e non tutte le caratteristiche di ciascuna nuova versione vengono implementate.

Lezioni di Basi di dati

2010-2011

Ci riferiremo a SQL2, che ancora il pi standardizzato, ed disponibile nella maggior parte dei DBMS. Alla definizione degli standard partecipano proficuamente tutti i produttori. I principali produttori di DBMS sono: ORACLE: Oracle il nome sia della societ sia del prodotto; produce solo DBMS e "figli" (prodotti per la business intelligence, eccetera). Il proprietario di Oracle colui che per primo ha abbracciato il modello relazionale o non avendolo inventato. Microsoft, il cui prodotto di punta SQL Server, destinato all'uso industriale, ma esiste anche Microsoft Access. IBM DB2 INFORMIX Informix o o

tra i grandi prodotti molto diffusi ce ne sono due gratuiti: PostgreSQL: tra quelli gratuiti e il pi robusto, quindi adatto per scopi pi importanti MySQL: a qualche limitazione interna di capacit di gestione dei dati. molto presente nelle applicazioni Web.

La quasi totalit dei DBMS per applicazioni di rilievo gestita da Oracle.

38

2010-2011

DDL

Lezioni di Basi di dati

Iniziamo col DDL. SQL serve quindi a creare database. Per creare database SQL mette a disposizione il comando "create scheme, seguito da un nome che associamo allo schema contenuto tra parentesi angolari < >, Dopodich pu essere presente o meno ci che contenuto tra parentesi quadre:
create scheme <scheme_names> [authorization <authorized_usr>]

Definizione dello schema


la stringa cos scritta e la definizione generica di un comando: per creare database devo scrivere necessariamente "create scheme ed assegnare un nome arbitrario lo schema, mentre ci che riportato le parentesi quadre [ ] Pu anche non esserci. SQL non ha parentesi quadre, per cui esse assumono preciso significato: il contenuto opzionale. [] Da un punto di vista sintattico il contenuto delle parentesi pu essere presente 0 o 1 volta. Quindi il comando precedente:
create scheme <scheme_names>

ammissibile perch le [ ] Sono facoltative. < > Segnaposto per un nome. {} Se scrivo:
create scheme il_mio_db authorization Eugenio

Il contenuto pu essere presente 0 o n volte.

Ho creato il database (per il momento vuoto) e ne ho assegnato i diritti di propriet a Eugenio, che pertanto pu costruire il database. Eugenio lauhtorized_user, cio assumo che sia un utente del sistema operativo che ospita il database. Se non uso le parentesi quadre vuol dire che l'amministratore del sistema anche il proprietario del database chi pu creare inizialmente il database dell'amministratore di sistema il quale pu dare poi l'autorizzazione al prosieguo del lavoro ha un utente autorizzato, ovvero pu rimanere l'unico autorizzato a tale scopo. Cosa contiene un database? In un database, in termini strutturali ci sono le tabelle, nel cui schema vi sono gli attributi e le loro definizioni (caratteristiche, tipo), nonch i vincoli imposti sugli schemi, che devono essere definiti, descritti.

39

Definizione di un attributo: SQL mette a disposizione una serie di domini per definire gli attributi. Esistono domini di vario genere. La struttura generale per la definizione di un attributo del tipo:

Lezioni di Basi di dati

2010-2011

<attr_name> domain [default<value>][constraint]{,further constraints}

<attr_name> domain [default<value>] [constraint]

nome dell'attributo definizione del dominio (tipo corrispondente all'attributo) Eventuale valore di default assegnato per quell'attributo eventuale vincolo

{,further constraints} eventuali altri vincoli

Definizione dei domini elementari: quali sono i domini elementari? Il pi elementare fondamentale il dominio carattere, che ha la seguente struttura:

character [varying] [(n_char)][character set <set>]

Es:

surname character (70) default Rossi

Nell'esempio:
<attr_name> surname Domain character (70) opzionalmente, tra ( ) Posso scrivere quanti caratteri sono assegnati

a quell'attributo. Se scrivo solo "character" l'attributo ha un solo carattere.


Default Rossi se non scrivo niente il cognome di default Rossi.

Quindi: in un'ipotetica tabella introduco l'attributo surname, che fatto in questo modo: ogni suo valore a disposizione 70 caratteri; se non scrivo niente il suo valore di default sar "rossi chiuse virgolette. Se in una tupla non scrivo niente, valore associato null.
Varying serve per gestire, eventualmente, il caso in cui l'implementazione del

DBMS gestisca la dimensione variabile dei valori degli attributi. Se il nome_attributo Ugo, il valore ad esso associato occuper comunque 70 caratteri. Negli spazi non occupati dal nome, viene inserito automaticamente un carattere speciale (subito dopo l'ultimo carattere inserito) che sta a significare che li realmente finisce il nome. Si dice che un carattere di fine stringa, non si vede ma serve al sistema per sapere che si deve fermare. Se ci non viene espresso esplicitamente attraverso "varying character, il sistema occuper 70 caratteri anche se il nome Ugo. Quindi "varying character vuol dire "se possibile, e le dimensioni sono pi piccole, riduci le dimensioni dettate. In tal caso il numero associato diventa un massimo, non la dimensione fissa.

40

2010-2011

Per questioni di chiarezza, non si scrive character, ma si usa la forma abbreviata:


name char (60) name varchar (60) 11

Lezioni di Basi di dati

Un'altra opzione :
[character set <set>]

che serve per gli alfabeti non latini. Al solito, se non scriviamo niente, il set di caratteri latino.

Domini numerici
Si distinguono in esatti e approssimati. Domini numerici esatti: Integer: diviso in due sottodomini: nella forma con due valori [(, )] nella forma con due valori [(, )] o small integer o big integer numeric: decimal:

nel dettaglio:

Integer: un numero intero, tipicamente dotato di segno, di 4 byte. Si pu rappresentare un numero intero compreso tra 2 31 9) (2 1 2 10

o Small integer: convenzionalmente un numero intero, dotato di segno, lungo 2 byte. Pu rappresentare un numero compreso tra 32767 (215 1).

In realt, l'unica certezza che gli integer sono definiti, mentre smallint e bigint possono anche non esserlo, in base alle implementazioni. Vengono comunque riconosciuti, ma nulla vieta al sistema di leggere smallint e bigint e assegnare comunque un integer normale. numeric e decimal sono numeri in virgola fissa; rappresentano numeri in cui i due parametr(, )i stanno per:
11

o Big integer: convenzionalmente un numero intero, dotato di segno, lungo 8 byte. Pu rappresentare un numero compreso tra 263 1.

P = Precision numero totale di cifre decimali per il numero.

S = Scale quante di quelle cifre vanno intese dopo la virgola.

Sta per varying character. Con questa stringa stiamo chiedendo di creare un attributo che si chiami name e abbia al pi 60 caratteri.

41

Ad esempio:
stip_annuo numeric (8,2)

Lezioni di Basi di dati

2010-2011

pu restituire un valore per stip_annuo al pi pari a 999999,99 (ossia: 8 cifre totali, di cui 2 dopo la virgola). numeric assume che P ed S siano valori esatti.

Tra i domini numerici vi sono ancora i numeri in virgola mobile. Ricordiamo che un numero in virgola mobile ha una struttura del tipo:

decimal ha la stessa struttura, ma (, ) indica il valore minimo: se ci sono pi risultati, la precisione maggiore.

anche se lo rappresentiamo cos, la forma vera include soltanto la mantissa e l'esponente. Ad esempio, il numero 2,5 non viene immagazzinato cos come l'abbiamo scritto, ma il sistema binario e nella forma:

abbiamo eliminato 0., perch sappiamo che sempre presente nella rappresentazione; allo stesso modo eliminiamo la base, perch sempre 10. In conclusione, si memorizza solo la mantissa (25) e l'esponente (uno). La realt che quelli che chiamiamo numeri reali, in un calcolatore vengono sempre immagazzinati come numeri in virgola mobile la tipica forma di rappresentazione, quell'elementare, di un numero in virgola mobile e su 4 byte. Quindi abbiamo una variabilit sull'esponente compresa tra 127, e 24 cifre binarie significative, che tradotto in decimale significa avere una precisione (affidabilit) alla terza cifra decimale, ossia al millesimo. Osservazione: i numeri reali in matematica sono infiniti, ma in un calcolatore no! Un elaboratore elettronico in grado di rappresentare un sottoinsieme finito dei numeri in .
real float [(precision)] double precision

1 3

max 127

I tipi numerici in virgola mobile si identificano quindi con i domini numerici approssimati:

42

2010-2011

real e float sono normalmente a 4 byte (vale quanto detto poc'anzi), anche se possibile specificare quante cifre decimali si desiderano mediante "precision". double precision un dominio a: 4 1 7

Lezioni di Basi di dati

E se la tipica rappresentazione, perch consente di rappresentare correttamente fino a 67 cifre decimali dopo la virgola. I numeri non sono mai reali, ma sono sempre un sottoinsieme. Anche aumentando la precisione, rimangono dei buchi. Inoltre la rappresentazione in virgola mobile non uniforme: per capire questo concetto, immaginiamo di mettere su un asse cartesiano tutti i valori possibili esistenti; ricordando che la numerosit dei numeri reali , e che nei calcolatori ne rappresentiamo un sottoinsieme finito, si osserva che questo sottoinsieme non ha una spaziatura uniforme. Al contrario di quanto si potrebbe pensare (cio, a un campionamento uniforme di un sottoinsieme finito), ci sono molti pi campioni tra i numeri piccoli, man mano che ci si avvicina ad essi. La logica che se il numero molto grande, la sfumatura conta meno, mentre nei numeri piccoli bisogna fare pi attenzione, perch anche cambiamenti minimi possono influire maggiormente.

Domini orientati al tempo


sono i seguenti: 1) Istanti (data e ora)
time [(p)] date timestamp [(p)] hh:mm:ss [with time zone] yyyy:mm:dd yyyy:mm:dd:hh:mm:ss [with time zone]

2) Intervalli di tempo
interval FirstTimeUnit [to LastTimeUnit]

I domini sul tempo esistono a partire da SQL2, e violano (scientemente) la definizione di relazione. La relazione ha infatti attributi atomici: l'attributo una cosa sola, indivisibile. Al contrario, tutto ci che ha a che fare con la rappresentazione temporale tutt'altro che indivisibile, perch strutturato. In SQL prima versione non esistevano questi domini, stava all'utente decidere come rappresentare il tempo. Il tempo ha il "difetto" di cambiare da ss a mm, etc, Mentre nel sistema decimale, arrivati a nove si passa alla cifra posizionata pi a sinistra, pi significativa. Prima si accettava questo limite. time una terna hh:mm:ss, e in quanto tale e strutturata, cio composta da pi parti. Per esempio scriver 14:10:12.

43

date

anch'essa strutturata, come

yyyy:mm:dd , ad es. 2012:03:03

Lezioni di Basi di dati

2010-2011

[with time zone] significa che il tipo accetta la definizione anche con riferimento a UTC (Greenwich). Il tipo "tempo" accetta un valore a terna hh:mm:ss, e un ulteriore valore preceduto da un segno pi o meno, quindi compreso tra 13 e 12, a seconda dello switch che si pu avere da un lato e dall'altro. Per esempio, se in Italia sono le 11:06:20, posso scrivere:
10:06:20 (+1)

[(p)]

indica la precisione, opzionale, che va tra 0 (default) e 6, e rappresenta le frazioni di secondo che il sistema deve tener presenti nella dichiarazione dell'attributo. Si va quindi da 0 che vuol dire "secondo"= unit minima a 1 = decimi di secondo fino a 6 = milionesimi di secondo 106 = 1.

Per default [(p)] (0), cio il tempo interpretato come hh:mm:ss.

Se vogliamo i centesimi di secondo, scriviamo: time (2) ed avremo hh:mm:ss,centesimi di secondo timestamp 12 una "marca temporale" e serve a moltissimi scopi. Per come rappresentato un attributo lunghissimo:
yyyy:mm:dd:hh:mm:ss [with time zone]

e per default la sua precisione a (-6), cio al micro secondo, per cui pu essere solo ridotta. Con questo dominio si cerca di marcare temporalmente l'istante. Un attributo di questo tipo serve per aiutare a definire l'istante, perch in tanti contesti necessario individuare nella maniera pi precisa possibile il "momento del tempo". Per marcare un evento pu essere fondamentale essere il pi per esempio, se vogliamo conoscere l'istante in cui avvenuta una catastrofe. Anche timestamp pu avere il "time zone", perch presente l'orario.

12

stamp = marca, francobollo

44

2010-2011

interval serve alla rappresentazione degli intervalli di tempo. Esistono due tipi di rappresentazione ammessi e funzionano cos:
year [(p)] to month [(p)] day [(p)] to second [(p)]
13 14

Lezioni di Basi di dati

Se ad esempio vogliamo definire l'attributo eta (Estimated Time of Arrival):


eta interval year (2) to month

stiamo rappresentando gli intervalli costituiti al pi da 99 anni dato che abbiamo specificato due cifre per gli anni; 11 mesi ossia un intervallo di "un secolo meno un mese". N.B. Il massimo per i mesi 11, ovviamente: dal 12 scatta un altro anno. Altro esempio:
eta interval day (2) to second

stiamo rappresentando gli intervalli costituiti al pi da 99 giorni dato che abbiamo specificato due cifre per gli anni; 23 ore 59 minuti 59,999999 secondi

ossia un intervallo di "100 giorni meno un milionesimo di secondo". Un esempio di operazione sullattributo eta interval year (2) to month:
57:3 (-) 1:4 55:11

Quindi, indicando la precisione di year, day, second, sto definendo il dominio dell'intervallo nelle sue parti. N.B. per gli intervalli precisione non ha limiti (ma sul sito Oracle c scritto che la precisione massima accettata 9 per tutti i tre domini year, day, second).

13 14

Il valore di default per year [(p)] 2. Month va da 0 a 11. Il valore di default per day [(p)] 2, ossia permette di scrivere intervalli di massimo 99 giorni; il valore di default per second [(p)] 6, che indica la precisione decimale dopo la virgola. Quindi di default si pu scrivere un intervallo preciso al (milionesimo di secondo). Nota bene: queste indicazioni differiscono da quelle di Di Sciascio, ma sono state prese da: http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#i54330, numeri 182 e 183, e da http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements001.htm#autoId18, sezione INTERVAL DAY TO SECOND Datatype

45

CREAZIONE DI UNA TABELLA


Proviamo a creare una tabella.
create table <table_name>

Lezioni di Basi di dati

2010-2011

(<attr_name> domain [default <value>][constraint] {,[<attr_name> domain [default <value>][constraint]} {,[further_constraints]})

Abbiamo innanzitutto la parola chiave create table, seguita dal nome della tabella. Tutto ci che della tabella definito, racchiuso tra parentesi tonde ( ) obbligatorie. Una tabella contiene: la definizione di uno o pi attributi secondo la struttura che ci siamo data precedentemente. Deve essere presente almeno un attributo. Dopo la sequenza degli attributi che possono essere 0 oppure ulteriori vincoli, tra parentesi graffe { }, non direttamente associati agli attributi.

Ad esempio, per sicurezza, scegliamo un dominio noto e creiamo la tabella "studente". Quali attributi dobbiamo dare a questa tabella? Sicuramente:

nome varchar (70) non il caso di assegnare un valore di default esplicito anche perch fondamentale che chi si immatricola inserisca un nome. Quindi non solo non metter un valore di default, ma impongo il vincolo: not null, perch l'attributo nome" deve avere necessariamente un valore. Avr quindi:
nome varchar (70) not null, 15

cognome varchar (70) anche qui impongo il vincolo di non nullit, cio non ammissibile l'inserimento di una tupla in cui non vi siano nome e cognome; vogliamo poi memorizzare l'iniziale del middle name (m_name). Quindi avremo:
m_name char, 16

matricola la definiamo come numero intero:


matricola int,

codice fiscale (CF):


CF char (16), 17

bisogner poi inserire altre cose, che vedremo in seguito. Sicuramente la matricola sar chiave.

Per ogni stringa c' una virgola che fa da separatore. Per default, char=1. Inoltre, si consente che possa essere anche null. 17 inutile utilizzare varchar, perch CF sempre composto da 16 cifre.
15 16

46

2010-2011

Ricordiamo:

Lezioni di Basi di dati

chiave primaria: chiave candidata: superchiave:

chiave candidata arbitrariamente scelta; superchiave minima sottoinsieme di attributi in grado di individuare univocamente una tupla. key, che

matricola dunque una chiave candidata, nonch la nostra chiave primaria. Nella stringa di "matricola" dobbiamo esprimere il vincolo primary caratterizza quell'attributo.

Nel momento in cui abbiamo scritto che chiave primaria, matricola automaticamente diventa not null. In definitiva abbiamo:
create table studente ( nome varchar (70) not null, cognome varchar (70) not null, m_name char, matricola int primary key, CF char (16), ... )

N.B. Se la chiave fosse costituita da pi attributi, come nell'esempio di "esame sostenuto", in cui era la terna (matricola, data_esame, cod_esame) a costituire la chiave, non posso scrivere "primary key" vicino ciascun attributo. Questo perch, appena il sistema legge "primary key", interpreta quell'attributo come chiave primaria. Se, successivamente legge ancora "primary key", assume che sia una chiave primaria duplicata, quindi non la accetta. Il problema si risolve banalmente ponendo la definizione della chiave primaria come further constraint. Durante la definizione di ciascun attributo che costituisce la chiave non si scrive niente; dopo averli dichiarati tutti, scrivo:
primary key (matricola, data_esame, cod_esame)

47

E quindi:
create table esame_sostenuto ( nome varchar (70) not null, cognome varchar (70) not null, m_name char, matricola int, data_esame date, cod_esame char (5), ...

Lezioni di Basi di dati

2010-2011

primary key (matricola, data_esame, cod_esame), )

Fine lezione 26 maggio

48

Potrebbero piacerti anche