I database (o basi di dati) ● ● Un database (DB) è un insieme organizzato di dati Un elenco telefonico è un DB/archivio cartaceo di dati di abbonati, ma: – – ● la ricerca va effettuata per cognome/nome, scorrendo l'elenco non è possibile cercare per indirizzo, numero di tel. etc. Invece un DB digitale di abbonati consente questa (e molta altra) flessibilità 19/10/10 Database 1 DBMS ● ● DBMS (DB Management System = Sistema di Gestione di DB): un'applicazione informatica che permette di definire, gestire, consultare DB in formato digitale – Access è un DBMS parte della suite Microsoft Office – alternativa free: il DBMS Base, o OOBase, della suite Open Office – ORACLE è il DBMS “proprietario” ( commerciale) dominante – MySQL è il DBMS free più diffuso, considerato adatto anche per applicazioni “mission critical”, “enterprise level” (di livello industriale) Esempio: DBMS per la gestione di una biblioteca 19/10/10 Database 2 Dati in un DB: le entità ● In un DB, le informazioni sono organizzate in modo da descrivere oggetti significativi e riconoscibili, detti entità – ● ● p.es., in un DB biblioteca le entità possono essere: libri, autori, editori In generale, le entità possono essere, tra l'altro: – oggetti fisicamente riconoscibili: p.es. libri – persone fisiche/giuridiche: p.es. autori, editori – eventi: p.es. prestito di un libro – concetti astratti: p.es. transazioni, ordini il termine entità ha due accezioni, che possiamo indicare come: – entità-categoria, una sorta di insieme, p.es. quello dei libri – entità-individuo, una sorta di elemento dell'“insieme” entità-categoria ● 19/10/10 p.es., per l'entità libro: I promessi sposi, La Bibbia, La Divina Commedia... Database 3 Entità e attributi ● Un'entità è caratterizzata da attributi, dei dati che forniscono informazione sull'entità – ● In effetti, un'entità è definita dal complesso dei suoi attributi – ● p.es., nel DB il libro è il suo autore, il suo titolo, il suo editore, cioè è rappresentato e memorizzato come questa terna di dati Tipicamente, un attributo è un dato elementare, – ● p.es., l'entità libro può avere attributi: autore, titolo, editore p.es. un numero (che eventualmente rappresenti una data, valuta,...), del testo, un valore sì/no ... Come l'entità anche l'attributo ha una duplice veste: – l'entità-categoria è definita dai nomi degli attributi ● – p.es. l'entità libro ha attributi di nome autore, titolo, editore l'entità-individuo è definita dai valori assunti dagli attributi ● 19/10/10 p.es. uno specifico libro ha attributi: autore di valore “Zwirner”, titolo di valore “Algebra”, editore di valore “CEDAM” Database 4 DB relazionali: tabelle ● Nel modello relazionale dei dati, ogni entità è descritta, nel duplice senso visto, di entità-categoria e entità-individui, da una tabella che: – – con la prima riga definisce gli attributi dell'entità-categoria, cioè i loro nomi con ogni riga successiva descrive un “individuo” di quell'entità presente nel DB, specificandone gli attributi, cioè i valori di questi 19/10/10 Database 5 Tabelle, record, campi ● In OOBase, la prima riga di una tabella, quella con i nomi degli attributi, appare come intestazione intestazione record record record record campi del record n. 4 ● ● ● Le righe dopo la prima si dicono anche record della tabella Ogni colonna contiene in prima riga il nome di un attributo e nelle successive i valori assunti dall'attributo per i vari record Campo è sinonimo di attributo: le celle che compongono un record sono i suoi campi, o, appunto, attributi (come valori) 19/10/10 Database 6 Tabelle e relazioni ● ● Un DB relazionale in generale descrive più entità, quindi consta di più tabelle Se due tabelle hanno un campo in comune, esse vanno presumibilmente messe in relazione ➔ Il DBMS relazionale consente quindi una gestione complessiva e integrata dei dati, che tiene conto delle relazioni tra essi 19/10/10 Database 7 Funzioni di un DBMS ● Definizione dei dati – che forma hanno i dati? ➔ ➔ – ● quali sono i dati? → “popolare” le tabelle di record Manipolazione dei dati – – – – ● scelta delle tabelle e loro struttura in campi definizione di relazioni tra tabelle visualizzarli effettuare ricerche ordinarli raggrupparli e incrociarli … Controllo dei dati, in presenza di più utenti e ruoli – non è il focus di Access e OOBase (più rivolti a uso personale) 19/10/10 Database 8 cli cc ar e qu i Avvio di OOBase cambiare nome 19/10/10 Database 9 Interfaccia di OOBase ● ● Tabelle, Ricerche, Formulari e Rapporti sono gli oggetti che costituiscono un DB di OOBase proseguire con “Crea tabella in vista struttura” 19/10/10 Database 10 Vista struttura di una tabella ● serve a definire la struttura della tabella, cioè i campi – – – ● finora abbiamo raffigurato i nomi dei campi in orizzontale ma in questa vista appaiono in verticale a fianco del nome campo, il tipo e una descrizione (facoltativa) Tipi più frequenti – – – – Intero, da -231 a 231-1 Data, Ora, Data/Ora Numeric, scala illimitata 19/10/10 – – Database Decimale, scala illimitata (spesso per valuta) Reale, tra 5∙10-324 e 1,8∙10308 Testo, fisso o variabile 11 Esempio: struttura tabella Autori ● NB: ampia scelta per Tipo campo ● Descrizione facoltativa ● Per ogni Tipo Campo vi sono Proprietà da specificare: – si noti Digitazione necessaria ● 19/10/10 Database Quando si cerca di salvare: 12 Chiave primaria ● Chiave è un campo che assume un valore unico per ogni record – – ● ● come detto, OOBase rileva l'assenza di una chiave e a richiesta, crea la chiave – – ● p.es. il codice fiscale per gli individui autore non può esserlo per Autori la rinominiamo CodAutore impostiamo Valore Aut. a Sì Una (e solo una) chiave è designata come primaria – – cf. chiavetta in 1a colonna si può cambiare (bottone dx) 19/10/10 Database 13 Vista dati Salvata la struttura della tabella Autori, la si riapra con doppio clic: ● ● ● ecco la Vista Dati o Data View, fatta per inserire dati (popolare la tabella) il bottone grigio a sinistra del record permette di selezionarlo e, con il menu del mouse dx, di eliminarlo NB: info e controlli nella riga di stato in fondo alla finestra: – – NB: il contatore <Campo automatico> corrisponde, in Vista Struttura, al campo CodAutore di tipo Intero, con Valore automatico indicatore n. record bottoni inizio/indietro/avanti/fine/ inserimento 19/10/10 Database 14 Da vista dati a struttura Per tornare alla vista Struttura Tabella: ● si chiude la Vista Dati ● si seleziona la tabella ● clic su ● o bottone destro / Modifica 19/10/10 Database 15 Indici (bottone ● ● ● ) permette di definire un indice, associato a un campo – accelera ricerche sul campo – l'indice è tenuto ordinato in modo crescente o decrescente rispetto al campo associato La chiave primaria ha un indice automatico e univoco (perché chiave) Esempio: aggiungere indice per Autore – eq r a c clic ui non dev'essere univoco (ammette duplicati) 19/10/10 Database 16 Tabella Libri: I tentativo ● Conviene avere 2 attributi per descrivere l'editore? Libri Titolo ridondanza: ogni record ripete inutilmente IndirizzoEditore, da cui: ● ● ● ● Autore Argomento spreco di memoria: quanti “Milano” per “Mondadori”? inefficienze: cambio indirizzo ripetuto in ogni record! potenziali incongruenze: IndirizzoEditore potrebbe (indebitamente) differire per libri dello stesso Editore Editore Indirizzo Editore Titolo Autore Argomento Editore Indirizzo Editore I promessi sposi Manzoni romanzo Mondadori Milano Dei delitti e delle pene Beccaria saggio Mondadori Milano Rime e ritmi G. Carducci poesia A. Mondadori Verona La freccia nera Stevenson romanzo Garzanti MILANO, ITALIA Soluzione: Editore è concetto distinto da Libro ➔ dev'essere un'entità/tabella distinta 19/10/10 Database Editori Nome Editore Indirizzo Editore 17 Tabella Libri: II tentativo ● Anche così permangono rischi: – – – ● Libri Nome Editore Titolo omonimie: più di un editore D'Anna Indirizzo Editore incongruenze: A.Mondadori coincide con Mondadori? inefficienze: la “A.” va inserita (volendo) in molti libri! Titolo Autore Argomento Nome Editore I promessi sposi Manzoni romanzo Mondadori Il mio mondo Rossi geografia D'Anna Rime e ritmi G. Carducci poesia A. Mondadori Parlez-vous? Martin francese D'Anna Autore Argomento Nome Editore Conosciamo già problema e soluzione: – – ● Editori Editori ha bisogno di una chiave, p.es. CodiceEditore Libri deve riferire la chiave CodiceEditore, non NomeEditore Stesse considerazioni per il campo Autore in Libri 19/10/10 Database 18 Chiavi esterne ● ● ● Ogni tabella ha chiave primaria Ogni tabella fa riferimento a un'altra con la chiave di questa Ciò le pone, in un senso che preciseremo, in relazione – ● ● Autori Codice Autore Autore Nazionalità Libri Titolo Codice Autore Argomento Codice Editore Editori N.B.: non sempre i campi in relazione hanno lo stesso nome Codice Editore Nome Editore Indirizzo Editore Un campo di una tabella si dice chiave esterna se è chiave primaria di un'altra tabella del DB Le chiavi esterne sono le soluzioni standard per i riferimenti incrociati tra tabelle – evitano la ridondanza e tutti gli inconvenienti associati 19/10/10 Database 19 Tabelle finali del DB NB: piccole variazioni rispetto a figure precedenti, p.es. CodAutore è Testo 19/10/10 Database 20 Relazioni ● ● ● Le relazioni sono collegamenti tra (campi di) tabelle Senza relazioni non si possono fare ricerche incrociate Per definire relazioni: – – – – menù Strumenti-Relazioni aggiungere le tabelle (eventualmente spostarle o ridimensionarle) porre in relazione i campi con Drag-andDrop salvare e (eventualmente) chiudere la finestra 19/10/10 Database 21 Cardinalità delle relazioni ● Uno a molti (raffigurato come 1:n) – tipico nei DB: p.es. a 1 record Editore corrispondono più record Libro che hanno quell'editore ● Uno a uno: esempio DB agenzia auto ● Molti a molti → meno comune: – p.es. se vi fosse una tabella Argomenti: ● ● – a un record Autore potrebbero corrispondere più record Argomento (argomenti di cui ha scritto un dato autore) a un record Argomento potrebbero corrispondere più record Autore (autori che hanno scritto su un dato argomento) ma come memorizzare le associazioni Argomento-Autore? ● complesso: esula da questo corso 19/10/10 Database Codice Autore Argomento 1 Manzoni Storia 2 Leopardi Politica Morale 22 Integrità referenziale ● In una relazione 1:n tra il campo di una tabella e quello di un'altra: – – ● tabella primaria: è quella con il campo chiave primaria (Autori) tabella secondaria: è quella con il campo chiave esterna (Libri) Che succede se: 1. si crea un record Libro con CodAutore inesistente in Autori? E' vietato 2. si cancella un record Autore il cui CodAutore sta in Libri. Va regolato ● In Access ciò si dice integrità refenziale (= congruenza dei riferimenti) 19/10/10 Database 23 Integrità referenziale: primaria→secondaria ● ● Se dalla tabella primaria (es. Autori), si aggiorna/cancella un record con chiave primaria k... cosa accade alla tabella secondaria (es. Libri) sui record corrispondenti, cioè con chiave esterna k? – – – – niente, ma l'integrità referenziale vieterà l'operazione sulla primaria aggiornamento a cascata dei campi (che erano) a k azzeramento dei campi (che erano) a k assegnazione del valore predefinito (default) ai campi (che erano) a k 19/10/10 Database 24 Formulari o form/moduli/maschere ● Per input dati: – – – ● ● ordinato più intuitivo di lista dati strumenti rapidi Permettono di “popolare” più tabelle in una volta Possono riflettere relazioni, richiamando subform – p.es. dal form di un autore, subform con i suoi libri 19/10/10 Database 25 Form: creazione guidata ➢ scegliere tabella di base (p.es. Editori) 1. inserire nel form i campi voluti, (>> per tutti) 2. (e 3,4) non aggiungere, per ora, form secondario 5. scegliere la disposizione a colonne 6. impostare le modalità di immissione dei dati 7. scegliere uno stile 8. impostare un nome per il form 19/10/10 Database 26 Form: modifica struttura ● ● La struttura e l'aspetto del form si possono modificare, con Il form è strutturato in controlli, ognuno ha etichetta e campo – ● per modificare un controllo, si usa nella barra Controlli per il formulario – – ● alcuni sono raggruppati e vanno separati per operarvi singolarmente es., controllo CodEditore → invisibile ● il campo associato è automatico si cambi il colore di sfondo a Editore per lo più i controlli dei form sono associati a campi di tabelle 19/10/10 Database 27 Form per autori ● ● ● ● ● ● ● Es.: inserire, per un autore ogni 15, la nazionalità (una sia “USA”) Ordinare secondo la nazionalità Cercare gli autori con naz. “USA” Modificare “USA” in “Stati Uniti” Inserire due nuovi autori Andare sul primo record Eliminare uno dei due nuovi autori con l'apposito strumento 19/10/10 Database 28 Le Query (Ricerche) Una query interroga il DB per estrarne informazioni: ● selezionandole in base a criteri dati ● tenendo conto delle relazioni tra le tabelle del DB ● modificando, inserendo, aggiornando il DB Per esempio: ● quanti libri esistono per ciascun autore? ● quanto si è speso per ciascun autore? ● quali volumi sono in prestito da più di un mese? Nella finestra iniziale di un DB, nel riquadro Database, cliccare lo strumento e... 19/10/10 Database 29 cliccare qui Query: avvio ● Utilizzare procedura guidata per la creazione di interrogazioni 19/10/10 Database 30 Autocomposizione di query ● Si vuole un quadro dei titoli disponibili con anno di uscita: 19/10/10 Database 31 Struttura di una query ● ● ● ● La query si può creare o modificare (via bottone destro) in modalità struttura Si vedranno la (o le) tabelle da cui provengono i campi oggetto della ricerca e una griglia, detta QBE (Query By Example), di cui ogni colonna descrive un campo che entra nella query (eventualmente invisibile) la query si esprime anche in linguaggio SQL 19/10/10 SELECT "Titolo", "Anno" FROM "Libri" Database 32 Query incrociate ● ● ● La modalità struttura è la più appropriata per gestire query incrociate (uniscono campi di più tabelle) Infatti in modalità struttura possono aggiungersi tabelle e, in specie, stabilire relazioni Nell'esempio, si vuole vedere (a) ogni libro con l'autore, ma, senza la relazione, si ha: (b) ogni libro con ogni autore (a)SELECT "Autori"."Autore", "Libri"."Titolo" FROM "Libri", "Autori" WHERE "Libri"."CodAutore" = "Autori"."CodAutore" (b)SELECT "Autori"."Autore", "Libri"."Titolo" FROM "Autori", "Libri" 19/10/10 Database 33 Importare dati dal foglio elettronico ooCalc ● ● ● ● ● Selezionare il foglio, p.es. Autori Selezionare i dati (CTRL+SHIFT+→ e CTRL+SHIFT+↓) e copiarli (CTRL-C) Passare alla tabella Autori del DB e incollarli (via bottone destro) Nella 1a finestra, scegliere Aggiungi Dati, Usa la prima riga... Nella 2a, Collega colonne, abbinare i campi sorgente a quelli destinazione (p.es. Autore-Autore) 19/10/10 Database 34