














































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
Una introduzione alle basi di dati, spiegando la differenza tra esse e i fogli di calcolo e fornendo risposte a questioni comuni come 'quale differenza c'è fra una base di dati e un foglio di calcolo?'. Viene inoltre presentato il concetto di base di dati relazionale e il modello relazionale, in cui tutti i valori presenti in una colonna appartengono lo stesso tipo di dato e le righe rappresentano specifici oggetti o legami fra oggetti del mondo reale.
Tipologia: Appunti
1 / 54
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!















































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:
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. I primi veri progenitori dell’elaboratore moderno videro la luce agli inizi del XIX secolo. Nel 1804 Joseph Marie Jacquard introdusse una nuova tecnologia per i telai in grado di controllare il movimento di aghi, filo e tessuto attraverso schede perforate, automatizzando così la procedura di tessitura. A metà del XIX secolo, Charles Babbage elaborò una macchina di calcolo in grado di compiere operazioni aritmetiche, ma non fu mai realizzata. Fu Ada Lovelace (considerata oggi la prima programmatrice della storia), ad accorgersi delle vere potenzialità della macchina di Babbage: sebbene fosse stata progettata per svolgere solo calcoli matematici, Ada riconobbe la possibilità di programmare la macchina per altri fini. In questa versatilità risiede la principale differenza tra una calcolatrice tradizionale e un calcolatore. Nel 1854, le idee di Leibniz vennero riprese da George Boole, che pubblica la propria algebra booleana , creando un sistema nel quale è possibile trattare ogni relazione logica attraverso l'utilizzo di formule algebriche. Le operazioni (come l'addizione, la sottrazione e la moltiplicazione) vengono sostituite da operazioni logiche con valori di congiunzione, disgiunzione e negazione utilizzando solamente numeri binari (ossia costituiti dalle sole cifre 0 e 1). Alla fine del XIX secolo, Herman Hollerith, un funzionario statunitense dell’ufficio per il censimento, sviluppò una macchina tabulatrice, sempre a schede perforate, per automatizzare le operazioni di censimento. Il successo e la richiesta di queste macchine fu tale che nel 1896 Hollerith fondò la Tabulating Machine Company, che nel 1924 divenne la International Business Machine (IBM). Tra gli antenati degli anni '30 del calcolatore, figura il Memex, macchina immaginaria progettata da Vannevar Bush. L’idea era quella di un sistema di archiviazione di dati utilizzato a scopi personali. Il dispositivo era descritto come una scrivania dotata di schermi traslucidi, una tastiera, un set di pulsanti e delle leve. Il Memex avrebbe reso possibile la creazione da parte dell'utente di collegamenti tra foto e documenti, e per questo motivo viene oggi ricordato come primo supporto per l'approccio all' ipertesto. Sempre nella prima metà degli anni '30, Kurt Gödel enunciò i suoi famosi teoremi di incompletezza. Oltre a rappresentare un caposaldo nel campo della logica matematica, con importanti implicazioni di ordine filosofico, questi fecero da base per il lavoro di Alan Turing, matematico, logico e crittoanalista inglese. Egli formalizzò un modello di calcolatore universale (la Macchina di Turing, mai costruita realmente), dimostrò come ogni funzione calcolabile si possa eseguire attraverso un algoritmo installato su una Macchina di Turing, ma dimostrò anche come per alcuni algoritmi non sia possibile sapere a priori se siano eseguibili in un tempo finito o infinito. Tra le implicazioni più importanti della Macchina di Turing si sottolinea come essa introduca una netta separazione tra la macchina fisica da una parte , e i dati e gli algoritmi astratti dall'altra. Le basi teoriche per lo sviluppo dei moderni calcolatori sono ora mature.
Generazione 1: I tubi a vuoto (valvole) Nel 1939, fu la volta del matematico e fisico John Vincent Atanasoff e del suo allievo Clifford Berry i quali costruirono l’Atanasoff Berry Computer, meglio noto come ABC. Si tratta del primo calcolatore digitale totalmente elettronico, ma mai brevettato.
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:
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.
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. Se il valore 2005 è associato a una descrizione del tipo “Titolo: Be Cool – anno di produzione: 2005”, allora siamo in presenza di una informazione, ovvero di un dato interpretato. Al dato è associato un contesto interpretativo che consente di comprendere il significato del dato rispetto alla sua funzione descrittiva di una certa realtà. Nel nostro caso, il dato rappresenta l’anno di produzione di un certo film. I sistemi informatici per la gestione dei dati normalmente sono in grado di memorizzare i dati nel tempo e di fornire un contesto interpretativo ai dati facendoli diventare informazioni utili per gli utenti.
Gli strumenti di gestione delle informazioni consentono di organizzare e memorizzare i dati in modo efficace rispetto all’impiego che se ne deve fare. L’esempio di uno strumento software tipicamente usato dagli utenti per l’organizzazione dei dati è il foglio di calcolo, di cui Microsoft Office Excel è un esempio molto diffuso. Si consideri un insieme di dati relativi a film, ciascuno descritto mediante le proprie caratteristiche come ad esempio il titolo, il regista e l’anno di produzione. Tipicamente, il foglio di calcolo che memorizza questo insieme di dati è organizzato in modo tale da presentare le caratteristiche dei film nelle colonne e i valori associati alle caratteristiche nelle righe. Leggendo i valori colonna per colonna su una specifica riga si osserva la descrizione di un certo film attraverso le sue caratteristiche (vedi Figura B1.1). Figura 1.1: Foglio di calcolo contenente un insieme di film
avere il dubbio di quale sia la nazionalità corretta del nostro regista quando il medesimo nominativo è associato a individui diversi e cioè compare in righe diverse. 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.
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.
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.
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à:
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. Figura 3.1 : Tabella dei registi Ogni riga della tabella rappresenta un singolo regista. Osserviamo inoltre che in una tabella di una base di dati relazionale, tutti i valori presenti in una colonna appartengono allo stesso tipo di dato o dominio. Ad esempio, il nome di un regista è un valore di tipo testuale, come anche il cognome e la nazione. In generale, le righe di una tabella di una base di dati relazionale rappresentano specifici oggetti o legami fra oggetti del mondo reale; gli attributi definiti per la tabella forniscono l’interpretazione dei dati che compaiono nelle varie righe.
Una base di dati relazionale è quindi una collezione di tabelle che rappresentano gli oggetti e le associazioni fra oggetti che caratterizzano la realtà di interesse. Osserviamo che i legami fra i dati di tabelle diverse vengono espressi per mezzo di valori comuni presenti nelle tuple di tali tabelle. Questi valori dovranno per forza essere univoci in entrambe le tabelle. Un esempio, è costituito dalla seguente base di dati che descrive registi e film e l'associazione che sussiste fra i film e i corrispondenti registi. Figura 3.2: Esempio di base di dati relazionale Come si può vedere dalla Figura 4.2 , nella relazione film, un film fa riferimento al relativo regista attraverso il valore dell'attributo id_regista, che è il codice del regista del film e che corrisponde a uno dei codici contenuti nella tabella regista.
Vediamo ora come è definito lo schema di una base di dati relazionale. Per prima cosa, introduciamo la nozione di schema di relazione , che è costituito dal nome r della relazione e dall'insieme degli attributi che costituiscono la relazione. Ad esempio, lo schema di relazione della relazione "regista" è definito come segue
Figura 3.5: Esempio di istanza di una base di dati relazionale
Gli attributi di una base di dati possono avere differenti vincoli che possono essere inseriti in fase di progettazione. Questi vincoli obbligano a seguire un determinato criterio di inserimento o forniscono delle regole di inserimento per i valori degli attributi. Alcuni esempi di vincoli sono:
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. Figura 3.6: Esempio di base di dati relazionale cinematografica con le relative chiavi primarie per ciascuna tabella
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.
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. Figura 3.8: Esempio dei diversi livelli di astrazione dei dati in un DBMS relazionale
I DBMS mettono a disposizione i seguenti linguaggi per definire e manipolare 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 LibreOffice. Analogamente agli altri pacchetti della suite LibreOffice, Base è supportato su più piattaforme tra cui Microsoft Windows, macOS e Linux. Di seguito mostreremo la fase di definizione della base di dati cinematografica di Figura 3.x. Una volta avviato il programma, andiamo nel menù File > Nuovo e selezioniamo la voce Database. Chiamiamo la nostra base di dati db_cinema. A questo punto compare una finestra che rappresenta la nostra base di dati per mezzo della quale sarà possibile agire sulla base di dati db_cinema creando, modificando o cancellando tabelle ( Figura 4.1 ).
poi a creare le tabelle film(utilizzando l’attributo titolo come chiave primaria), attore (id_attore chiave primaria) e partecipazione (la coppia titolo, id_attore è utilizzata come chiave primaria). Figura 4.2 : Struttura di una tabella
Creata la struttura delle tabelle, si può procedere a stabilire le associazioni che intercorrono tra loro, ricordando che le associazioni nelle basi di dati relazionali vengono espresse mediante valori di attributi opportuni. Andiamo quindi a selezionare la voce Relazioni nel menù Strumenti. Scegliamo ora le tabelle da collegare ed eseguiamo fisicamente l’associazione cliccando sull’attributo della nostra prima tabella e trascinandolo fin sopra l’attributo corrispondente della seconda tabella.
Figura 4.3 : Associazioni tra le tabelle del database db_cinema
Una volta stabiliti i collegamenti tra le tabelle, si può procedere con l’inserimento dei dati, ovvero con il popolamento della base di dati. Per fare ciò, torniamo nella finestra che rappresenta la nostra base di dati (quella con intestazione db_cinema) e clicchiamo su una delle tabelle precedentemente create. Comparirà una struttura in cui ogni colonna rappresenta uno degli attributi definiti per la tabella, mentre ogni riga dovrà contenere i dati che andremo ora a inserire. A partire dalla prima riga della tabella andremo ad inserire i nostri dati in ogni colonna e al termine dell’operazione ci sposteremo sulla riga successiva iterando il processo fino a quando non avremo completato la fase di inserimento dati. Il risultato finale sarà analogo a quello mostrato in Figura 4.4.