dentro la scatola - mondo digitalearchivio-mondodigitale.aicanet.net/rivista/06_numero_3/rub... ·...

8
MONDO DIGITALE •n.2 - giugno 2006 65 1. INTRODUZIONE L’ informatica può essere definita come la scienza che si occupa della rappresenta- zione e della gestione dell’informazione per mezzo di macchine digitali. Il problema della rappresentazione dell’informazione riguarda lo studio di metodi di descrizione appropriati al- l’elaborazione da parte di una macchina digita- le; consiste perciò nell’astrarre i concetti impor- tanti per la realtà applicativa di interesse da quelli trascurabili. Il problema della gestione ri- guarda invece l’uso e la trasformazione del- l’informazione in maniera funzionale al proble- ma applicativo da risolvere. Ancora ai tempi di Turing, non era chiaro se fos- se più opportuno utilizzare un modello di calco- lo che distinguesse in maniera netta questi due aspetti; infatti, nella computazione basata sul- la macchina di Von Neumann, che è diventata il modello standard di elaboratore, vi è una netta distinzione tra il ruolo dei programmi (preposti alla gestione dell’informazione) e quello dei dati (il cui ruolo è rappresentarla). La macchina concreta proposta da Turing, in al- ternativa, prevedeva che i programmi potesse- ro agire anche su parti del programma stesso, e così, eventualmente, automodificarsi; questo approccio è presente nella disciplina dell’Intel- ligenza Artificiale, i cui tipici linguaggi di pro- grammazione hanno un paradigma che per- mette al programma di modificare se stesso. A parte questa disciplina, però, nell’informatica l’approccio “a-la-Von Neumann” è rimasto quello più comune, e ha dato luogo anche alla tradizione di mantenere in memoria centrale (o virtuale) il(i) programma(i) in elaborazione, mentre i dati, che di solito costituiscono un in- sieme piuttosto voluminoso, restano in memo- ria di massa, da “richiamare” all’occorrenza. Anche per questo motivo le comunità degli esperti di rappresentazione dell’informazione e di gestione della stessa sono in qualche modo distinte: i primi si sono concentrati sulla otti- mizzazione della organizzazione e dell’accesso a memoria di massa, per le caratteristiche di persistenza e di maggior quantità di spazio di- sponibile di quest’ultima. L’articolo è organizzato come segue: dopo una breve carrellata sulle nozioni preliminari a pro- DENTRO LA SCA DENTRO LA SCA TOLA TOLA Rubrica a cura di Fabio A. Schreiber Dopo aver affrontato negli scorsi anni due argomenti fondanti dell’Informatica – il modo di codificare l’informazione digitale e la concreta possibilità di risolvere problemi mediante gli elaboratori elettronici – con questa terza serie andiamo ad esplorare “Come parlano i calcolatori ”. La teoria dei linguaggi e la creazione di linguaggi di programmazione hanno accompagnato di pari passo l’evolversi delle architetture di calcolo e di gestione dei dati, permettendo lo sviluppo di applicazioni sempre più complesse, svincolando il programmatore dall’architettura dei sistemi e consentendogli quindi di concentrarsi sull’essenza del problema da risolvere. Lo sviluppo dell’Informatica distribuita ha comportato la nascita, accanto ai linguaggi per l’interazione tra programmatore e calcolatore, anche di linguaggi per far parlare i calcolatori tra di loro – i protocolli di comunicazione. Inoltre, la necessità di garantire la sicurezza e la privatezza delle comunicazioni, ha spinto allo sviluppo di tecniche per “non farsi capire” da terzi, di quì l’applicazione diffusa della crittografia. Di questo e di altro parleranno le monografie quest’anno, come sempre affidate alla penna (dovrei dire tastiera!) di autori che uniscono una grande autorevolezza scientifica e professionale ad una notevole capacità divulgativa. Linguaggi per Basi di Dati Letizia Tanca

Upload: phamkhue

Post on 16-Feb-2019

212 views

Category:

Documents


0 download

TRANSCRIPT

M O N D O D I G I T A L E • n . 2 - g i u g n o 2 0 0 665

1. INTRODUZIONE

L’ informatica può essere definita come lascienza che si occupa della rappresenta-

zione e della gestione dell’informazione permezzo di macchine digitali. Il problema dellarappresentazione dell’informazione riguarda lostudio di metodi di descrizione appropriati al-l’elaborazione da parte di una macchina digita-le; consiste perciò nell’astrarre i concetti impor-tanti per la realtà applicativa di interesse daquelli trascurabili. Il problema della gestione ri-guarda invece l’uso e la trasformazione del-l’informazione in maniera funzionale al proble-ma applicativo da risolvere.Ancora ai tempi di Turing, non era chiaro se fos-se più opportuno utilizzare un modello di calco-lo che distinguesse in maniera netta questi dueaspetti; infatti, nella computazione basata sul-la macchina di Von Neumann, che è diventata ilmodello standard di elaboratore, vi è una nettadistinzione tra il ruolo dei programmi (prepostialla gestione dell’informazione) e quello deidati (il cui ruolo è rappresentarla).La macchina concreta proposta da Turing, in al-

ternativa, prevedeva che i programmi potesse-ro agire anche su parti del programma stesso, ecosì, eventualmente, automodificarsi; questoapproccio è presente nella disciplina dell’Intel-ligenza Artificiale, i cui tipici linguaggi di pro-grammazione hanno un paradigma che per-mette al programma di modificare se stesso. Aparte questa disciplina, però, nell’informatical’approccio “a-la-Von Neumann” è rimastoquello più comune, e ha dato luogo anche allatradizione di mantenere in memoria centrale (ovirtuale) il(i) programma(i) in elaborazione,mentre i dati, che di solito costituiscono un in-sieme piuttosto voluminoso, restano in memo-ria di massa, da “richiamare” all’occorrenza.Anche per questo motivo le comunità degliesperti di rappresentazione dell’informazione edi gestione della stessa sono in qualche mododistinte: i primi si sono concentrati sulla otti-mizzazione della organizzazione e dell’accessoa memoria di massa, per le caratteristiche dipersistenza e di maggior quantità di spazio di-sponibile di quest’ultima.L’articolo è organizzato come segue: dopo unabreve carrellata sulle nozioni preliminari a pro-

DENTRO LA SCADENTRO LA SCATOLATOLARubrica a cura diFabio A. Schreiber

Dopo aver affrontato negli scorsi anni due argomenti fondanti dell’Informatica – il modo dicodificare l’informazione digitale e la concreta possibilità di risolvere problemi mediante glielaboratori elettronici – con questa terza serie andiamo ad esplorare “Come parlano i calcolatori”.La teoria dei linguaggi e la creazione di linguaggi di programmazione hanno accompagnato dipari passo l’evolversi delle architetture di calcolo e di gestione dei dati, permettendo losviluppo di applicazioni sempre più complesse, svincolando il programmatore dall’architetturadei sistemi e consentendogli quindi di concentrarsi sull’essenza del problema da risolvere.Lo sviluppo dell’Informatica distribuita ha comportato la nascita, accanto ai linguaggi perl’interazione tra programmatore e calcolatore, anche di linguaggi per far parlare i calcolatoritra di loro – i protocolli di comunicazione. Inoltre, la necessità di garantire la sicurezza e laprivatezza delle comunicazioni, ha spinto allo sviluppo di tecniche per “non farsi capire” daterzi, di quì l’applicazione diffusa della crittografia.Di questo e di altro parleranno le monografie quest’anno, come sempre affidate alla penna(dovrei dire tastiera!) di autori che uniscono una grande autorevolezza scientifica e professionalead una notevole capacità divulgativa.

Linguaggi per Basi di DatiLetizia Tanca

M O N D O D I G I T A L E • n . 2 - g i u g n o 2 0 0 6

1

0

0

0

1

66

posito delle basi di dati, introdurremo i modellidei dati, e in particolare il modello relazionale;questa trattazione preliminare è necessaria,perché per parlare di linguaggi per basi di datinon si può prescindere dalle definizioni più im-portanti di questa disciplina. Ci concentreremoquindi sui linguaggi di interrogazione per le ba-si di dati relazionali, che costituiscono oggi il90% dei sistemi in uso, e infine faremo ancheun breve riferimento ai sistemi e ai linguaggi diinterrogazione orientati agli oggetti.Lo sforzo dei ricercatori e dei progettisti di lin-guaggi di interrogazione continua comunque aconcentrarsi anche sullo studio di proprietàmatematiche (logiche o algebriche) dei lin-guaggi, che richiede l’uso di formalismi appro-priati. Per questo motivo sono stati da lungotempo introdotti i cosiddetti linguaggi formalidi interrogazione, cui sarà specificamente dedi-cato un altro articolo di questa serie.

2. NOZIONI PRELIMINARI

Nei sistemi informatici (e non solo in essi), leinformazioni vengono rappresentate attraversoi dati. Le informazioni sono le notizie, gli elemen-ti che consentono di avere conoscenza più o me-no esatta di fatti, situazioni, modi di essere. I da-ti sono ciò che è immediatamente presente allaconoscenza, prima di ogni elaborazione; in pra-tica, nell’informatica sono costituiti da simboliche debbono essere elaborati. Per esempio, ilnumero 30 è un dato, ma costituisce informazio-ne solo se inquadrato in un contesto di riferi-mento: “Mario ha 30 anni” oppure “Giovanni haottenuto 30 all’esame di Informatica”.Una base di dati è una collezione di dati, utiliz-zati per rappresentare le informazioni di inte-resse per una o più applicazioni di una organiz-zazione. Una tale collezione di dati è però parti-colarmente efficace se se ne mette in evidenzala capacità informativa, organizzandola secon-do una struttura, detta modello dei dati, mante-nuta e gestita da un apposito sistema. Un mo-dello dei dati è un insieme di costrutti utilizzatiper organizzare i dati di interesse e descrivernela dinamica; i componenti fondamentali di unmodello dei dati sono perciò i suoi meccanismidi strutturazione (o costruttori di tipo). Peresempio, il modello relazionale prevede il co-struttore relazione (tabella), che permette distrutturare la base di dati in insiemi di record

che hanno tutti la stessa forma. Tale strutturarealizza, di fatto, una organizzazione logica deidati, che permette di trasformare i dati stessi ininformazioni. Con riferimento all’esempio citatosopra, il dato “30”, ritrovato nel record relativoall’esame di Informatica dello studente Giovan-ni, nel campo VOTO, fornisce l’informazione cheGiovanni ha ottenuto 30 all’esame.Un Sistema di Gestione di Basi di Dati (DataBaseManagement System, DBMS) ha il compito di:❑ mantenere i dati strutturati secondo un mo-dello dei dati;❑ condividere i dati tra più applicazioni: poichéle stesse informazioni, eventualmente diversa-mente organizzate, possono essere utilizzateda applicazioni diverse, è utile mettere i relatividati a fattor comune, per evitare ridondanze;❑ controllare la concorrenza di vari utenti suglistessi dati: la base di dati è una risorsa condivi-sa, ma per motivi di efficienza occorre elevare ilpiù possibile il livello di concorrenza; ciò vuoldire che il controllo di concorrenza deve scen-dere a un livello di granularità molto basso,eventualmente del singolo record;❑ mettere a disposizione meccanismi di defini-zione della privatezza dei dati e di limitazioniall’accesso (autorizzazioni);❑ garantire l’affidabilità sia delle operazioniche vengono svolte sui dati, sia del dispositivodi memorizzazione;❑ ultimo compito, ma tra i più importanti: per-mettere l’accesso ai dati in lettura e scrittura. Atale scopo, il primo passo consiste nel ritrovarei dati mediante opportuni linguaggi, detti di in-terrogazione. Come vedremo, interrogare unabase di dati mediante questi linguaggi permet-te di accedere in modo diretto ai dati basandosisulle loro proprietà. Su questo aspetto ci con-centreremo in questo articolo.Come già detto, un modello dei dati è una colle-zione di concetti che possono essere usati perrappresentare la realtà: oltre all’esempio delletabelle, possiamo a questo scopo pensare adalberi, grafi ecc.. I modelli costituiscono quindiuna strutturazione semplificata della realtà,che ne accoglie aspetti specifici e aiuta a com-prenderla meglio.Lo schema dei dati, invece, serve per rappre-sentare una specifica parte della realtà di inte-resse, mediante un modello dei dati. Per esem-pio, un modello ad albero si presta in modo na-turale a rappresentare l’albero genealogico o il

M O N D O D I G I T A L E • n . 2 - g i u g n o 2 0 0 6

1

67

0

0

0

1

tracciato di un fiume; un modello a grafo ben sipresta a rappresentare il sistema fluviale o il si-stema stradale di un Paese, mediante il model-lo relazionale organizzo in tabelle gli studenticon i relativi esami e voti.A questo punto, avendo deciso qual è il modellodei dati più opportuno, ed avendo deciso comemodellare la realtà di interesse progettando unoschema, i dati veri e propri, cioè il contenutoinformativo, costituiscono l’istanza della base didati, cioè una collezione di valori che rispetta lastruttura dettata dallo schema. Per esempio,avendo deciso di rappresentare mediante un al-bero la genealogia delle famiglie, la famigliaTanca e la famiglia Rossi saranno istanze di albe-ri genealogici. La rete viaria della Germania co-me è nella cartina edita il giorno 22 febbraio2006 sarà un’istanza dello schema di rete viariabasato sul modello a grafo, mentre i dati suglistudenti e gli esami del Politecnico di Milano, inquesto preciso istante, sono un’istanza della ba-se di dati relazionale rappresentante studenti edesami di cui sopra. Possiamo anche dire che,mentre lo schema descrive i dati a livello inten-sionale, fornendone, cioè, le proprietà struttura-li, l’istanza ne esibisce l’aspetto estensionale, ecioè costituisce l’informazione stessa.In un DBMS i dati si possono vedere, o megliodescrivere, a livelli diversi. Questa possibilitàpermette di liberare da una parte il progettistadella base di dati, dall’altra il programmatoredelle applicazioni, dalla preoccupazione di co-me i dati sono fisicamente organizzati in memo-ria di massa, concentrandosi sul loro significatopiuttosto che sulla loro organizzazione fisica.Il più alto livello di astrazione è il livello esterno,o delle applicazioni. A questo livello, i program-mi applicativi vedono i dati organizzati secondoil modello dei dati del DBMS prescelto (o an-che, eventualmente, secondo modelli diversi),ma con una visione personalizzata, detta vista,che permette di trascurare dati non di pertinen-za di quell’applicazione, riorganizzando i dati dipertinenza in maniera appropriata e allo stessotempo realizzando il controllo della privatezzadelle informazioni. Il livello logico, immediata-mente sottostante, descrive i dati, sempre inaccordo col modello dei dati del DBMS, ma se-condo una visione comune, che prevede l’orga-nizzazione dei dati stessi in uno schema unico.Infine, il livello fisico descrive il modo in cui i da-ti sono organizzati nel supporto fisico di memo-

rizzazione, tipicamente il disco magnetico, cheperò è oggigiorno affiancato anche da altre tec-nologie, come i dischi ottici o le memorie flash.La figura 1 mostra la cosiddetta ArchitetturaANSI/SPARC delle moderne basi di dati. Il siste-ma di gestione della base di dati si fa carico dimantenere lo schema logico dei dati indipen-dente dalle strutture fisiche di memorizzazio-ne, realizzando dunque una proprietà fonda-mentale delle moderne basi di dati, la cosiddet-ta indipendenza dei dati. L’accesso avviene in-fatti solo tramite il livello esterno (le cosiddetteviste d’utente)che può, nel caso di un sistemainformativo semplice, con esigenze poco diver-sificate, coincidere con il livello logico. Il DBMSgarantisce il disaccoppiamento tra il livelloesterno e quello logico (indipendenza logica),facendo in modo che aggiunte o modifiche alleviste non richiedano modifiche al livello logicoe viceversa, e tra il livello logico e quello fisico(indipendenza fisica), facendo in modo che lemodifiche allo schema logico lascino inalteratal’organizzazione fisica dei dati e viceversa.Coerentemente con quanto detto, i DBMS pre-vedono due tipi principali di modelli dei dati: imodelli fisici, che servono per organizzare i datiin memoria di massa tenendo conto della strut-tura a blocchi dei dischi, e i modelli logici, chevengono usati dai programmi e dagli umani perriferirsi ai dati descrivendoli mediante unoschema logico, sia al livello logico che al livelloesterno (o delle viste d’utente).

Livello esterno(vista)

Livello esterno(vista)

Livello esterno(vista)

Schema logico

Schema interno

Gestione del file

Livello fisico

Dati

OS

DBMS

Record

Pagina

Blocco

Utente Utente Utente Utente Utente Utente

FIGURA 1Architettura ANSI/SPARC delle moderne basi di dati

M O N D O D I G I T A L E • n . 2 - g i u g n o 2 0 0 6

1

0

0

0

1

68

I modelli fisici sono utilizzati nei DBMS esisten-ti, ma ad essi fa riferimento solo il DBMS perrealizzare le strutture fisiche di memorizzazio-ne (schema interno); esempi di tali modelli so-no strutture indicizzate come alberi bilanciati(B-tree, B+-tree), file sequenziali, file ordinati,file organizzati con strutture hash ecc.. I model-li logici sono pure utilizzati nei DBMS esistenti,ma ad essi fanno riferimento i programmi, i pro-gettisti e gli utenti finali per vedere i dati orga-nizzati in accordo con il loro significato.

3. IL MODELLO RELAZIONALEDEI DATI

I tre modelli logici dei dati tradizionali sono ilmodello gerarchico, quello reticolare e quellorelazionale. I modelli gerarchico e reticolare so-no basati, rispettivamente, su strutture ad al-bero e su strutture a grafo. Sono modelli inrealtà abbastanza vicini alle strutture fisiche dimemorizzazione, poiché in essi i record conten-gono al loro interno dei puntatori che fanno dariferimento ad altri record ad essi collegati. Pertornare all’esempio degli studenti, dei corsi edegli esami, in una base di dati gerarchica o re-ticolare ogni record relativo a un esame conter-rebbe dei puntatori, rispettivamente, al recorddel corso e a quello dello studente. Si realizzaperciò una struttura logica “sovrapposta” aquella fisica, con una evidente perdita di indi-pendenza dalla struttura di memorizzazione.Il modello relazionale è più astratto e meglio sipresta a realizzare tale proprietà, in quanto intale modello i record non possono contenerepuntatori ad altri record, ma i riferimenti fra da-ti in record appartenenti a strutture (relazioni)diverse sono rappresentati per mezzo dei valoridei dati stessi. Per esempio, nel caso relaziona-le il record dell’esame contiene, oltre al voto ealla data, anche il codice del corso e la matrico-la dello studente, che implementano perciò unriferimento basato su valori.Negli ultimi 15 anni, sulla scia dei linguaggi diprogrammazione orientati agli oggetti, è statostudiato anche il modello a oggetti. Il modello aoggetti è un ibrido tra queste due concezioni, inquanto, da una parte, si colloca a un alto livellodi astrazione: il concetto di classe e quello di og-getto fanno infatti riferimento a quello di tipo didato astratto, un’astrazione, appunto, che per-mette di riunire in sé la definizione della struttu-

ra di dati e quella dei sottoprogrammi che imple-mentano le operazioni. D’altra parte, l’oggettoha un suo identificatore che permette ai pro-grammi e agli altri oggetti di far riferimento adesso, e che in un certo senso svolge il ruolo delpuntatore esplicito dei modelli reticolare e ge-rarchico. In questo articolo ci concentreremo suilinguaggi per basi di dati relazionali, che costi-tuiscono ormai l’80% dei sistemi di gestione dibasi di dati esistenti. A tale scopo, introdurremobrevemente il modello relazionale dei dati.Il modello relazionale fu proposto nel 1970 daEdgar F. Codd, in un articolo fondamentale1, perfavorire l’indipendenza dei dati, ma reso dispo-nibile come modello logico in DBMS reali nel1981; non è facile infatti implementare l’indi-pendenza mantenendo i necessari livelli di effi-cienza e affidabilità. Esso si basa sul concettomatematico di relazione.In matematica, si dice relazione un qualsiasisottoinsieme del prodotto cartesiano di uno opiù insiemi, detti domini. Il numero di tali insie-mi è detto grado, o arità, della relazione, men-tre il numero dei suoi elementi è la sua cardina-lità. Consideriamo per esempio tre insiemi: l’in-sieme M di tutte le possibili matricole di stu-denti, composto da stringhe alfanumeriche dilunghezza 6, i cui primi due caratteri sono alfa-betici e i restanti quattro sono numerici; l’insie-me C di tutti i possibili codici di corsi, compostoda stringhe numeriche di lunghezza 5, e l’insie-me V dei voti possibili, cioè i numeri compresitra 18 e 31 (che rappresenterà il 30 e lode). Unarelazione matematica su M X C X V sarà un qual-siasi sottoinsieme di questo prodotto cartesia-no, e avrà grado 3. I suoi elementi saranno leterne ordinate che al primo posto hanno unamatricola, al secondo un codice corso e al terzoun valore compreso tra 18 e 31. Un esempio direlazione è presente in tabella 1.

1 E. F. Codd: A Relational Model of Data for Large Shared Da-ta Banks. Commun. ACM, Vol. 13, n. 6, 1970, p. 377-387.

AB3145 56747 28

AC1455 44567 24

BA3768 98709 30

AG5676 88076 19

TABELLA 1

M O N D O D I G I T A L E • n . 2 - g i u g n o 2 0 0 6

1

69

0

0

0

1

Nel modello relazionale si apportano alcune va-riazioni a questo concetto fondamentale. Innan-zitutto, una relazione avrà sempre un numero fi-nito di elementi. Inoltre, mentre le n-uple di unarelazione matematica sono ordinate, cioè l’i-esi-mo valore di ciascuna proviene dall’i-esimo do-minio, nel modello relazionale dei dati si preferi-sce identificare i domini mediante dei nomi, dettiattributi, che permettono di riferirsi ai valori pre-senti in una n-pla senza dover conoscere la loroposizione, che diventa irrilevante. Nel modello re-lazionale, le n-ple così ottenute si chiamano tuple.A questo punto, una relazione è un insieme dituple, e può essere appropriatamente visualiz-zata come una tabella dove:1. i valori di ciascuna colonna sono fra loro omo-genei (cioè appartengono allo stesso dominio),2. le righe (tuple) sono diverse fra loro (ricordia-mo che si tratta di un insieme),3. le intestazioni delle colonne sono diverse traloro, e perciò i campi sono distinguibili median-te il loro nome e non la loro posizione. Semprepensando al nostro esempio, le due relazionipresenti in tabella 2 e in tabella 3 sono perfet-tamente equivalenti.Si vede ora che, come già abbiamo avuto occa-sione di dire, il modello relazionale è basato suvalori, cioè i riferimenti fra dati in relazioni di-verse sono rappresentati per mezzo di valoridei domini che compaiono nelle tuple. In talmodo si realizza la desiderata indipendenzadalle strutture fisiche, che possono cambiaredinamicamente, si rappresenta solo ciò che èrilevante dal punto di vista dell’applicazione(dell’utente), i dati sono portabili piu’ facilmen-te da un sistema ad un altro, e i riferimenti sonobidirezionali, contrariamente al caso dei punta-tori, che sono direzionali. Ovviamente, a livellofisico le strutture di memorizzazione sfruttanopuntatori per quanto necessario all’implemen-tazione efficiente delle operazioni, in modocompletamente trasparente all’utente.Data una relazione R sui domini D1, …Dn, loschema di R è dato dal nome R seguito dall’in-sieme dei suoi attributi A1,..., An, e si indica conR (A1,..., An). Un insieme di schemi di relazionecon nomi diversi:R = {R1 (_X1_), ..., Rn (_Xm_)} (ove _Xi_ è il vetto-re degli attributi della relazione Ri) costituisce loschema di una base di dati. Un’istanza di relazio-ne su uno schema R (X) è un insieme di tuple suX, mentre un’istanza di base di dati su uno sche-

ma R = {R1 (X1), ..., Rm (Xm)} è un insieme di mistanze di relazioni sugli elementi di R.Un altro concetto molto importante è quello dichiave di una relazione: si tratta di un insieme(minimale) di attributi che identifica univoca-mente le tuple di quella relazione. Una piccolis-sima base di dati relazionale, contenente infor-mazioni su studenti, corsi ed esami, potrebbeavere il seguente schema, dove gli attributi sot-tolineati costituiscono le chiavi:

CORSI (CodiceCorso, NomeCorso,Docente,Seme-stre,N_Crediti)STUDENTI (MatricolaStudente, Nome, Cognome,Indirizzo, CorsoDiLaurea,Anno)ESAMI (MatricolaStudente,CodiceCorso,Voto)

4. LINGUAGGI DI INTERROGAZIONEPER BASI DI DATI RELAZIONALI

Come si è detto in precedenza, uno dei compitipiù importanti del DBMS è permettere ai suoiutenti, siano essi umani o programmi, di ritro-vare i dati mediante i linguaggi di interrogazio-ne, che consentono di accedere in modo direttoai dati basandosi sulle loro proprietà.Supponiamo di essere interessati a trovare i no-mi e cognomi di tutti gli studenti che hanno otte-nuto almeno 28 all’esame di Fondamenti di Infor-matica. Piuttosto che cercare nella tabella CORSIil codice di Fondamenti di Informatica, e poi scan-dire i blocchi del file ESAMI, alla ricerca dei votimaggiori di o uguali di 28 che corrispondono alcodice trovato, e poi ancora cercare nella tabella

Codice corso Matricola Voto

56747 AB3145 28

44567 AC1455 24

98709 BA3768 30

88076 AG5676 19TABELLA 2

TABELLA 3

Matricola Codice corso Voto

AB3145 56747 28

AC1455 44567 24

BA3768 98709 30

AG5676 88076 19

M O N D O D I G I T A L E • n . 2 - g i u g n o 2 0 0 6

1

0

0

0

1

70

STUDENTI i nomi e cognomi corrispondenti allematricole rintracciate, un utente certamente pre-ferisce semplicemente enunciare, in un opportu-no linguaggio: “voglio trovare tutti gli studentiche hanno ottenuto almeno 28 all’esame di Fon-damenti di Informatica”, così dichiarando qualeproprietà i dati richiesti debbano soddisfare.Oltre che per interrogare, si ha bisogno di intera-gire con la base di dati per altre due ragioni fon-damentali. Da una parte, dobbiamo essere ingrado di creare, modificare ed eventualmentecancellare componenti dello schema, dall’altra,invece, dobbiamo essere in grado di inserire,modificare e cancellare tuple, cioè l’istanza dellabase di dati. Qualunque sia il modello dei datisottostante, i linguaggi per basi di dati sonodunque tradizionalmente composti da due in-gredienti fondamentali: il Linguaggio di Defini-zione dei Dati (Data Definition Language, DDL) eil Linguaggio di Manipolazione dei Dati (DataManipulation Language, DML), operanti, rispet-tivamente, sullo schema e sull’istanza della ba-se di dati. Il linguaggio di interrogazione, che an-ch’esso opera sull’istanza, è parte del DML.Il linguaggio di interrogazione costituisce peròla parte più importante di questo complesso,poiché l’attività di interrogare è di gran lunga lapiù frequente, e richiede di realizzare i meccani-smi per accedere ai dati, necessari anche a tuttele operazioni di modifica. Questa è quindi la par-te che richiede un maggiore sforzo da parte deiprogettisti del linguaggio, sia dal punto di vistadell’ottimizzazione, sia per concepire linguaggila cui semantica sia ben chiara all’utente.Un linguaggio di interrogazione dipende dal mo-dello logico dei dati: si intuisce infatti che, per quan-to dichiarativa, la struttura della interrogazionedebba far riferimento alla percezione che l’uten-te ha della struttura dei dati. Per i modelli logici ba-sati su riferimenti, come quello gerarchico, il reti-colare, o il modello a oggetti, l’utente dovrà co-munque, nello scrivere una interrogazione, far ri-ferimento ai legami tra gli oggetti; viceversa, in unmodello basato su valori, come quello relaziona-le, poiché tali legami sono espressi attraverso i da-ti stessi, essi vengono introdotti come condizionisui dati, analogamente alle proprietà che i dati deb-bono soddisfare. Per esempio, la specifica dell’in-terrogazione “trovare tutti gli studenti che hannoottenuto almeno 28 all’esame di Fondamenti diInformatica” conterrà anche l’indicazione che il co-dice dell’esame cercato nella tabella ESAMI dovrà

essere uguale al codice del corso di Fondamentidi Informatica trovato nella tabella CORSI.Lo sforzo dei ricercatori e dei progettisti di lin-guaggi di interrogazione si è da lungo tempoconcentrato sul concepire linguaggi dichiarativi,linguaggi cioè che mascherano i dettagli deimeccanismi di esecuzione permettendo all’u-tente di trascurare l’aspetto implementativo econcentrarsi sulla natura dei dati ricercati. Perquesto motivo, al lavoro dei progettisti di DBMSsi è associato quello di generazioni di ricercato-ri, che hanno escogitato linguaggi formali di in-terrogazione, che, pur mantenendo l’equivalen-za con i costrutti dei linguaggi adottati daiDBMS commerciali, si lasciassero studiare intermini di proprietà matematiche (logiche o al-gebriche), prestandosi a ragionamenti non am-bigui. A questi linguaggi sarà specificamente de-dicato un altro articolo di questa serie.Si noti che il risultato di qualsiasi interrogazio-ne a una base di dati relazionale è sempre unarelazione, cioè un insieme di tuple che soddisfale proprietà specificate.Tra i linguaggi commerciali per basi di dati, nesono stati concepiti di due categorie fondamen-tali. La prima comprende i linguaggi testuali,che specificano l’interrogazione in termini distringhe di testo, analogamente alla maggiorparte dei linguaggi di programmazione. Esem-pio principe di questa categoria è il linguaggiorelazionale SQL (Structured Query Language),definito presso i laboratori IBM di San Jose nel-la sua prima versione negli anni ’70 per il primoprototipo di DBMS relazionale, System R.Un esempio di specifica dell’interrogazione diprima in SQL è il seguente:

SELECT Nome, CognomeFROM STUDENTI,ESAMI,CORSIWHERE STUDENTI.Matricola=ESAMI.Matricola ANDESAMI.CodiceCorso=CORSI.CodiceCorso ANDCORSI.NomeCorso=”Fondamenti di Informatica”and ESAMI.Voto>=28.

SQL è un linguaggio molto potente, in grado diesprimere interrogazioni molto sofisticate ed an-che alcune forme elementari di aggregazione,come la media, la somma, e funzioni semplici co-me il minimo e il massimo di un insieme. Bisognaperò stare attenti a non confondere il potereespressivo dei linguaggi di interrogazione perbasi di dati con quello dei linguaggi di program-

M O N D O D I G I T A L E • n . 2 - g i u g n o 2 0 0 6

1

71

0

0

0

1

mazione. Da questi ultimi, infatti, si richiede unpotere espressivo pari a quello della macchina diTuring, poiché mediante un tale linguaggio oc-corre poter esprimere tutte le funzioni computa-bili. Da un linguaggio di interrogazione, invece, sirichiede di essere in grado di esprimere tutte lepossibili condizioni sui dati stessi, e perciò il con-fronto di espressività si fa di solito con la logicadel primo ordine. Senza scendere in dettagli for-mali, per i quali si rinvia il lettore interessato ai li-bri di testo di basi di dati elencati in bibliografia,basti sapere che, nel caso dei linguaggi classiciper basi di dati relazionali, ci si accontenta di unpotere espressivo inferiore (per esempio non èpossibile esprimere cicli), e per le computazionisi ricorre all’immersione delle interrogazioni inprogrammi tradizionali. Nasce così il concetto dilinguaggio “embedded”, espressione che indicail fatto che l’interrogazione viene inserita all’in-terno di un programma scritto in un linguaggio diprogrammazione “ospite”, come ad esempio C oJava. Ciò accade quando l’interrogazione nonviene effettuata da un utente in modo interattivo,ma è inserita in un programma applicativo che in-teragisce con la base di dati.Una categoria di linguaggi commerciali interes-sante, ma utile solo in determinati casi, è quel-la dei linguaggi grafici o visuali, che fornisconointerfacce “amichevoli”, basate su una visualiz-zazione della forma che la tabella risultato del-l’interrogazione dovrebbe avere. Un esempio ditali linguaggi è Query By Example (QBE), la cuipiù famosa realizzazione commerciale è Micro-soft Access©. Come si può intuire, oltre al difet-to di non poter essere immersi in linguaggi diprogrammazione, questi linguaggi hanno ilproblema di essere, sì, molto facili da usare nelcaso di interrogazioni relativamente semplici,ma di avere una semantica poco intuitiva nelcaso di interrogazioni complesse, e pertanto diessere in generale proni ad errori.Nonostante la potenza dei linguaggi di interroga-zione relativamente alle operazione di specificadi dati da cercare, molti ricercatori non sono co-munque soddisfatti del loro potere espressivo. Ilmotivo principale di ciò è un’anomalia che insor-ge nell’uso di questi linguaggi nei programmi ap-plicativi, quando vengono immersi nei linguaggidi programmazione. Si è detto che la risposta aqualsiasi interrogazione relazionale è una rela-zione, il che si esprime dicendo che i linguaggi diinterrogazione relazionali sono orientati agli in-

siemi; i linguaggi di programmazione tradizionaligestiscono però i record uno alla volta (sono, co-me si dice, orientati alle tuple), cioè un program-ma interagente con la base di dati non “si aspet-ta” che la risposta alla interrogazione sia un in-sieme, ma un semplice valore, o un record.Supponiamo ad esempio di voler inserire la no-stra interrogazione in un programma applicativoche stampi l’elenco degli “Studenti Bravi”, defi-nendo come bravi coloro che hanno ottenuto al-meno 28 all’esame di Fondamenti di informatica.Il programma non è in grado di ricevere e stam-pare direttamente l’intero set di studenti chesoddisfano la proprietà richiesta, ma dovrebbecontenere un ciclo che li stampa uno per volta;questo problema viene chiamato disaccoppia-mento di impedenza (impedance mismatch).La soluzione comunemente adottata è l’uso deicursori, un concetto che fa parte da tempo del-l’SQL standard. Un cursore accede al risultatodi una interrogazione in modo “set-oriented”, erestituisce le tuple al programma una per volta.Il frammento di programma seguente svolgel’operazione richiesta.

…exec sql begin declare section;char Nome[20], Cognome[20];exec sql end declare section;exec sql declare StudentiBravi cursor for

SELECT Nome, CognomeFROM STUDENTI,ESAMI,CORSIWHERE STUDENTI.Matricola=ESAMI.Matricola ANDESAMI.CodiceCorso=CORSI.CodiceCorso ANDCORSI.NomeCorso=”Fondamenti di Informatica”ANDESAMI.Voto>=28

exec sql open StudentiBravi;exec sql fetch StudentiBravi into :Nome,:Cognome;printf(“StudentiBravi”);while (sqlca.sqlcode == 0){printf(“Nome Studente: %s %s ”,Nome,Cognome);exec sql fetch StudentiBravi into :Nome,:Cognome;}exec sql close StudentiBravi;}...

Il disaccoppiamento di impedenza è un proble-ma interessante, la cui soluzione pratica non

M O N D O D I G I T A L E • n . 2 - g i u g n o 2 0 0 6

1

0

0

0

1

72

soddisfa molti ricercatori, e che ha spinto la co-munità delle basi di dati a svolgere molta ricer-ca. Alcuni tentativi di soluzione saranno discus-si nell’articolo sui linguaggi formali per basi didati; invece, per quanto riguarda i linguaggicommerciali, una possibile soluzione è costitui-ta dai linguaggi e i DBMS orientati agli oggetti.Questi sistemi offrono alle aree applicative piùavanzate, servite talvolta in modo insoddisfacen-te dai sistemi tradizionali, vantaggi indubbi, siadal lato della ricchezza di strutture messe a di-sposizione dal modello dei dati, sia da quello del-la capacità semantica di modellare dati e com-portamenti in maniera compatta. Per esempio,nei DBMS orientati agli oggetti il disaccoppia-mento di impedenza viene superato dal fatto cheil paradigma del linguaggio di programmazione èlo stesso del linguaggio di interrogazione, perciòo sono entrambi orientati alle tuple o entrambiorientati agli insiemi. D’altra parte, mentre negliultimi anni i linguaggi di programmazione orien-tati agli oggetti, in particolare Java, si sono diffusinell’uso comune, proprio a causa della loroestrema flessibilità e capacità di modellazione, isistemi di gestione di basi di dati orientate aglioggetti non hanno acquistato lo stesso peso nelmondo dell’informatica. Essi presentano infattiuna difficoltà di implementazione che supera digran lunga quella di un linguaggio di program-mazione: in aggiunta alla complessità del lin-guaggio stesso, un sistema di gestione di basi didati deve gestire le informazioni in memoria per-sistente, e quindi risolvere gli usuali problemi diefficienza, consistenza, di condivisione di dati, disicurezza, di privatezza, di eventuale distribuzio-ne dei dati su più siti ecc.. Anche le difficoltà teo-riche non sono banali: si pensi per esempio alconcetto di incapsulamento nei linguaggi di pro-grammazione orientati agli oggetti, e a come

questo contrasti proprio con il principio fondantei linguaggi di interrogazione, che è quello di po-ter reperire tutte le informazioni necessarie inmodo diretto, basandosi su proprietà logiche,senza passare per uno specifico metodo. Un al-tro punto teorico un po’ critico è costituito dal ri-torno, nei linguaggi a oggetti, del collegamentotra concetti basato su riferimenti, che contraddi-ce l’approccio dichiarativo così caro agli speciali-sti delle basi di dati.

5. CONCLUSIONI

Per concludere, vorremmo far notare l’importan-za della comprensione, per tutti gli informatici,dei concetti fondamentali delle basi di dati e deiloro linguaggi. Questo mondo, infatti, mentre dauna parte condivide molti principi di quello deilinguaggi di programmazione, spesso se ne di-scosta per le necessità specifiche dell’obiettivoche si propone: si pensi alla necessità di lin-guaggi dichiarativi, strettamente legata all’esi-genza di mantenere l’indipendenza fisica, o allenecessità di ottimizzazione affatto diverse daquelle di ottimizzazione dei programmi.

Bibliografia

Elencare i riferimenti ai concetti, modelli e lin-guaggi introdotti comporterebbe una lista infi-nita; indichiamo qui soltanto alcuni testi classi-ci sulle basi di dati, dai quali il lettore potrà de-sumere ulteriori riferimenti bibliografici.

Atzeni P., Ceri S., Paraboschi S., Torlone R.: Basidi dati: modelli e linguaggi di interrogazione. 2a

edizione, Mc Graw Hill Italia, 2006.

Elmasri R., Navathe S.: Sistemi di basi di dati.Fondamenti. 4a edizione. Pearson/Addison We-sley, 2004.

LETIZIA TANCA è Professore Ordinario di Basi di Dati presso il Politecnico di Milano, e presidente del Consiglio diCorso di Studi di Ingegneria Informatica del Politecnico di Milano, campus Milano Leonardo. È autrice di di-verse pubblicazioni internazionali sulle basi di dati e sulla teoria delle basi di dati, e del libro “Logic Program-ming and Databases”, scritto con S. Ceri e G. Gottlob. Ha partecipato a vari progetti nazionali e internazionali.I suoi interessi di ricerca riguardano tutta la teoria delle basi di dati, in particolare le basi di dati deduttive, at-tive e orientate agli oggetti, i linguaggi a grafi per basi di dati, la rappresentazione e l'interrogazione di infor-mazione semistrutturata, le basi di dati per piccoli dispositivi.E-mail: [email protected]