Introduzione ai Database Versione 1.0 tag P. = Preliminary Pablo Genova [email protected] I. I. S. “Angelo Omodeo” Indirizzo Tecnico-Economico Mortara A. S. 2015 – 2016 Cos'è una base di dati? Definizione: base di dati o database è una raccolta di dati logicamente correlati utilizzata per modellare ‡ una realtà. Utilizzi nei campi più svariati dal database di una banca a quello dell’orario ferroviario a quello della calibrazione delle misure di un esperimento scientifico. Per semplificare pensiamo ad una tabella o ad un elenco di dati, ma in realtà un database è molto di più, come cercheremo di vedere. Proprietà fondamentali di un database (termini tecnici precisi): •consistenza •integrità •sicurezza •condivisibilità i dati devono essere significativi e logicamente coerenti le operazioni degli utenti non devono danneggiare i dati protezione da eventi accidentali o da intrusioni tanti utenti possono accedervi in rete •persistenza i dati rimangono salvati, non si perdono quando si chiude il programma, non sono temporanei (con tempi opportuni a seconda dei casi) •scalabilità si può espandere aggiungendo nuovi dati, senza cambiarne la struttura Naturalmente il database perfetto NON esiste! ‡ gli informatici usano “modellare” i fisici “modellizzare” Vedi pag 120-121 Dati ed informazioni Termini tecnici da sapere Differenza tra dato ed informazione il dato (dal latino datum plurale data) è il valore grezzo in sé, l’informazione è l’incremento di conoscenza o l’interpretazione dei dati. I dati grezzi non sono informazione, bisogna corredarli di una opportuna chiave di interpretazione che consente di comprendere il loro significato Esempio: l’insieme {1Kg, 3 TB, 45 €, 23 $} è un insieme di dati, diventa informazione se dico ad esempio che gli elementi corrispondono, per un disco fisso a {peso, dimensione, costo in euro, costo in dollari} schema o intensione: è la chiave di interpretazione dei dati, ovvero il significato la semantica che si attribuisce al dato per ricavare l’informazione istanza di uno schema o estensione: insieme dei valori assunti da uno schema da un certo istante di tempo o per un certo oggetto Il significato intensionale (o schema) è quindi il contenuto informativo completo, mentre il significato estensionale (o istanza) sono i valori concreti che può assumere uno schema in un dato caso Per ricordarsi: FOR INSTANCE = FOR EXAMPLE in english ;-) Vedi pag 124-125 Categorie, occorrenze, modelli Categoria: gruppo di dati aventi la stessa chiave di interpretazione ovvero lo stesso schema (nell’esempio sopra, categoria dei dischi fissi). Occorrenza: insieme delle istanze delle categorie in un dato istante di tempo Per intenderci la base di dati concreta (la “tabella coi valori”) è appunto una occorrenza della base di dati generale... imparare ad ASTRARRE (e MODELLARE i problemi) Modello di dati: insieme di concetti utilizzati per organizzare i dati di interesse, descriverne la struttura e la dinamica, comprese le associazioni e i vincoli da rispettare Modelli concettuali: permettono di rappresentare i concetti (e i dati) in modo indipendente da ogni sistema. Mettono in evidenza i concetti piuttosto che la struttura concreta di memorizzazione nel computer. Sono usati nella fase iniziale di progettazione. Vedremo il modello E-R Entity-Relationship (Entità - Associazioni) Modelli logici: consentono una specifica rappresentazione dei dati, che riflette una ben precisa organizzazione (tabelle,grafi oggetti,strutture). Di questo noi vedremo la progettazione logica relazionale, con la costruzione di opportune relazioni tra i dati Il passo successivo è il progetto fisico vero e proprio, l’implementazione concreta e la scrittura su memorie di massa dei dati Vedi pag 125 Progettazione Dunque le fasi generali di progettazione di un database sono tre 1.Progettazione concettuale 2.Progettazione logica 3.Progettazione fisica Nella fase 1 si elabora il modello concettuale, rappresentazione astratta della realtà Input: caratteristiche specifiche della realtà Output: schema concettuale, diagramma ER Nella fase 2 si elabora lo schema logico, per esempio rappresentazione mediante tabelle Input: diagamma ER Output tabelle (o modello relazionale) Nella fase 3 si elabora la concreta implementazione sul supporto fisico (memorie di massa) Input: tabelle Output file(s) in memoria di massa Ci sono quindi più livelli di progettazione dal più astratto al più concreto Un DBMS DataBase Management System è strutturato a livelli Il DBMS è il gestore del database, il software che gestisce il database a tutti i livelli (esterno, logico, fisico) Vedi pag 126-127 e 128-129 MODELLO E-R Entity Relationship In italiano modello Entità – Associazioni (traduciamo Relationship con Associazione) Entità: ciò che esiste nel nostro modello, i “soggetti” del modello Proprietà o Attributi: caratteristiche delle entità (andranno scelte in modo opportuno) Gli attributi possono essere semplici, composti o multipli. Un attributo semplice non può essere ulteriormente scomposto e ha un nome, un formato, una dimensione, un valore, un’opzionalità. Un attributo composto (o aggregato) è un attributo composto da più attributi. Un attributo multiplo è un attributo costituito da un elenco di attributi di lunghezza variabile. Esempio: l’entità Fattura può avere come attributi semplici un CodFattura (codice fattura), una Data, un Numero, una Nota (opzionale! talvolta c’è talvolta non c’è) L’entità Cliente può avere come attributi semplici un CodCliente (codice cliente), un Nome un Cognome, come attributo composto un Indirizzo, composto da Via, NumCivico, Città, CAP. Se vogliamo gestire gli eventuali più nomi propri del cliente, conviene definire l’attributo Nome come attributo multiplo che conterrà almeno un nome proprio, oppure se vogliamo gestire più Indirizzi del cliente, ci vorrà un attributo multiplo Indirizzo. La fattura con CodFattura CXYZ001, emessa in Data 1/2/2016, Numero 41 è una ISTANZA d’entità fattura ISTANZA: un singolo esemplare di entità, una entità concreta con determinati valori. Vedi pag 132-134 ATTRIBUTI CHIAVE Un attributo che permette di identificare univocamente una istanza di un’entità è detto attributo chiave o chiave candidata. Tra tutti i possibili attributi chiave (o chiavi candidate) quella più semplice, con il minor numero di attributi è detta chiave primaria. Come suggerisce il nome, la chiave primaria, primary key in inglese, vi permette di identificare univocamente l’istanza della vostra identità, va scelta in modo opportuno e sensato (se è scelta male ci saranno conflitti, incoerenze, errori). La si indica sottolineando il nome: <Nome attributo> è un attributo generico <Nome attributo> è un attributo chiave Nell’esempio precedente CodFattura è la chiave primaria della fattura, CodCliente la chiave primaria del cliente. Se per esempio sceglievamo Nome era un errore perché posso avere due clienti differenti con lo stesso nome, se sceglievo la data della fattura posso avere tante fatture nello stesso giorno. Se inserivamo anche il CodiceFiscale del cliente allora potevo utilizzarlo come chiave primaria (identifica univocamente il cliente). Attenzione, non c’è un unico modo di progettare un database! Indicare sempre la chiave primaria scelta. Vedi pag 135-137 RAPPRESENTAZIONE GRAFICA CodCliente PIVA Nome Cognome Cliente RagSociale Indirizzo È un attributo composto CodFattura Numero CodFiscale Nome Data Fattura Nota ComuneNascita DataNascita Professione Persona Cognome sottolineato = Primary key = Attributo chiave Hobby È un attributo multiplo Rispettare le convenzioni! Vedi pag 135, 197 Associazioni - Relationships Una associazione è un legame logico tra due o più entità. Una istanza di una associazione è una combinazione o una aggregazione di istanze delle entità che prendono parte all’associazione. Nello schema si indica con un rombo. Matricola Nome Cognome Paziente 1 possiede 1 Documento sanitario CodDoc DataEmissione Validità I numeri indicano la cardinalità dell’associazione: ogni Paziente ha uno e un solo Documento Sanitario, ad ogni Documento Sanitario è associato uno e un solo paziente In generale, date le entità X e Y e data una associazione tra di loro, essa può essere: • biunivoca o 1:1 (uno a uno) se ad una istanza dell’entità X corrisponde una e una sola istanza dell’entità Y • 1:N (uno a N, uno a molti), se ad una istanza dell’entità X possono corrispondere N istanze dell’entità Y, ma per una istanza dell’entità Y vi è una sola istanza dell’entità X • N:1 (N ad uno, molti ad uno) se per una istanza dell’entità X vi è una sola istanza dell’entità Y, ma per una istanza dell’entità Y possono corrispondere N istanze dell’entità (è lo stesso della precedente scambiando l’ordine delle entità) • N:N (N a N, molti a molti) per una istanza dell’entità X corrispondono N istanze dell’entità Y e viceversa Esempi di associazioni 1:N Matricola Nome Cognome Data Studente Nota N Numero emessa 1 Indirizzo Fattura N frequenta CodScuola CodFattura Nome 1 CodCliente NomeScuola Scuola TipoScuola Cliente Cognome RagSociale PIVA Una scuola è frequentata da tanti studenti, ma uno studente frequenta una sola scuola (alla volta), un cliente può essere associato a tante fatture, ma ogni fattura deve essere intestata ad un solo cliente. Sono associazioni di tipo 1:N (equivalenti a N:1 perché le associazioni si possono leggere in entrambi i versi) Vedi pag 149,197 Esempi di associazioni N:N CodDisciplina Cognome Nome Docente N insegna N Disciplina Matricola NomeDisciplina NumOre NumClassi Un docente insegna N discipline e viceversa ad una data disciplina sono associati N docenti, si noti che in questo esempio l'associazione insegna ha degli attributi specifici (NumOre e NumClassi), anche una associazione può avere degli attributi così come una entità. Finora abbiamo visto solo associazioni binarie o di grado 2, ma ci possono essere anche associazioni di grado maggiore ad esempio TipoProdotto Prodotto N CodCliente N Nome Cliente CodProdotto CodCassa N fatturazione Cassa Reparto Cognome ImportoFattura DataFattura Vedi pag 151 e 153 Progettazione logica-relazionale E' il secondo passo nella progettazione di un database, dal modello E-R passiamo al modello logico relazionale, dal diagramma E-R passiamo alla definizione di tabelle, ntuple e operazioni da compiere su di esse. Vediamo prima un esempio, un'istanza concreta del modello e poi diamo le definizioni rigorose: Marca Modello Targa Nome Cognome Indirizzo Codice Automobile AUTOMOBILE(Targa, Marca, Modello) Cliente CLIENTE (Codice, Nome, Cognome, Via, NumeroVia,Città) Modello E-R Modello logico relazionale Nel modello logico relazionale sono state introdotte le relazioni AUTOMOBILE(...) e CLIENTE (…) rispettando le convenzioni di tale modello Vedi pag 146-153 Relazioni ed ntuple Definizione matematica rigorosa di relazione, dalla teoria degli insiemi: Una relazione R su una sequenza di insiemi D1, D2,... Dn (non necessariamente distinti) è un sottoinsieme finito del prodotto cartesiano tra tali insiemi ovvero indicando D1 x D2 x … x Dn il prodotto cartesiano si ha: R⊆D R D1 x D2 x … Dn Gli insiemi D sono detti dominî della relazione, ad ogni dominio è associato un nome detto ATTRIBUTO ed n è il grado della relazione. Gli elementi di una relazione R sono detti n-uple (leggi 'ennuple') o n-tuple (leggi 'entuple' from the english word 'ntuple' plural 'ntuples') o anche t-uple e si indicano così: (d1, d2,..., dn) con d 1∈D 1, d2∈D 2,... , Dn∈dn Ricorda che il PRODOTTO CARTESIANO TRA DUE INSIEMI A x B è l'insieme delle coppie ordinate (a,b) con a appartenente ad A, b appartenente a B https://it.wikipedia.org/wiki/Prodotto_cartesiano Vedi pag 146-153 Relazioni, ntuple e tabelle Una relazione può essere rappresentata vedi pag. 147 del libro 1) per elencazione ecco le “famose” tabelle di un 2) in forma tabellare database 3) in forma insiemistica ISTANZA DI UNA RAPPRESENTAZIONE: insieme delle sue ntuple in un determinato istante di tempo. Come nei casi precedenti (entità, associazione etc etc) l'istanza è il “caso concreto”, il significato estensionale della relazione Prendiamo la relazione Automobile ecco le tre possibili rappresentazioni di una istanza della relazione AUTOMOBILE(Targa, Marca, Modello) AUTOMOBILE(Targa, Marca, Modello) = { Nelle convenzioni utilizzate nel libro (AA000ZZ, Fiat, Grande Punto), ogni riga dell'elenco è una ntupla (CC200LN,Volkswagen, Passat), TARGA MARCA MODELLO AUTOMOBILE (RR100AA,Renault,Megane) AA00ZZ Fiat Grande Punto AUTOMOBILE (KK200II,Lada, Kalina) CC200LN Volkswagen Passat } 1) (AA000ZZ, Fiat, Grande Punto), insiemistica 2) (CC200LN,Volkswagen, Passat), elencazione 3) (RR100AA,Renault,Megane) 4) (KK200II,Lada, Kalina) Ricordarsi che c'è sempre anche il significato intensionale, lo schema, l'astrazione! RR200AA Renault Megane KK200II Lada Kalina tabellare Esempi E-R → modello relazionale STUDENTE (Matricola, Cognome, Nome, CodScuola) Matricola Nome Cognome Studente N chiave esterna! frequenta 1 CodScuola Indirizzo Scuola NomeScuola TipoScuola SCUOLA (CodScuola, NomeScuola, TipoScuola, Indirizzo) Nel modello relazionale l'introduzione di una chiave esterna, CodScuola nella relazione STUDENTE, permette di rappresentare l'associazione esistente tra le due relazioni. La chiave esterna va messa nel posto giusto Non avrebbe avuto senso mettere Matricola come chiave esterna nella relazione Scuola: è lo studente che è associato ad una scuola Vedi pag 149 Esempi E-R → modello relazionale CodDisciplina Cognome Docente Nome N insegna N Disciplina Matricola MODELLO E-R NumOre NumClassi NomeDisciplina MODELLO RELAZIONALE DOCENTE (Matricola, Cognome, Nome) DISCIPLINA (CodDisciplina, NomeDisciplina) INSEGNA(Matricola,CodDisciplina, NumOre , NumClassi) chiave esterna ESERCIZIO: PROVA A TRASFORMARE L'ESEMPIO DI SLIDE 9 DAL MODELLO E-R AL MODELLO RELAZIONALE (vedi anche pag 152) Per rappresentare l'associazione N:N (molti a molti) ho introdotto una relazione specifica con due chiavi primarie esterne Vedi pag 152-153 SQL Structured Query Language SQL è il tipico linguaggio informatico in cui sono scritti i database, è un linguaggio pensato per questo campo dell'informatica. Query: interrogazione/domanda al Database Di SQL vediamo soltanto alcune istruzioni (le principali) che potrebbero tornarvi utili. SQL non è case sensitive ovvero maiuscolo = minuscolo, di solito le istruzioni SQL sono scritte in caratteri maiuscoli I tipi di dati che possono essere utilizzati (vedi pagina 173) sono simili ad altri linguaggi di programmazione ad esempio: BIT per un tipo booleano 1, 0 (TRUE/FALSE) INT o INTEGER per un intero (da -2147483648 a 2147483648) FLOAT per un numero reale (da 1E-38 a 1E38)CHAR O CHAR o CHARACTER per un carattere (ad es 'o', 'P' '0') DATE per una data (formato “anno/mm/gg”) TIME per un tempo (formato “anno/mm/gg h:min:s:ms) NB: il termine tipo in informatica ha un significato ben preciso tipo = formato del dato. Modificare il tipo può avere effetti devastanti! Ad es. pensare alla differenza tra il carattere zero '0' e il numero 0 PRINCIPALI ISTRUZIONI IN SQL SQL is a DDL, DML and DCL ;-) Data Definition Language → definizione del database Data Manipulation Language → manipolazione dei dati: inserimento cancellazione modifiche e QUERY cioè interrogazione Data Control Language → controllo delle operazioni: gestione accessi, permessi di autorizzazioni a fare o non fare determinate cose a seconda degli utenti Sono presenti istruzioni dedicate per ciascuna delle tre fasi sopra CREATE DATABASE Negozio; Sto creando il database chiamato Negozio ci vuole un ';' alla fine della linea come in C rispettare la sintassi! Vedi pag 174-183 SQL istruzioni DDL da sapere CREATE TABLE Azienda attenzione alla , Vincoli su attributi ( CodAzienda CHAR(5) NOT NULL , RagioneSociale CHAR(5) NOT NULL , Fatturato DECIMAL(9,2) DEFAULT 1000000.00, NumDipendenti INT(5), PRIMARY KEY(CodAzienda), Chiave primaria ); Per dichiarare una chiave esterna e quindi una relazione tra due tabelle si utilizza l'istruzione: FOREIGN KEY(<ATTRIBUTO1>,...) Ad esempio in REFERENCES <TABELLA> (<ATTRIBUTO1>,...) CREATE TABLE DIPENDENTE ( /* inserire attibuti di dipendente */ Un dipendente per definizione deve essere associato ad una azienda, introduco quindi una chiave esterna FOREIGN KEY(CodAzienda) REFERENCES AZIENDA (CodAzienda) ); Vedi pag 177 Questo è un vincolo di integrità referenziale: garantisce la consistenza e l'integrità dei dati SQL istruzioni DML da sapere INSERT INTO → per inserire i valori delle righe della tabella UPDATE → per modificare i valori delle righe della tabella DELETE FROM → per cancellare i valori delle righe della tabella SELECT → per selezionare, interrogare il database, query ECCO LA QUERY!! Esempio di sintassi delle istruzioni per la tabella Azienda INSERT INTO AZIENDA VALUES (“M001”,“Mortara Export”,1500000.00,80); /* Definiamo la nostra azienda Mortara Export */ /* La Mortara Export è stata assorbita dalla UPDATE AZIENDA SET RagioneSociale =“Pavia Export”; Pavia Export, cambiamo la Ragione Sociale */ DELETE FROM AZIENDA WHERE CodAzienda = “M001”; /* La Pavia Export è fallita :-( non esiste più nel database delle aziende lombarde */ Vedi pag 178 SQL istruzioni DML da sapere Una volta creato e riempito il database, useremo il comando SELECT per estrarre le informazioni ovvero fare le query, le interrogazioni, è un comando complesso perché permette tanti tipi di interrogazioni anche molto articolate, con vincoli e condizioni da rispettare. Alcuni esempi semplici e da sapere: SELECT RagioneSociale FROM AZIENDA; /* Stiamo cercando tutte le ragioni sociali delle aziende presenti in database */ CARATTERE JOLLY * (ASTERISCO - STAR) SELECT * FROM AZIENDA; /* Stiamo cercando tutti gli attributi delle aziende presenti in database */ /* Stiamo cercando il codice azienda dell'azienda che ha ragione sociale Pavia Export */ SELECT CodAzienda FROM AZIENDA WHERE RagioneSociale=“Pavia Export”; THAT'S VERY POWERFUL ;-)