



























Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Le basi di dati e le distinge dai fogli di calcolo, spiegando le loro finalità e caratteristiche fondamentali. Vengono discusse le differenze in termini di organizzazione dei dati, schema e istanza, correlazione di dati tra tabelle e l'uso di sistemi di gestione di basi di dati (DBMS).
Tipologia: Appunti
1 / 35
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




























Informatica come disciplina La progettazione dei contenuti di questo insegnamento di Informatica si fonda sulla concezione dell'informatica come disciplina scientifica e non soltanto sul ruolo che l'informatica ha assunto nella società contemporanea. A tal fine, si riporta di seguito un passo significativo del Manifesto dell'Informatica, un documento ufficiale che il GRIN (http://www.grin-informatica.it), l'Associazione Italiana dei Docenti di Informatica, ha sottoscritto per definire il corretto approccio alla disciplina informatica e al suo insegnamento. L'informatica è un elemento essenziale della società moderna, non solo perché necessaria al normale svolgimento di quotidiane attività, ma anche in quanto il suo sviluppo plasma e determina quello dell'intera società. Non esiste campo dell'attività umana in cui le scoperte dell'informatica non abbiano lasciato il segno. L'uso del calcolatore, infatti, è uscito dai campi tradizionali del calcolo scientifico per entrare in tutte le aree della produzione industriale, dalla medicina all'editoria. Due miliardi di persone si collegano ad Internet. Centinaia di milioni di miliardi (il numero non è un errore di battitura) di transistor – i componenti elementari delle tecnologie dell'informazione – popolano i prodotti che ci circondano, dall'automobile all'elettrodomestico, dalla pompa di benzina al videogioco, per l'equivalente della metà del valore economico di questi oggetti. Centinaia di miliardi di istruzioni software, manifestazioni di intelligenza umana, animano questi componenti e attraverso di essi tutti i processi che caratterizzano la nostra società moderna. Nel linguaggio comune il termine “informatica” viene usato per riferirsi a tre aspetti tra loro distinti, seppur collegati:
Nel sentire comune, l'informatica è vista come una disciplina monolitica. Ogni volta che si pensa ad un informatico, si immagina un esperto capace di risolvere qualsiasi problema legato all'uso dei calcolatori. In realtà l'informatica è una disciplina complessa dove si possono riconoscere numerose specializzazioni. Pertanto è possibile, per non dire frequente, che un esperto sviluppi le proprie competenze rispetto a un sottoinsieme di specializzazioni. A titolo esemplificativo, senza alcuna pretesa di completezza, elenchiamo alcune specializzazioni della disciplina informatica: Informatica teorica o Teoria dell'informazione o Teoria della computazione o Algoritmi e strutture dati o Teoria dei linguaggi di programmazione Informatica applicata o Architettura dei calcolatori o Sistemi e architetture (Information Technology - IT) o Reti di calcolatori o Basi di dati o Sicurezza informatica e crittografia o Interazione uomo-macchina o Intelligenza artificiale o Elaborazione digitale dei segnali o Programmazione Sviluppo software Sviluppo web Sviluppo sistemi integrati Inoltre l'informatica può essere coniugata ad altre discipline per dare vita a branche multidisciplinari comead esempio bioinformatica, chimica computazionale, robotica, computer grafica e musicologia computazionale. Storia dell'informatica e nascita del calcolatore Perché si possa arrivare all'informatica come la intendiamo oggi è stato necessario sviluppare parallelamente due diversi aspetti: quello tecnologico e quello filosofico (in particolare logico-matematico). La serie di eventi, idee e scoperte che culmina con i moderni calcolatori ha quindi una moltitudine di protagonisti, disseminati in un arco temporale di almeno 4000 anni, con molte storie parallele. Per quanto il racconto possa essere avvincente e ricco di colpi di scena, non è questa la sede per una esposizione esaustiva. Ci si limiterà pertanto a citare solo alcuni degli aspetti cruciali: quelli più funzionali alla comprensione del pensiero informatico e del funzionamento del calcolatore. Il termine calcolatore designa genericamente un sistema di elaborazione dati, nato in forma meccanica, sviluppatosi in forma analogica e giunto poi alla forma digitale. Generazione 0: I calcolatori meccanici Il più antico strumento di calcolo fu l’abaco, in uso già 4000 anni fa in Cina. Dopo di esso molte furono le scoperte in questo ambito, ma la maggior parte di esse (come ad esempio la pascalina ideata nel 1642 da Blaise Pascal) non vennero mai realizzate. Nel 1702, Gottfried Wilhelm Leibniz sviluppò la logica come disciplina matematica e formale, con i suoi scritti sul sistema numerico binario. Nel suo sistema, l'uno e lo zero rappresentano i valori vero e falso. Questo non ebbe un effetto immediato, ma fu decisivo nel secolo successivo.
Nel 1948, Claude Shannon introdusse il termine bit (contrazione di binary digit), da lui coniato per designare l'unità elementare binaria di informazione (vero e falso, o 0 e 1). Generazione 2: I transistor Nel 1954, l’IBM propose il primo calcolatore commerciale con memoria su nastro magnetico. Tra le più importanti innovazioni di quegli anni, vi furono l'uso dei transistor al posto dei tubi a vuoto e l’evoluzione dei linguaggi di programmazione. Nel 1959 venne lanciato l’IBM 705, che usava il FORTRAN, un linguaggio di programmazione molto più vicino a quello umano rispetto alle istruzioni comprensibili dal calcolatore. I problemi principali che ostacolavano la diffusione commerciale del calcolatore restavano i costi elevati e la dimensione di queste macchine. Generazione 3: I circuiti integrati Il problema delle dimensioni durò fino al 1964, quando l'azienda italiana Olivetti introdusse Programma 101, da molti considerato il primo personal computer (PC) della storia, in quanto disponeva delle principali caratteristiche dei grandi calcolatori dell'epoca, ma era sufficientemente compatto da stare su una scrivania. Tuttavia non aveva uno schermo: le informazioni erano trasmesse all'utente per mezzo di un nastro di carta stampata. Parallelamente, la Digital Equipement Corporation introdusse il suo primo minicomputer, il PDP-8, dotato di uno schermo molto rudimentale (sostanzialmente un oscilloscopio). Generazione 4: Il microprocessore Agli inizi degli anni ’70, la Intel Corporation sviluppò il microprocessore, il primo circuito integrato capace di contenere l’intera unità di calcolo di un calcolatore. In seguito venne commercializzato quello che viene oggi considerato il primo PC della storia per come lo intendiamo oggi, l'Apple II, con il suo sistema operativo chiamato Apple Dos. Solo quattro anni dopo, nel 1981, l’IBM brevettò il suo primo PC, destinato a imporsi come standard di riferimento con il sistema operativo MS-Dos prodotto dalla software house Microsoft. Generazione 5: Il calcolo parallelo e la rete Tra gli anni '80 e '90 si sono affermate in rapida successione tecnologie come le interfacce grafiche, la possibilità di compiere più operazioni in parallelo, e l'avvento di Internet, coadiuvate da un costante incremento della potenza di calcolo e delle capacità di memorizzazione. Problemi, algoritmi e programmi Un algoritmo può essere definito come un metodo per risolvere in modo efficiente, univoco, universale, formalmente preciso e finito un problema. Nella sua accezione più ampia, è possibile includere nella categoria degli algoritmi anche una semplice ricetta di cucina oppure il libretto di istruzioni di un elettrodomestico. Entrambi infatti sono una successione di istruzioni precise per la realizzazione di un risultato. Il termine algoritmo deriva dal nome del matematico Muhammad ibn Musa al-Khuwarizmi. Le proprietà fondamentali di un algoritmo sono: finitezza delle operazioni da svolgere; non ambiguità del linguaggio in cui sono scritte le operazioni da effettuare. Questo significa che le istruzioni devono essere scritte in un linguaggio codificato e formale; universalità della procedura algoritmica, nel senso che essa deve valere per tutti i problemi dello stesso genere;
completezza delle operazioni, nel senso che ogni operazione necessaria allo svolgimento del compito deve essere explicitamente dichiarata. Nonostante sia più semplice affrontare algoritmicamente calcoli matematici, o geometrici, è possibile affrontare nello stesso modo qualsiasi problema, a patto che se ne possa fornirne una definizione formalmente corretta e non ambigua. Questo esercizio di formalizzazione trascende l'uso del computer e aiuta gli individui ad affrontare i problemi in modo astratto. Va notato che ogni problema può essere affrontato e descritto in molti modi diversi; quindi non esiste un unico algoritmo per la risoluzione di un problema. Questo significa che lo sviluppo di algoritmi è un'attività che richiede, tra le altre cose, creatività e ingegno. A tal proposito, vale la pena citare una famosa battuta di Bill Gates (co-fondatore della Microsoft): "Sceglierò sempre un pigro per fare un lavoro difficile perché troverà il modo più facile per farlo". Si sottolinea inoltre come l'efficacia e la complessità di un algoritmo dipendano anche dall'organizzazione dei dati a disposizione dell'algoritmo per la risoluzione del problema. Esistono molti modi di organizzare i dati, ognuno dei quali ha pregi e difetti. In genere gli aspetti più rilevanti di cui tenere conto sono: la quantità di spazio occupato; la velocità con cui è possibile reperire un determinato dato; la facilità con cui si possono aggiungere, modificare o eliminare dati. Infine, un programma può essere definito come un algoritmo scritto in un linguaggio comprensibile al calcolatore, che utilizza dati organizzati secondo una determinata strategia ed è vincolato alle risorse disponibili e alle condizioni al contorno del calcolatore sul quale il programma viene eseguito. Introduzione alla gestione dell’informazione e dei dati Il reperimento e la gestione di dati sono processi comuni, presenti in numerose attività che svolgiamo quotidianamente, come ad esempio, la consultazione del catalogo di una biblioteca, l’esplorazione di un portale web cinematografico contenente recensioni di pellicole, la stampa degli esami attraverso il sistema informativo di un ateneo, o ancora il versamento di una somma su un conto corrente. In tutte queste attività, siamo interessati a reperire le informazioni che soddisfano le nostre specifiche esigenze in un preciso momento. Ad esempio, possiamo essere interessati a reperire le informazioni disponibili su uno specifico libro di cui conosciamo l’autore, oppure le informazioni sui film realizzati da un certo regista. In un ulteriore scenario di esempio, quando ci presentiamo allo sportello bancario per effettuare un’operazione di versamento, l’operatore della filiale inserisce il nostro numero di conto corrente ed è così in grado di reperire i dati relativi al nostro credito e registrare l’avvenuta operazione di versamento all’interno del sistema informativo della banca aggiornando il nostro saldo in tempo reale. È chiaro che in tutti questi scenari, c’è un sistema informatico in grado di memorizzare e gestire le informazioni di interesse (trasformandole in dati), rendendo possibile le operazioni di reperimento e gestione (inserimento, aggiornamento, cancellazione) delle informazioni di interesse in un dato momento. Dato e informazione Nella precedente scheda, abbiamo utilizzato sia il termine dato sia il termine informazione. Per dato si intende la descrizione di una caratteristica della realtà costituita da simboli che ne garantiscano la comprensione e registrata su un supporto che ne garantisca la conservazione. Se prendiamo in considerazione il valore 2005 scritto su un foglio, questo è un dato. Siamo infatti in grado di leggere e comprendere il valore 2005 e il foglio ne garantisce la conservazione. Tuttavia, non siamo in grado di comprendere il significato del valore 2005, ovvero che cosa rappresenti questo insieme di simboli. Per informazione si intende l’interpretazione di un dato, in grado di arricchire la nostra conoscenza.
Questa assunzione è evidentemente molto pericolosa perché i casi di omonimia fra individui sono tutt’altro che rari e questo rischia di compromettere la correttezza delle informazioni reperite dovuta a un errato collegamento fra le righe appartenenti ai fogli di calcolo diversi. I vantaggi delle basi di dati Una base di dati è una soluzione pensata per organizzare e gestire dati in modo strutturato offrendo soluzioni appropriate per superare i limiti che tipicamente affliggono i dati memorizzati nei fogli di calcolo. Spesso, gli utenti che si avvicinano per la prima volta al mondo delle basi di dati si pongono alcuni interrogativi: “quale differenza c'è fra una base di dati e un foglio di calcolo?”, “quando è opportuno utilizzare una base di dati per memorizzare le informazioni di interesse?” e ancora “quando è meglio impiegare un foglio di calcolo?”. In verità il confronto fra basi di dati e fogli di calcolo è improprio: si tratta di due software con finalità molto diverse, accomunati soltanto dal fatto che entrambi memorizzano dati in strutture di forma tabellare.I fogli di calcolo consentono la memorizzazione dei dati in una griglia di celle in cui non esiste alcuna distinzione fra schema e istanza: l'organizzazione dei dati dipende dall'utente che predispone il foglio di calcolo in base alle sue necessità. La scelta di avere serie di dati omogenei disposti per riga o per colonna è una convenzione che facilita la lettura del foglio e l'inserimento di formule, ma non è obbligatoria e neppure suggerita in qualche modo dagli strumenti. Inoltre, i fogli di calcolo sono concepiti come strumenti di elaborazione e analisi dei dati, predisposti per l'inserimento di formule e funzioni di calcolo eventualmente complesse. La possibilità di correlare dati appartenenti a fogli di calcolo diversi esiste ma è scarsamente impiegata e di non facile utilizzo. Al contrario, in una base di dati, l'organizzazione dei dati è basata sul concetto di tabella nella quale sono ben distinte le nozioni di schema e istanza come caratteristiche essenziali e distintive, così come la possibilità di correlare fra loro i dati appartenenti a tabelle diverse. Questo favorisce la memorizzazione dei dati in modo da minimizzare le ridondanze e facilitare la gestione degli aggiornamenti nel corso del tempo. Introduzione alle basi di dati Consideriamo nuovamente gli esempi di consultazione del catalogo di una biblioteca, esplorazione di un portale web cinematografico, stampa degli esami universitari, e versamento di una somma su un conto corrente. In tutte queste attività, i dati di interesse (ovvero i dati relativi a libri, film, esami e conti correnti) sono reperiti all’occorrenza estraendoli da un archivio elettronico dove sono memorizzati e conservati nel tempo. Una base di dati (o database in lingua Inglese) è una collezione di dati coerenti creata allo scopo specifico di rappresentare e memorizzare adeguatamente le informazioni di una realtà d’interesse. Come anticipato nella precedente scheda, un database memorizza i dati in modo strutturato, cioè organizzati secondo schemi e tabelle dotati di una precisa e rigida definizione. Ad esempio, la base di dati relativa al portale web cinematografico conterrà tabelle per memorizzare dati su film, attori, registi e così via. Analogamente, la base di dati relativa al sistema informativo universitario conterrà tabelle con dati su studenti, corsi di laurea, esami, docenti e così via. Un’ulteriore caratteristica fondamentale delle basi di dati è quella di semplificare il continuo aggiornamento dei dati memorizzati, al fine di fornire dati sempre attuali agli utenti e alle applicazioni che ne hanno necessità per lo svolgimento delle loro specifiche attività. Ad esempio, ogni volta che uno studente supera un esame, questa nuova informazione viene registrata nella base di dati universitaria. In questo modo, i certificati rilasciati allo studente conterranno l’elenco aggiornato degli esami sostenuti fino a quel momento. Per eseguire il reperimento dei dati di interesse da una base di dati, è possibile fare uso di appositi programmi software che mettono a disposizione strumenti, spesso di tipo visuale, per guidare l’utente nella corretta formulazione delle sue specifiche richieste. I sistemi di gestione di basi di dati (DBMS) Un sistema di gestione di basi di dati (DBMS, database management system) è un sistema software realizzato per supportare la definizione e la manipolazione della base di dati da parte di differenti tipologie di utenti, specialistici e
non. Di conseguenza ogni utente può accedere al DBMS, a patto che abbia gli opportuni diritti di lettura ed eventualmente scrittura (cioè modifica) sul database. In particolare, un DBMS offre le seguenti funzionalità: Fornisce agli utenti una visione di alto livello dei dati contenuti nella base di dati attraverso l’uso di un modello dei dati, nascondendo i dettagli di basso livello relativi alla memorizzazione fisica dei dati. Fornisce supporto per la condivisione della base di dati da parte di molteplici utenti e applicazioni diverse, garantendo la corretta gestione degli accessi anche contemporanei ai dati da parte di utenti diversi. Garantisce la sicurezza dei dati, ovvero che solamente utenti autorizzati abbiano accesso alla base di dati, compiendo operazioni autorizzate. Fornisce la possibilità di definire una visione personalizzata dei dati per le diverse tipologie di utenti/applicazioni, contenente il sottoinsieme di dati di utilità per quell’utente/applicazione. Può integrare le funzionalità di salvataggio e ripristino (backup e recovery) dei dati contenuti nella base di dati, per garantire che non ci siano perdite di dati anche in caso di guasti e malfunzionamenti del software o dei dispositivi hardware del sistema di elaborazione. È in grado di assicurare la consistenza dei dati contenuti nella base di dati, facendo in modo che vengano rispettati i vincoli di integrità sui dati stessi. Negli anni ‘80/90 si assiste all'affermazione della tecnologia dei DBMS relazionali, che sono diventati uno standard di mercato e una componente essenziale per la gestione delle informazioni nell’ambito di organizzazioni pubbliche e private. Esistono numerosi esempi di DBMS relazionali, tra i quali vale la pena menzionare Oracle, MySQL, Microsoft SQL Server, PostgreSQL, MariaDB. Struttura e organizzazione di una base di dati Per modello dei dati si intende la descrizione della struttura dei dati che caratterizzano la realtà di interesse a cui si riferisce la base di dati. Un modello dei dati comprende: Un insieme di costrutti, Una notazione per specificare i dati tramite i suddetti costrutti, Un insieme di operazioni per esprimere le interrogazioni e le modifiche da eseguire sui dati organizzati secondo quel modello. Un modello dei dati deve permettere la rappresentazione degli (insiemi di) oggetti del mondo reale, dei legami (associazioni) fra tali oggetti e delle caratteristiche (attributi) degli oggetti e/o delle loro associazioni. Un attributo consiste quindi in un campo non scomponibile il cui insieme di valori possibili è definito dagli oggetti che appartengono a quest’ultimo. Esempi di oggetti, attributi e associazioni di interesse nel caso di una base di dati cinematografica sono mostrati in Figura B2.1. Allo scopo di definire correttamente lo schema della base di dati è necessario procedere a una concettualizzazione delle informazioni che riguardano la realtà osservata. Per concettualizzazione intendiamo qui la rappresentazione di una realtà di interesse in termini di insiemi di oggetti, caratteristiche e legami. Il modello relazionale Come esempio di modello dei dati per basi di dati, consideriamo il modello relazionale introdotto nel 1970 da Ted Codd, che rappresenta il modello dei dati sul quale si basa la maggior parte dei DBMS oggi disponibili. In un modello relazionale i dati sono memorizzati in tabelle, dette relazioni, composte da un certo numero di colonne, dette attributi, e da un certo numero di righe, dette tuple. Ad esempio, la tabella seguente, denominata regista, rappresenta un insieme di registi di film.
Un concetto di fondamentale importanza nelle basi di dati relazionali è la nozione di chiave primaria (primary key) utilizzata per identificare in modo univoco ogni tupla di una tabella. Una chiave primaria può essere costituita da un singolo attributo oppure può essere composta da più attributi. Ogni tabella possiede una chiave primaria; in questo modo ogni tupla della tabella è univocamente riconoscibile. Facendo riferimento alla tabella regista del nostro esempio, id_regista è la chiave primaria della tabella, ovvero non possono essere memorizzate nella tabella regista due tuple distinte con il medesimo valore per l’attributo id_regista. Un ulteriore esempio di chiave primaria è la coppia di attributi titolo, id_attore della tabella partecipazione. Questo significa che non possono essere memorizzate tuple distinte aventi la medesima coppia di valori per titolo e attore. Se un utente tentasse di inserire una tupla con un valore di chiave primaria già presente in una certa tabella, il sistema di gestione della base di dati, cioè il DBMS, impedirebbe l’inserimento e segnalerebbe un errore. L’utente dovrà modificare il valore della chiave primaria per poter concludere con successo l’inserimento della nuova tupla. In genere, la chiave primaria di una tabella è indicata sottolineando i nomi degli attributi che la costituiscono. Chiavi esterne Nel nostro esempio, le tuple delle tabelle film e regista sono legate fra loro tramite l'attributo id_regista, ovvero ogni singolo film fa riferimento per mezzo dell'attributo id_regista, alla tupla del suo corrispondente regista. Affinché la base di dati sia corretta, l'identificatore di regista presente all'interno di una tupla di film deve essere un valore già presente come valore di chiave primaria nella tabella dei registi. Se ciò non avvenisse, non sarebbe possibile associare ciascun film con il corrispondente regista qualora un utente volesse conoscere questa informazione relativamente a una pellicola di interesse. In altri termini, il regista di ciascun film deve essere presente nella base di dati. Per garantire che questo controllo sia effettuato dal DBMS, nelle basi di dati relazionali l'attributo id_regista viene dichiarato come chiave esterna nella tabella film, ovvero si richiede che i valori di questo attributo siano presenti come valori dell’attributo id_regista nella tabella regista. Valori nulli Ogni tupla di una relazione possiede la struttura definita nello schema di quella relazione anche quando uno o più valori non sono presenti. Ad esempio, supponiamo di non conoscere la nazione del regista Gray. La tupla memorizzata nella tabella regista sarà comunque caratterizzata dagli attributi id_regista, nome, cognome e sesso, come previsto dalla relazione regista. Quale valore dovrà essere dunque specificato in corrispondenza dell'attributo nazione? A tale scopo, nelle basi di dati relazionali, si usa un particolare valore, detto valore NULL. Nel nostro esempio, la tupla assumerebbe dunque la seguente forma: Livelli di astrazione nei DBMS Una base di dati gestita da un DBMS può essere vista a tre livelli di astrazione, a ciascuno dei quali corrisponde una descrizione dei dati sotto forma di uno specifico schema. Lo schema logico fornisce la descrizione dell'intera base di dati per mezzo del modello dei dati del DBMS utilizzato. Nel nostro caso, abbiamo considerato DBMS relazionali, nei quali il modello dei dati utilizzato è appunto quello relazionale. Lo schema fisico descrive l'organizzazione fisica dei dati in termini di strutture fisiche di memorizzazione e di accesso, come ad esempio, file sequenziali su disco.
Uno schema esterno o vista descrive una porzione dell'intera base di dati, limitata ai dati che costituiscono la specifica visione di singoli utenti o gruppi di utenti, facendo uso del modello dei dati utilizzato dal DBMS, che per noi è il modello relazionale. Livelli di astrazione nei DBMS: un esempio In Figura 3.8, riportiamo un esempio relativo alla base di dati relazionale cinematografica. Al livello fisico, la visione dei dati è quella di più basso livello, ovvero si considerano direttamente i valori delle tuple, memorizzati in file su un supporto fisico di memorizzazione. Questo livello è nascosto all'utente finale ed è gestito internamente direttamente dal DBMS. A livello logico la rappresentazione dei dati è di alto livello, vicino alla concettualizzazione della realtà e presenta i dati in formato tabellare, secondo il modello dei dati relazionale del DBMS utilizzato. A questo livello, possiamo quindi fare riferimento agli attori utilizzando la tabella corrispondente, in cui ciascuna colonna rappresenta un attributo che caratterizza gli attori e ogni riga descrive uno specifico attore. Al livello esterno, i dati possono essere presentati a utenti diversi secondo schemi esterni diversi, detti viste, che contengono un sottoinsieme di tutti i dati, quelli di interesse per lo specifico utente. Ad esempio, nel nostro caso abbiamo la vista relativa agli attori americani e quella relativa agli attori francesi, rispettivamente. Alcuni DBMS, come ad esempio quelli mono-utente per la gestione di basi dati personali, possono non supportare il livello esterno, che è invece molto importante nel caso di DBMS che operano in ambienti multi- utente, tipici delle organizzazioni pubbliche e private. L'aspetto importante di questa architettura è che gli utenti formulano le loro richieste facendo riferimento allo schema logico oppure agli schemi esterni, quindi facendo riferimento a descrizioni di alto livello dei dati contenuti nella base di dati e non a una descrizione di basso livello in termini di file memorizzati su disco. Il DBMS tradurrà internamente le richieste di accesso formulate sugli schemi esterni oppure sullo schema logico in opportune richieste di accesso a file nelle strutture di memorizzazione per reperire i dati di interesse. Linguaggi per le basi di dati I DBMS mettono a disposizione i seguenti linguaggi per definire e manipolare una base di dati: Linguaggio di definizione dei dati o DDL (Data Definition Language), ovvero un linguaggio per la definizione dello schema logico e degli eventuali schemi esterni. Linguaggio di manipolazione dei dati o DML (Data Manipulation Language), cioè un linguaggio per formulare estrazioni e modifiche sui dati (cioè, inserimenti, cancellazioni, modifiche) della base di dati. Spesso si indica con linguaggio di interrogazione (query language) il sottoinsieme delle istruzioni DML per l’estrazione di dati da una base di dati. Nei DBMS relazionali le funzionalità DDL e DML confluiscono in un unico linguaggio denominato SQL (Structured Query Language),, che è uno standard per i DBMS relazionali. Analizzando i prodotti DBMS sul mercato, si notano differenze, a volte anche sostanziali, tra lo standard e le implementazioni del linguaggio SQL offerte dai diversi DBMS. Molto spesso, l’aderenza allo standard è garantita solo per i costrutti consolidati del linguaggio, mentre ogni sistema realizza le funzioni evolute di SQL in modo fortemente dipendente dall’implementazione. Creazione di una base di dati Vogliamo ora illustrare il procedimento che consente la creazione di una base di dati relazionale (db) con l’ausilio di LibreOffice Base.Pur non essendo un vero e proprio DBMS e pur non offrendo tutte le funzionalità tipiche di un DBMS, LibreOffice Base consente la creazione di una base di dati relazionale e mette a disposizione funzionalità per l'inserimento di tuple e la loro conseguente estrazione in base ai criteri di selezione di volta in volta definiti dall’utente. Quindi, si tratta di uno strumento valido e facile da reperire per un’esperienza pratica di lavoro con le basi di dati relazionali. LibreOffice Base è uno strumento software libero e open source appartenente alla suite per ufficio
Interrogazione della base di dati L’operazione di interrogazione consente di reperire i dati di interesse da una base di dati, specificando in modo dichiarativo le condizioni di selezione che tali dati devono soddisfare affinché possano appartenere al risultato dell’estrazione. Con riferimento alla base di dati db_cinema, un esempio di interrogazione è il reperimento del nominativo degli attori americani nati dopo il 1950. Il risultato di un’interrogazione è presentato sotto forma di tabella dove le righe rappresentano le tuple estratte dalla base di dati che soddisfano il criterio di selezione fissato e le colonne rappresentano gli attributi di interesse fra quelli disponibili nelle tabelle della base di dati. Nel nostro esempio, le righe del risultato della query comprendono le tuple della tabella attore con valore corrispondente a “USA” per l’attributo nazione e valore superiore a 1950 per l’attributo anno_nascita. Visto che l’interrogazione chiede di reperire solo le informazioni relative al nominativo degli attori, solo gli attributi nome e cognome costituiranno le colonne del risultato della query. Le operazioni di interrogazione sono espresse in linguaggio SQL mediante l’uso del comando SELECT. Composizione di query in LibreOffice Base LibreOffice Base mette a disposizione uno strumento visuale per la formulazione di interrogazioni (anche dette query), denominato query-by-example (QBE). Secondo questa modalità QBE, l’interrogazione viene formulata in modo dichiarativo descrivendo le caratteristiche che le tuple del risultato dovranno possedere. L’utente seleziona una o più tabelle della base di dati dalle quali intende estrarre le informazioni di interesse. Per ciascuna tabella selezionata, l’utente indica gli attributi che saranno utilizzati nell’interrogazione. In particolare, un attributo può essere coinvolto nell’interrogazione perchè deve essere incluso nel risultato, come ad esempio l’attributo cognome della tabella attore nell’esempio considerato in precedenza. Un attributo può essere coinvolto in una interrogazione perché necessario al fine di esprimere la condizione di selezione sui dati delle tabelle coinvolte. E’ questo il caso dell’attributo data_nascita nel nostro esempio di interrogazione dove l’attributo, pur non facendo parte del risultato, deve essere coinvolto per filtrare le righe della tabella relative agli attori nati dopo il 1950. Esempio di query con QBE A titolo di esempio, formuliamo in modalità QBE (Figura 5.1) l’interrogazione considerata in precedenza dove si chiede di reperire il nominativo degli attori americani nati dopo il 1950. Selezioniamo nella schermata che rappresenta la base di dati db_cinema la voce Ricerche nell’elenco di sinistra e poi, nell’elenco a destra, la voce Crea ricerca in vista struttura. Si tenga presente che "ricerca" è il termine usato da LibreOffice Base per indicare un’operazione di interrogazione/query. A questo punto selezioniamo le tabelle da includere nella nostra interrogazione (film, attore, partecipazione), cioè le tabelle contenenti i dati di interesse per l’interrogazione. In una apposita area comparirà la loro rappresentazione visuale con l’indicazione delle associazioni stabilite in precedenza. Nella zona sottostante possiamo scegliere i campi che comporranno il risultato dell’interrogazione. Selezioniamo titolo e genere dalla tabella film, cognome e nome da quella attore. Cliccando su Esegui ricerca dalla barra degli strumenti, oppure premendo il tasto F5, vedremo comparire, nella parte alta della schermata, il risultato dell’interrogazione. Una funzionalità molto interessante di LibreOffice Base è la possibilità di visualizzare il comando SQL corrispondente all’interrogazione formulata con lo strumento QBE. In altri termini, lo strumento QBE è in grado di generare il comando SQL corrispondente all’interrogazione formulata in modo visuale. Selezionando il pulsante Vista struttura si/ no sarà possibile visualizzare il comando SQL generato da QBE. Per il nostro esempio, il comando SQL è il seguente: SELECT nome, cognome FROM Attore WHERE anno_nascita > 1950 AND nazione = 'USA' Ne consegue che l’istruzione SQL per eseguire un’interrogazione alla base di dati è costituita dalle clausole SELECT, FROM e WHERE.
Il comando SELECT di SQL SELECT è il comando SQL che permette di interrogare una base di dati per estrarne le informazioni di interesse. La clausola SELECT permette di specificare gli attributi che vogliamo ottenere nel risultato dell’interrogazione SQL. La clausola FROM esprime il nome della tabella o delle tabelle della base di dati dalle quali saranno prelevati i dati di interesse. Ad esempio, con il seguente comando SQL: SELECT titolo, genere FROM Film; intendiamo estrarre i valori degli attributi titolo e genere di ciascuna tupla memorizzata nella tabella film. Il simbolo * (star) è usato come abbreviazione per indicare che tutti gli attributi della tabella indicata nella clausola FROM devono essere inclusi nel risultato dell’interrogazione. Ad esempio, con il seguente comando SQL SELECT * FROM Film; intendiamo estrarre i valori di tutti gli attributi della tabella film per ciascuna tupla memorizzata in questa tabella. La clausola WHERE La clausola WHERE può seguire la clausola FROM in un comando SELECT di SQL per specificare eventuali condizioni di selezione di un’interrogazione. In particolare, le tuple delle tabelle indicate nella clausola FROM sono valutate rispetto alle condizioni della clausola WHERE. Una tupla viene inserita nel risultato dell’interrogazione se soddisfa le condizioni espresse nella clausola WHERE. Le condizioni sono espresse mediante operatori di confronto dove il valore di un attributo viene confrontato con un valore costante, il risultato di un’espressione matematica o il valore di un altro attributo. Ad esempio, con il seguente comando SQL: SELECT titolo FROM film WHERE genere = ‘thriller’; intendiamo reperire il titolo dei film di genere thriller. Si noti che i confronti con i valori di tipo testuale richiedono di racchiudere tra apici il testo da confrontare con il valore dell’attributo. I predicati possono essere racchiusi tra parentesi in modo da poter essere combinati in espressioni articolate qualora sia necessario. Gli operatori AND e OR sono utilizzati per combinare i predicati secondo il criterio congiuntivo (AND logico) disgiuntivo (OR logico), rispettivamente. E’ inoltre disponibile l’operatore NOT per eseguire la negazione del risultato di un’operazione di confronto. Ad esempio, con il seguente comando SQL: SELECT titolo FROM film WHERE genere = ‘thriller’ AND nazione = ‘USA’; intendiamo reperire il titolo delle pellicole di genere thriller che sono state prodotte negli Stati Uniti. Questo significa che una tupla della tabella film viene inserita nel risultato dell’interrogazione se e solo se entrambe le condizioni di selezione genere = ‘thriller’ e nazione = ‘USA’ sono soddisfatte dai valori degli attributi genere e nazione di quella tupla. Un ulteriore esempio di query con QBE Consideriamo un secondo esempio di interrogazione di una base di dati. In questo caso vogliamo estrarre dalla base di dati il titolo dei film e il nominativo (nome e cognome) del corrispondente regista. La query costruita con lo strumento QBE, insieme ai risultati ottenuti, sono mostrati in Figura 5.2. Un ulteriore esempio di query SQL Il comando SQL corrispondente alla query dell’esempio precedente costruita con QBE è il seguente: SELECT film.titolo, regista.cognome, regista.nome FROM film JOIN regista ON film.id_regista = regista.id_regista In questa interrogazione sono coinvolte tabelle diverse della base di dati. La tabella film è usata per reperire il titolo delle pellicole e la tabella regista è usata per reperire il nominativo del corrispondente regista. Il coinvolgimento di entrambe le tabelle è necessario visto che la tabella film contiene solo l’attributo film.id_regista che è chiave esterna verso la tabella regista e permette di associare ciascun film con i dati relativi al regista memorizzati nell’omonima tabella.
Questa pagina è dinamica in quanto generata al momento della richiesta dell’utente in base ai parametri da lui selezionati (commedia e horror). La richiesta di visualizzazione della pagina comporta l’esecuzione della query sulla base di dati e il risultato viene utilizzato per costruire il contenuto della pagina che viene infine mostrato all’utente. Sia chiaro che la richiesta di visualizzazione della medesima pagina effettuata selezionando generi diversi produce risultati diversi e quindi pagine web diverse. Comunicare in rete Con il termine rete di calcolatori si intendono due o più dispositivi connessi tra loro, i quali sono in grado di scambiare informazioni. La connessione può avvenire attraverso differenti tipi di infrastrutture fisiche, come ad esempio cavi o onde radio. Una rete è di conseguenza rappresentabile da un insieme di punti V (detti nodi), i quali rappresentano i calcolatori, collegati attraverso linee E (detti archi). Di conseguenza una rete G è rappresentabile attraverso una funzione G = (V, E). Il concetto di nodo è variabile in base alla prospettiva dell’osservatore. In una rete domestica, come quella che potreste avere nel vostro appartamento, ogni dispositivo è tipicamente connesso ad un router. In questo caso, il router, oltre alle sue specifiche funzioni di instradamento, ha lo scopo di interconnettere fra loro i vari dispositivi (nodi) della rete domestica, quali ad esempio smartphone, computer portatili e tablet. Se però si considera una rete più ampia, ad esempio quella di un intero condominio, ogni appartamento rappresenta un singolo nodo della rete e quella di ciascun appartamento diventa una sottorete della rete condominiale. Comunicazione sincrona e asincrona La comunicazione tra due o più nodi può avvenire in due modalità: sincrona e asincrona. In una comunicazione sincrona i nodi coinvolti sono connessi nel medesimo momento alla rete e scambiano informazioni (detti pacchetti) tra loro. Un esempio di comunicazione sincrona è la telefonata. Al contrario, una comunicazione asincrona non richiede la connessione alla rete di tutti i nodi nel medesimo momento. Un nodo invia un messaggio sapendo che i destinatari potrebbero non essere connessi e questi ultimi riceveranno il messaggio in seguito, al momento della loro connessione alla rete. Un esempio di comunicazione asincrona è la posta elettronica (email). Destinatari dei pacchetti Il destinatario di un pacchetto può essere differente a seconda delle esigenze di comunicazione: Point-to-point (o Unicast): la trasmissione dei pacchetti è indirizzata a un unico nodo destinatario (per esempio i messaggi di posta elettronica) Multicast: la trasmissione dei pacchetti è indirizzata a un insieme predefinito di nodi destinatari (per esempio i contenuti streaming delle pay tv) Broadcast: la trasmissione dei pacchetti è indirizzata a tutti i nodi di una rete e l’insieme dei nodi non è definito a priori (per esempio le trasmissioni dei canali radio FM) Nelle comunicazioni Point-to-Point lo scambio di messaggi avviene fra coppie di elaboratori non direttamente connessi. Per trasmettere un pacchetto dal mittente al destinatario, è spesso necessario passare attraverso numerosi nodi intermedi, i quali hanno il compito di inoltrare il messaggio ai nodi successivi finché il pacchetto arriva al nodo destinatario. Spesso fra due nodi della rete esistono numerosi percorsi alternativi lungo i quali si potrebbe effettuare la trasmissione. Per questo motivo, i nodi fanno uso di algoritmi di instradamento (routing) che hanno lo scopo di individuare il miglior percorso per fare arrivare ciascun messaggio fino al nodo destinatario. Nelle reti Multicast, il mittente inserisce ( incapsula ) gli indirizzi dei destinatari nel contenuto di ciascun pacchetto da trasmettere. I pacchetti si propagano nella rete passando tra i nodi che la costituiscono. Ciascun nodo della rete esamina i pacchetti in transito e valuta se il suo indirizzo figura tra quelli dei destinatari. In caso negativo, il pacchetto viene ignorato e inoltrato ai successivi nodi della rete. In caso positivo, il pacchetto viene elaborato per la lettura prima di essere inoltrato ai successivi nodi. Tipologie di rete
Le reti di calcolatori possono essere classificate in base all’estensione dell’area geografica che interessano: Local Area Network (LAN): è una rete locale, cioè una rete di elaboratori localizzati in un’area circoscritta come ad esempio un appartamento o una sede aziendale. La connessione può avvenire via cavo, tipicamente utilizzando lo standard Ethernet, o via radio. In quest’ultimo caso si può parlare di WLAN (Wireless Local Area Network). Metropolitan Area Network (MAN): è una rete metropolitana, cioè una rete che interconnette LAN geograficamente vicine tra loro. Questo tipo di rete permette di collegare nodi troppo distanti per essere collegati mediante LAN, come ad esempio due sedi cittadine appartenenti a una stessa azienda. Tipicamente, la connessione avviene mediante Ethernet o fibra ottica. Wide Area Network (WAN): è una rete geografica, cioè una rete che interessa elaboratori distribuiti in una vasta area come quella continentale. Tipicamente, la connessione avviene mediante fibra ottica. Global Area Network (GAN): è una rete globale, cioè una rete che collega WAN appartenenti a continenti diversi. Tipicamente, la connessione avviene mediante dorsali sottomarine internazionali o trasmissioni satellitari. Ed eccezione della rete GAN, ciascuna tipologia di rete può essere considerata una sottorete della tipologia successiva (vedi Figura I1.1). Di conseguenza, ogni sottorete costituisce un sistema autonomo (AS, autonomous system). In questo contesto, è comune definire internet una generica rete di calcolatori ottenuta mediante interconnessione (internetworking) di reti o sottoreti diverse. Il termine internet non deve essere confuso con il termine Internet (con i maiuscola) che indica la ben nota rete GAN mondiale che offre, tra gli altri, i servizi di posta elettronica e WWW (World Wide Web). Gateway e VPN E’ possibile che due nodi appartenenti a sistemi autonomi diversi vogliano comunicare. A tale scopo, ciascun AS è dotato di un apparato denominato gateway con due precise funzionalità. Da un lato, il gateway di un certo AS ha il compito di instradare i pacchetti provenienti dai nodi di AS verso i nodi esterni appartenenti a un diverso AS. Dall’altro lato, il gateway riceve i pacchetti provenienti da altri AS e li instrada verso i nodi del proprio AS. In altri termini, la comunicazione fra due AS avviene attraverso i rispettivi gateway. Inoltre, due nodi appartenenti a sistemi autonomi diversi che vogliono comunicare possono utilizzare una VPN (Virtual Private Network). L’obiettivo di una VPN è simulare una comunicazione LAN anche se i nodi coinvolti sono collocati in sottoreti diverse e potenzialmente distanti geograficamente. Le VPN sono diffusamente utilizzate in ambito aziendale e consentono di accedere a un elaboratore fisicamente collocato in una sede da una postazione remota come ad esempio il proprio appartamento o una seconda filiale dell’azienda. Definizione di protocollo di rete Come in una comunicazione tra individui, due nodi della rete che devono comunicare necessitano di un mezzo di comunicazione fisico e uno o più protocolli che permettono lo scambio di messaggi. In una rete, i protocolli governano tutti gli aspetti che interessano la comunicazione tra nodi, come ad esempio la regolamentazione del flusso di informazioni da un nodo all’altro e la gestione delle congestioni di rete. Ad esempio, consideriamo uno smartphone che fa richiesta di visualizzazione di una pagina web. La richiesta viene inviata all’elaboratore (server) che ospita la pagina web richiesta. Il server inserisce la richiesta in una coda di messaggi in attesa di risposta. Al momento opportuno, il server elabora la richiesta, preleva la pagina web di interesse e la invia in risposta allo smartphone per la visualizzazione. Affinché la comunicazione sia efficace, è necessario che la struttura (formato) dei messaggi sia comprensibile a tutti i nodi coinvolti. In definitiva, “ un protocollo definisce il formato e l’ordine dei messaggi scambiati tra due o più entità in comunicazione, così come le azioni intraprese in fase di trasmissione e/o di ricezione di un messaggio o di un altro evento ” (Ross, Kurose). Protocolli e livelli delle reti
I pericoli della comunicazione in rete Essere connessi ad una rete, come ad esempio la rete Internet, comporta alcuni pericoli dai quali è necessario proteggersi. Gli elementi ai quali prestare attenzione sono essenzialmente tre:
Grazie a questo lavoro fu possibile offrire una base comune per lo sviluppo di standard per l'interconnessione di sistemi e fornire un modello di riferimento con cui confrontare le varie architetture di rete. È bene notare come tale modello non includa la definizione di protocolli specifici (definiti successivamente, in documenti separati). Nel 1982, lo sviluppo dei protocolli TCP e IP gettò le basi per la realizzazione dell’attuale rete Internet. Nel 1984, nel Regno Unito fu sviluppata JANET, una rete in grado di collegare università e organizzazioni scientifiche e militari che venne a sua volta collegata ad ARPANET. Nel corso degli anni ’80 la tendenza a collegare tra loro reti differenti si consolidò e nel 1990 cessò l’esistenza di ARPANET. In parallelo si affermò sempre più Internet, una collezione di reti che comunicavano tra loro adottando i protocolli TCP/IP. In particolare, furono due i fattori decisivi alla crescita esplosiva di Internet. Il primo fu il rapido incremento di personal computer adottati sia da utenti privati che da aziende, un fenomeno che riguardò il mondo intero. I pc divennero sempre meno costosi e sempre più potenti mentre i modem, i dispositivi necessari per collegare i computer alla rete telefonica, migliorarono le loro prestazioni permettendo di condividere sia testo che immagini e suoni. Il secondo fattore chiave fu l’introduzione del World Wide Web che permise agli utenti della rete Internet di ritrovare le informazioni di interesse in modo intuitivo ed immediato sia che fossero composte da testo o da testo e immagini allo stesso tempo. Ad oggi la rete Internet è certamente la principale fonte di informazioni e di intrattenimento, sia per le imprese che per gli utenti privati. Comunicazione client/server Come è facile intuire, al fine di usufruire dei differenti servizi presenti sulla rete Internet, i vari host della rete devono comunicare tra loro. A tale scopo, sono stati progettati due principali approcci: client-server e peer-to-peer. I sistemi client-server sono un'evoluzione dei sistemi basati sulla condivisione delle informazioni tra due calcolatori. L'idea è che vi siano nella rete alcuni host che offrono un servizio (ad esempio un sito Web, anche se non è l’unico servizio erogato su Internet) e altri host che si collegano ad essi per usufruire di questo servizio; i primi sono denominati server , i secondi sono denominati client. È importante notare che client e server possono essere calcolatori dotati delle stesse capacità di calcolo e comunicazione: la loro distinzione è solo funzionale, ossia legata al ruolo che svolgono nella comunicazione. La presenza di un server permette a un certo numero di client di condividerne le risorse, lasciando che sia il server a gestire gli accessi, evitando i conflitti tipicamente presenti nei primi sistemi informatici. Riassumendo, con il termine client è indicata una componente che accede ai servizi o alle risorse di un'altra componente, detta server. In questo contesto si può quindi parlare di client riferendosi all'hardware o al software. Un elaboratore collegato tramite la rete ad un server che richiede uno o più servizi è un esempio di client hardware. Il programma di posta elettronica installato sul proprio dispositivo che si connette a un servizio centralizzato per scaricare (download) i messaggi ricevuti e visualizzarli è un esempio di client software. Sono sempre più numerosi gli strumenti software (come ad esempio web, email, database) che sono suddivisibili in una componente client (installata su un elaboratore client) ed una componente server (installata su un elaboratore server). Ad esempio, le App installate sui dispositivi mobili (smartphone e tablet) dispongono spesso di una componente client che accede a risorse disponibili su un server a partire da una richiesta dell'utente (unita spesso ad informazioni contestuali del dispositivo, come ad esempio la posizione) per poi visualizzare i risultati sullo schermo del dispositivo. Si pensi ad esempio alle App che forniscono suggerimenti rispetto alla strada meno trafficata da percorrere per arrivare a una destinazione o rispetto al ristorante migliore nelle vicinanze. Comunicazione peer-to-peer Al contrario del modello client/server, in una rete peer-to-peer (P2P), due o più host (detti peer) interagiscono mediante comunicazione alla pari. Un peer non fornisce di per sè un servizio, ma ha la funzione di server e di client allo stesso tempo. L’idea è che ciascun nodo della rete offra agli altri i servizi e i contenuti che intende condividere e contemporaneamente possa accedere ai servizi e ai contenuti condivisi dagli altri nodi. Il principale beneficio dei sistemi peer-to-peer è la scalabilità , in quanto una determinata risorsa può essere messa a disposizione da più nodi allo stesso tempo e chi ne fa richiesta ha maggiori possibilità di ottenerla in breve tempo. Per contro, il principale limite dei sistemi peer-to-peer è la maggiore complessità dei meccanismi di ricerca ( lookup ) delle risorse di interesse, che spesso comporta maggiori latenze nel reperimento. Infatti, le operazioni di ricerca richiedono l'interrogazione di uno o più nodi (peer) della rete per determinare quale o quali nodi possano fornire la risorse di interesse. Solo dopo