BASI DI DATI BIOLOGICHE Corso di Bionforma;ca ––––––––––––––––– Corso di Laurea in Scienze Biologiche Prof. R. Oliveto -­‐ A.A. 2011/2012 lunedì 19 marzo 12 1 Introduzione (1) I database sono ormai una componente fondamentale della vita di tuI i giorni: molte delle nostre più banali aIvità ci portano ad interagire con qualche ;po di database Prenotazioni di alberghi, biglieI aerei, etc Telepass / Viacard Richiesta di documen; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 2 Introduzione (2) Le aIvità appena descriQe coinvolgono applicazioni di database tradizionali, avendo a che fare principalmente con tes; e numeri I progressi tecnologici, però, stanno aprendo la strada a nuove interessan;ssime applicazioni di database: I Database Mul;mediali (immagini, videoclip, suoni, ecc) I sistemi informa;vi geografici I sistemi Data Warehouse I motori di ricerca Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 3 La nozione di DataBase (1) Una Base di Da; (Database o DB) è una collezione di da; correla; Esempio: una rubrica telefonica creata usando Access, Paradox o Excel, ecc. Per “da;” si intendono dei faI no;, con un significato implicito, che possono essere memorizza; Esempio: nome, cognome, indirizzo e telefono di un abbonato telefonico Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 4 La nozione di DataBase (2) Un “database” deve presentare le seguen; proprietà: Rappresenta alcuni aspeI del mondo reale, deQo miniworld o Universo del Discorso (UOD). Cambiamen; al miniworld sono riflessi nel database E’ una collezione di da1 logicamente correla1 con qualche significato inerente Un assor;mento casuale di da; non può correQamente essere considerato un database. E’ progeQato, costruito e riempito di da; per un u1lizzo specifico. Ha una ;pologia ben definita di uten1 ed è realizzato per delle applicazioni a cui tali uten; sono interessa; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 5 Banche da; biologiche Una banca da1 biologica raccoglie informazioni e da; derivan; dalla... le9eratura da analisi effe9uate sia in laboratorio sia aQraverso analisi bioinforma;che Ogni banca da; biologica è caraQerizzata da un elemento biologico centrale che cos;tuisce l’oggeQo principale intorno al quale viene costruita la entry della banca da; Esempi di elemento centrale: 1) la sequenza nucleo;dica di DNA nelle banche da; di acidi nucleici 2) promotore nelle banche da; di promotori eucario;ci Ciascuna entry raccoglie tuQe le informazioni che caraQerizzano l’elemento centrale Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 6 Raccolte di da; biologici Raccolte di dati biologici Libri - 1960 Margaret Dayhoff, collezione di proteine (NBRF) Floppy disk - 1977 PDB Strutture di macromolecole Cd-rom - 1980 EMBL (Heidelberg) acidi nucleici 1982 GenBank (NCBI) acidi nucleici - 1991 EST (Expressed Sequence Tags) Internet WWW - 1996 Genomi - 1998 Trascrittomi . Oggi: migliaia di collezioni: funzioni, famiglie di proteine, motivi, vie metaboliche... Riccardo Percudani Corso banchedati.odp di Bioinformatica - Basi di dati biologiche File: lunedì 19 marzo 12 02/03/04 R. Oliveto 7 Tipologie di banche da; Primarie o derivate Nelle banche da; primarie sono presen; solo le informazioni minime necessarie da associare ai da; per iden;ficarli al meglio Le banche da1 derivate contengono invece insiemi di da; omogenei che possono derivare da banche da; primarie, ma rivis; e annota; con varie informazioni che danno un valore aggiunto alla banca da; stessa Non Curate o curate Le banche da1 non curate contengono i da; grezzi così come sono forni; da chi li ha oQenu;, o con annotazioni da sistemi automa;ci Le banche da1 curate presentano informazioni che sono verificate, confrontate con quelle di altre banche da;, opportunamente correQe (o per lo meno con segnalazione di possibili errori e confliI con altri da;) Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 8 Molecural Biology Database (1) 1380 database organizza; in 14 categorie e 41 soQocategorie Nel 2004, 548 database Incremento del 150% Nel 2011, 1330 database Incremento del 3% Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 9 Molecural Biology Database (2) Con;ne un archivio di da1 biomolecolari di vario ;po Oltre 50 categorie Ha un’effecitente organizzazione logica di queste informazioni Che consente un rapido accesso alle informazioni Fonisce strumen; per accedere alle informazioni Con interfaccia web L’informazione proviene da le9eratura specializzata sull’argomento analisi effeQuate in laboratorio (in vitro o in vivo) analisi bioinforma;che (in silico) Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 10 Problema;che L’enorme mole di da; biologici prodoI porta a dover ges;re le seguen; problema;che: Archiviazione di enormi moli di da1: creare, ges;re e mantenere banche da; Recupero di informazioni in modo automa;co dalle banche da; Analisi automa1ca dei da1 Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 11 Archiviazione da; Si prenda come esempio il progeQo GENOMA Le molecole di DNA sono molecole lineari che, astraendo dalla struQura 3D, possono essere rappresentate come sequenze di caraQeri dell’alfabeto (A, T, C, G) che rappresentano le 4 basi, ovvero adenina (A), citosina (C), guanina (G) e ;mina (T). Da un punto di vista informa;co per memorizzare 1 caraQere (cioè 1 base) abbiamo bisogno di 1 byte. Approssima;vamente il genoma umano è lungo 3,2 * 109 caraQeri (basi). Quindi per memorizzarlo occorrono 3,2 * 109 byte Siamo nell'ordine dei giga per 1 sola sequenza! Un DVD Single Layer -­‐ Single Side riesce a memorizzare 4,7 GB Necessario un tale DVD per una singola sequenza In un HD da un terabyte (103 Gigabyte) si possono memorizzare circa 300 sequenze Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 12 Recupero di informazioni Una banca da; priva di modalità di accesso efficien; una “tomba di da;”. Necessario usare tecniche per garan;re un accesso oImale Solitamente nascoste agli u;lizzatori, hanno molto a che fare con l’organizzazione logica dei da; Ad esempio Potrebbe essere necessario prevedere interfacce per permeQere agli uten; di leggere e estrarre informazioni Può essere necessario correlare informazioni contenute in banche da; separate (cross-­‐reference) Servono techniche per recupera informazioni simultaneamente in diversi archivi di da; distribui; su diversi computer Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 13 Interazione con una BDB Esistono sistemi di interrogazioni via Web che consentono di recupera informazioni da una BDB Da semplici interrogazioni per parola chiave a più raffinate interrogazioni Estrazione da1 E’ possibile estrarre da; da una base di da; in deversi forma; Scaricare un dato biologico estraQo nel formato scelto in locale come file di testo Estrazione delle informazioni mediante semplici programmi ScriI in bioperl o biopython, o altri linguaggi Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 14 Perchè sia interessa; alle BDB (1) Vi sono una serie di strumen; bioinforma;ci che permeQono di ricavarne informazioni. Essi si sono sviluppa; in base a ques; tre processi biologici fondamentali la sequenza del DNA determina la sequenza amminoacidica della proteina (mediante il processo della sintesi proteica); la sequenza aminoacidica determina la struQura tridimensionale della proteina; la struQura tridimensionale della proteina ne determina la funzione Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 15 Perchè sia interessa; alle BDB (2) AQraverso le BDB saremo in grado di: data una sequenza di acidi nucleici o proteica trovare una sequenza simile in banca da;; data una struQura proteica trovare, in banca da;, una struQura simile ad essa; data una sequenza proteica prevedere una possibile struQura tridimensionale; e tanto altro... Impa9o possibilità di ricostruire le tappe evolu;ve delle varie specie, incluso l'uomo possibilità di ricavare caraQeris;che per le varie biomolecole u;li nella progeQazione di nuove molecole e farmaci in seQori diversi, dall'agroalimentare a quello farmaceu;co Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 16 Un po’ di numeri Esistono più di 1000 differen; database biologici La grandezza varia da diversi Kb a diversi Gb DNA: > 10 Gb Proteine: 1 Gb StruQure 3D: 5 Gb altri: più piccoli Le basi di da; sono in con;nua evoluzione con aggiornamen; giornalieri, mensili o annuali Alta visibilità grazie al Web (alcune sono anche free) con possibilità di scaricabili in locale Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 17 GESTIRE E PROGETTARE UNA BASE DI DATI Basi di da; Biologiche Prof. R. Oliveto -­‐ A.A. 2011/2012 lunedì 19 marzo 12 18 Ges;re un DataBase Un database può essere ges;to manualmente (es. lo schedario di una biblioteca) o aQraverso un elaboratore ele9ronico Un database computerizzato può essere creato e ges;to o da programmi realizza; “ad hoc” o da un Database Management System (DBMS) Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 19 IL DBMS Un database management system (DBMS) è una collezione di programmi che permeQe di creare e manutenere una base di da; E’ un souware "general-­‐purpose" che facilita la creazione, costruzione e ges;one di database per differen; applicazioni Fornisce un modo per memorizzare informazioni in struQure da; efficien;, scalabili e flessibili Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 20 DBMS vs Database Stessa differenza esistente tra Word (applica;vo) e file .DOC (da;) Un DBMS è un applica1vo per ges;re database Esempio: MySQL Un database è un insieme di da1 Esempio: file con estensione .MDB Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 21 Funzionalità di un DBMS (1) Il DataBase Management System è un applica;vo che definizione, creazione e manipolazione di un database I principali servizi che offre un DBMS sono: memorizzazione dei da; organizzazione dei da; ges;one dei da; ricerca dei da; elaborazione dei da; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 22 Funzionalità di un DBMS (2) Altre funzioni di un DBMS sono: Validare i da1 controllando che essi siano correI e che rispondano alle regole d’inserimento fissate Normalizzare il database verificando che non ci siano inu;li duplicazioni di da; e permeQendo di eliminarle senza perdita sostanziale di informazione Indicizzare i da1 organizzandoli secondo la struQura prestabilita e ordinandoli di conseguenza Verificare la coerenza dei da; in modo che alla modifica di un dato vengano aggiorna; automa;camente tuI i da; eventualmente dipenden; da esso Regolare l’accesso agli uten; alla base da; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 23 Interagire con un DBMS Un DBMS può ricevere comandi DireQamente dall’utente in modo interaIvo, tramite par;colari comandi appartenen; ai linguaggi “acceQa;” da quel par;colare DBMS Tramite un programma scriQo in un linguaggio di programmazione tradizionale che ingloba alcuni comandi appartenen; ai linguaggi “acceQa;” dal DBMS. Ques; linguaggi possono essere raggruppa; in base alle loro funzioni DDL (Data Descrip1on Language), tramite i quali si definiscono le struQure del database. Si dice cioè come dovrà esse organizzata la base di da; DML (Data Manipula1on Language), che servono per impar;re comandi di elaborazione dei da; DCL (Data Control Language), che consente di fornire o revocare agli uten; i permessi necessari per poter u;lizzare i comandi DDL e DML Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 24 Componen; di un DBMS Tabella di descrizione database, è una tabella in cui è descriQo il modello e le caraQeris;che del database. Tabella delle autorizzazioni, è una tabella in cui sono presen; le informazioni dei vari uten; riguardo ai loro permessi di accesso ai vari da;. Tabella per accesso concorrente, ha la funzione di permeQere la ges;one del traffico di più richieste opera; contemporaneamente sui medesimi da;. Language processor, i comandi vengono ricevu; da questa unità, che ha il compito di meQerli in relazione con le specifiche di definizione del modello (contenute nella tabella di descrizione del database) e trasmeQerli al Database Manager Database Manager, ha il ruolo di ricevere i comandi espressi a livello conceQuale cioè operan; sul modello astraQo dei da; e tradurli in comandi a livello fisico trasmeQendoli al file system del sistema opera;vo non prima di aver faQo gli opportuni controlli sulla tabella di autorizzazione e sulla tabella di accesso concorrente Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 25 Tipologie di DBMS Piano o non Relazionale I da; sono contenu; in un’unica tabella Relazionale La sua struQura è più complessa di un DBMS Piano perché i da; sono raccol; in più tabelle collegate tra loro Gerachico Organizzato secondo uno schema ad albero, cos;tuito da tan; nodi collega; tra loro in maniera gerarchica, ciascuno dei quali con;ene un’informazione Re1colare Basato sui grafi, escludendo qualsiasi ;po di gerarchia che colleghi in qualche modo le informazioni Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 26 Database relazionali Nel Database Relazionale, i da; sono organizza; in più tabelle, che possono essere correlate, ed è possibile estrarre informazioni da più tabelle contemporaneamente Gli elemen; cos;tu;vi di un Database Relazionale, partendo dal più piccolo, sono Campi, le singole careQeris;che di un’en;tà del miniworld Record, insieme di campi che careQerizzano un’en;tà Tabella, insieme di record e quindi insieme di en;tà File, rappresentazione fisica di una o più tabelle Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 27 I Campi Un campo è l’unità base di un Database E’ uno spazio nel Database che con;ene un’unità di informazione, ed è iden;ficato da un nome Quando si crea un Database è necessario includere un campo per ogni categoria di da; cui si è interessa; Nome campo Valore campo Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 28 I record Un record è cos;tuito da un insieme di campi che riportano informazioni riferite ad un singolo soggeQo Record Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 29 Le tabelle Una tabella è un elenco che visualizza più record contemporaneamente Tabella Più precisamente ogni riga di una tabella del Database è cos;tuita da un record, ognuno dei quali è suddiviso in campi, che cos;tuiscono le colonne Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 30 Le tre fasi della progeQazione Un Database, come ogni archivio, va progeQato Le fasi di progeQazione di un Database sono tre: Fase 1. ProgeQazione Conce9uale Fase 2. ProgeQazione Logica Fase 3. ProgeQazione Fisica Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 31 La progeQazione ConceQuale E’ questa la prima fase di costruzione di un Database, il cui scopo è quello di individuare la stru9ura dei da1 che devono essere “archivia;” e le relazioni tra loro esisten;. Tale fase prevede la costruzione di diagrammi en;tà relazioni (ERD), cos;tui; da 4 elemen; principali En1tà: un qualsiasi oggeQo conceQuale che caraQerizza la base dei da; in ques;one e che può essere individuato e dis;nto dagli altri A9ribu1: insieme di valori che caraQerizzano un’en;tà A9ribu1 chiave: insieme degli aQribu; sufficien; ad iden;ficare univocamente un’en;tà Relazione: dipendenze o associazioni di interesse informa;vo tra le en;tà rappresentate. Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 32 Esempio ERD Nome Cognome Nome DataNascita Cognome CF Specializzazioni Sesso NumAlbo Descrizione Paziente Biologo Codice n m Sostiene Esito CF Costo EsameLaboratorio n Attributo chiave DataNascita m Effettua Data Paziente Data Cognome Attributo Entità Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 Sesso Specializzazioni Sostiene Attributo multivalore Relazione R. Oliveto 33 La progeQazione logica Questa è la seconda fase della costruzione di una base di da;, in cui lo schema ER precedentemente costruito viene trasformato nello schema logico relazionale Il più diffuso schema logico è quello relazionale Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 34 Il Data Model Relazionale (1) Fu proposto da Codd nel 1970 per favorire l’indipendenza dei da; e reso disponibile come modello logico in DBMS reali nel 1981 E’ il modello più diffuso, sia a livello teorico sia commerciale La forza del modello relazionale è nella sua semplicità e nei solidi formalismi matema;ci su cui si poggia Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 35 Il Data Model Relazionale (2) Si basa sul conceQo matema;co di Relazione Le relazioni hanno una rappresentazione naturale per mezzo di tabelle Ciascuna riga rappresenta una collezione di valori di da; rela; Il database è rappresentato come una collezione di relazioni Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 36 Esempio schema relazionale Paziente CF Cognome Nome DataNascita Sesso EsamiSostenuti Paziente Esame Data Esito Esame Specializzazioni Medico Codice Descrizione Costo Specializzazione EsamiEffettuati Medico Esame Data Medico NumAlbo Cognome Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 Nome DataNascita Sesso R. Oliveto 37 Dal punto di vista matema;co Siano D1, D2, …, Dn n insiemi Il prodoQo cartesiano D1 × D2 ×…× Dn, è l’insieme di tuQe le n-­‐ uple ordinate (d1, d2, …, dn) tali che d1 ∈ D1, d2 ∈ D1, …, dn ∈ Dn Una relazione matema;ca su D1, D2, …, Dn è un soQoinsieme del prodoQo cartesiano D1 × D2 ×…× Dn D1, D2, …, Dn sono i domini della relazione. Una relazione su n domini ha grado n Il numero di n-­‐uple è la cardinalità della relazione. Nelle applicazioni reali, la cardinalità è sempre finita Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 38 Relazione matema;ca: esempio D1 = {a,b} e D2 = {x,y,z} Prodotto cartesiano D1 × D2 a a b b x y y z x y z x y z Una relazione r ⊆ D1 × D2 Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 a a a b b b R. Oliveto 39 Relazioni nel modello relazionale A ogni dominio (aQributo) è associato un nome, unico nella relazione, che “descrive” il ruolo del dominio L’ordinamento fra gli aQribu; è irrilevante Nella terminologia del modello relazionale, una riga è deQa tupla Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 40 Domini, aQribu;, tuple e relazioni Nel modello relazionale, un dominio D è un insieme di valori atomici, cioè indivisibili. Un metodo per specificare un dominio è specificare un ;po di dato da cui sono presi i da; che formano il dominio Esempi Usa_Phone_Numbers: insieme di numeri a 10 cifre che rappresentano numeri telefonici validi negli sta; uni; Social_Security_Number: insieme di SSN validi, di 9 cifre Employee_Ages: possibile età dei dipenden;, da 16 a 80 anni Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 41 Domini Per ogni dominio viene specificato un ;po di dato (o formato) Esempio: USA_PHONE_NUMBER può essere dichiarato come una stringa (ddd)ddd-­‐dddd Potrebbe essere necessario specificare l’unita di misura per interpretare i valori di un dominio Esempio: peso_persona è espresso con l’unità di peso kg Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 42 Schemi di relazione Uno schema di relazione, denotato da R(A1, A2,…, An), descrive una relazione. Uno schema di relazione è formato da: Un nome di relazione R Una lista di aQribu; (A1, A2,…, An) Ciascun Ai è il nome di un ruolo giocato da qualche dominio D nello schema R Il grado di una relazione è il numero di aQribu;, n, del suo schema di relazione Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 43 Schemi di relazione (Esempio) Nome della relazione: Student Grado 7 Dom(SSN) = social_Security_Numbers Dom(Age) = student_ages Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 44 Istanze di relazione Una relazione (o istanza di relazione) r dello schema R(A1, A2,…, An), denotata r(R) è un insieme di tuple r = {t1, t2,…, tn} Ogni ti è una lista ordinata di n valori t = <v1,v2,…,vn> dove ciascun vi ∈ Dom(Ai) ∪ {null} t[Ai] si riferisce al valore vi per l'aQributo Ai Intensione della relazione: R -­‐ schema Estensione della relazione: r(R) -­‐ istanza di relazione Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 45 Schemi e istanze di relazione Schema di relazione Istanza di relazione Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 46 CaraQeris;che di una relazione L’ordinamento delle tuple di una relazione non è parte della definizione. La definizione non specifica alcun ordine Una definizione alterna;va di relazione considera non significa;vo anche l’ordine degli aQribu; In accordo a tale definizione una tupla può essere considerata come un insieme di (<aQributo>, <valore>) Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 47 CaraQeris;che di una Relazione Relazioni equivalenti, con diversi ordinamenti di righe e colonne Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 48 Schema di database relazionale Uno schema di database relazionale è un insieme di schemi di relazione S{R1, R2,…, Rn} Una istanza di database relazionale DB di S è un insieme di istanze di relazione DB={r1, r2,…, rn} tale che ri è una istanza di R1 Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 49 Schema di database relazionale Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 50 Istanza di database relazionale Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 51 Vincoli nel modello relazionale Nel modello relazionale, i valori presen; in un’istanza di relazione devono soddisfare una serie di vincoli: Vincoli di dominio Vincoli di chiave Vincoli di integrità di en1tà Vincoli di integrità referenziale Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 52 Vincoli di dominio Il valore di ciascun aQributo di A deve essere un valore atomico {caraQere, stringa a lunghezza fissa e variabile, data, ora, valuta, ecc…} appartenente a Dom(A) Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 53 Superchiave (1) Una relazione è definita come un insieme di tuple. Per definizione tuI gli elemen; di un insieme sono dis;n;, quindi tuQe le tuple devono essere dis;nte Devono allora esistere dei soQoinsiemi di aQribu; con la proprietà di non avere la stessa combinazione di valori in più tuple. Sia sk un tale soQoinsieme di aQribu;, quindi t1[sk] ≠ t2[sk] L’insieme di aQribu; sk è deQo superchiave di R Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 54 Superchiave (2) Formalmente, una chiave k di uno schema di relazione R è una superchiave tale che, rimovendo uno dei suoi aQribu;, non è più una superchiave k è deQa anche superchiave minimale Informalmente, una chiave k è un insieme di aQribu; minimale che permeQe di iden;ficare univocamente una tupla Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 55 Chiave primaria In una relazione possono esistere più chiavi, deQe chiavi candidate: in tal caso se ne sceglie una, deQa chiave primaria Una chiave deve godere anche delle proprietà di Time_Invariant (invariante nel tempo) Esempio di chiave: {SSN} è una chiave. Ogni insieme di aQribu; che include SSN è una superchiave. Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 56 Vincoli di chiave In una relazione R, non possono esistere valori duplica; per aQribu; chiave k Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 57 Vincoli di integrità di en;tà Nessun valore di chiave primaria può essere “null”. Questo perché: Se ciò fosse permesso, non si avrebbe modo di iden;ficare l’en;tà descriQa nella tupla Non si vogliono memorizzare informazioni su en;tà non iden;ficabili Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 58 Vincoli di integrità referenziale Specifica; tra due relazioni, sono usa; per mantenere consistenza tra tuple delle due relazioni Informalmente: una tupla di una relazione, che riferisce ad una tupla di un’altra relazione, deve riferire ad una tupla esistente E’ il conceQo portante del modello relazionale! Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 59 Esempio L’aQributo DNO di Employee deve riferire ad un DNUMBER esistente nella relazione Department. La relazione Employee è deQa essere relata a Departement tramite l’aQributo DNO Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 60 Formalizzazione (1) Un insieme di aQribu; FK in uno schema di relazione Ri è una chiave esterna se vale: gli aQribu; in FK hanno lo stesso dominio degli aQribu; della chiave primaria PK di un altro schema di relazione R2 (gli aQribu; in FK riferiscono alla relazione R2) un valore di FK in una tupla t1 di R1 o occorre come un valore di PK per qualche tupla t2 di R2 o è null. T1[FK]= T2[PK] oppure T1[FK]=null Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 61 Formalizzazione (2) L’aQributo DNO di Employee è una chiave esterna, poiché rispeQa le condizioni appena elencate Una tupla t1 di una relazione R1 è deQa referenziare una tupla t2 di una relazione R2 se vale t1[FK] = t2[PK] Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 62 Vincoli di integrità referenziale Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 63 Violazioni: Insert (1) Può violare tuI e quaQro i ;pi di vincoli Dominio: un valore di un aQributo può non apparire nel corrispondente dominio Chiave: il valore della chiave nella nuova tupla già esistente nella relazione r(R) Integrità di en1tà: la chiave primaria è inserita a null Integrità referenziale: il valore di una chiave esterna riferisce ad una tupla che non esiste nella relazione referenziata. Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 64 Violazioni: Insert (2) Come ges;re la violazione? Forzare l’inserimento completo (della relazione riferita) Rifiutare l’inserimento Nel primo caso la violazione può riguardare in cascata l’inserimento su altre relazioni Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 65 Violazioni: Delete La delete può violare solo l’integrità referenziale Come ges;re la violazione: RigeQare la cancellazione Tentare di propagare la cancellazione Modificare i valori dell’aQributo referenziante (posto a null) Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 66 Violazioni: Modifica Nessun problema per aQribu; che non sono né chiave primaria né chiave esterna Modifica chiave primaria: Analogo a cancellare una tupla e inserirne un’altra Modifica chiave esterna: Il DBMS deve verificare che riferisca ad una tupla esistente Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 67 Cos’è la normalizzazione Una tecnica di verifica dei risulta; della progeQazione che porta all’organizzazione dei da; omogenei in tabelle correlate con legami efficien;, eliminando ridondanze, inconsistenze e anomalie in aggiornamento La normalizzazione avviene usando tre forme normali (forme di verifica): Prima Forma Normale Seconda Forma Normale Terza Forma Normale Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 68 Prima forma normale (1) Condizione: in una tabella, gli elemen; delle colonne devono essere ad un sol valore, ovvero ogni aQributo non può avere più di un valore per un singolo record Articolo NegoziAcquirenti 1 ABCD In questo caso l’aQributo “Negozi acquiren;” riporta quaQro valori per un solo record; non essendo ciò possibile occorre la Normalizzazione. N.B. L’insieme di da; omogenei raggruppa; tra loro si chiama Array (A B C D) e quindi in una tabella si può dire che gli elemen; delle colonne non possono essere degli array Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 69 Prima forma normale (2) Normalizzazione: nel caso di presenza di array, normalizzare la tabella significa suddividere le informazioni in tante righe quan; sono i valori dell’array. Articolo NegoziAcquirenti 1 A 1 B 1 C 1 D Esempio: In questo caso, i record diventano quaQro e non più uno Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 70 Seconda Forma Normale (1) Condizione: se in una tabella la chiave primaria è cos;tuita da più di un aQributo (più campi), ogni campo (o colonna) non appartenente alla chiave deve dipendere dall’insieme delle chiavi, e non solo da una di queste Articolo NegoziAcquirenti Quantità IndirizzoNegozio 1 Conad 100 via Roma, 234 In questo caso le chiavi primarie sono “Ar;colo” e “Negozio acquirente”, l’aQributo “Quan;tà” dipende da tuQe e due (una certa quan;tà di un ar;colo è acquistata da un determinato negozio), ma l’aQributo “Indirizzo” dipende solo dalla chiave “Negozio acquirente” (l’indirizzo appar;ene al negozio, indipendentemente dall’ar;colo acquistato) Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 71 Seconda Forma Normale (2) Normalizzazione: normalizzare significa ‘spezzare la tabella’ e produrre tante tabelle che soddisfino la condizione, in modo, quindi, che i campi non appartenen; alla chiave dipendano da essa Articolo NegoziAcquirenti Quantità 1 Conad 100 Negozio IndirizzoNegozio Conad via Roma, 234 Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 72 Terza Forma Normale (1) Condizione: in una tabella, la dipendenza fra le colonne deve essere basata solo sulla chiave primaria, ovvero non ci deve essere nessun legame di dipendenza fra aQribu; che non sono chiavi primarie (dipendenze transi;ve). Codice Titolo Cantante DataNascita Nazionalità 1 Attenti al lupo Lucio Dalla 4/3/1943 Italia Nell’esempio, gli aQribu; “DataNascita” e “Nazionalità” non dipendono dalla chiave “Codice”, ma dall’aQributo “Cantante” che non è chiave primaria Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 73 Terza Forma Normale (2) Normalizzazione: normalizzare significa produrre tante tabelle che soddisfino la condizione, quindi ‘spezzare’ la tabella che non soddisfa la condizione e spostare le dipendenze transi;ve in una tabella collegata alla prima tramite una chiave esterna Cantante DataNascita Nazionalità Lucio Dalla 4/3/1943 Italia Codice Titolo Cantante 1 Attenti al lupo Lucio Dalla Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 74 MANIPOLARE UNA BASE DI DATI CON IL LINGUAGGIO SQL Basi di da; Biologiche Prof. R. Oliveto -­‐ A.A. 2011/2012 lunedì 19 marzo 12 75 SQL Il linguaggio SQL permeQe la definizione, la manipolazione (aggiornamento e recupero) e la ges;one di basi di da; relazionali E’ una delle ragioni del successo dei db relazionali in ambito commerciale: essendo uno standard in tuI i DBMS relazionali, gli uten; sono poco propensi a migrare verso data model diversi, quali il gerarchico o il re;colare Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 76 SQL: un po’ di storia (1) Nel 1970 Codd propone il modello relazionale: iniziano esperimen; e ricerche per la realizzazione di linguaggi relazionali, cioè di linguaggi in grado di realizzare le caraQeris;che del modello astraQo Il primo risultato è SEQUEL (Structured English QUEry Language), definito all’IBM Research Facile da imparare e u;lizzare, in quanto basato su termini inglesi che mascherano i difficili conceI dell’algebra relazionale Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 77 SQL: un po’ di storia (2) Una versione rivista, il SEQUEL/2, ridenominata SQL (Structured Query Language) viene definita nel 1976 Il primo prodoQo basato su SQL viene chiamato Oracle (1979), lanciato dalla Rela;onal Souware, Inc. Nel 1981 IBM annuncia un prodoQo SQL denominato SQL/Data System; nel 1983 viene rilasciato il DBMS relazionale DB2 compa;bile con SQL/DS Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 78 SQL: un po’ di storia (3) Oggi SQL è implementato da tuI i principali fornitori di DBMS, ed è il linguaggio per database più usato al mondo L’ANSI e l’ISO hanno sviluppato una serie di standard per SQL, quali ANSI SQL-­‐86, SQL-­‐92 (SQL2) ed SQL3 Sfortunatamente ogni DBMS relazionale implementa un suo livello (o dialeQo) di SQL, che è un’estensione o un soQoinsieme di un livello standard Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 79 Il linguaggio SQL SQL fornisce istruzioni per la definizione di da;, query e aggiornamen;, quindi è sia un DDL (Data Defini;on Language) che un DML (Data Manipula;on Language) Fornisce inoltre facility per definire viste e per ricavare indici SQL può essere usato interaIvamente (con maschere del DBMS) o essere incorporato (embedded) in programmi C, Cobol, Java, ecc. Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 80 Schema in SQL Il conceQo di schema SQL è usato per raggruppare tabelle ed altri costruI che appartengono alla stessa applicazione di database Uno schema SQL è iden;ficato da un nome dello schema, ed include un iden;ficatore di autorizzazione per indicare l’utente proprietario dello schema, così come dei descriQori per ogni elemento dello schema Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 81 Creare uno schema Uno schema include: tabelle, domini, viste e altri costruI, quali permessi di autorizzazione, ecc La sintassi per creare uno schema è: CREATE SCHEMA nome_schema AUTHORIZATION nome_utente Crea uno schema chiamato nome_schema, il cui proprietario è l’utente con account nome_utente Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 82 Il comando CREATE TABLE CREATE TABLE è usato per specificare una nuova relazione, assegnandole un nome ed un insieme di aQribu; e vincoli Gli aQribu; sono specifica; da un nome, un ;po di dato per definire il dominio dei valori, ed eventuali vincoli In ul;mo si specifica la chiave, i vincoli di integrità di en;tà e di integrità referenziale Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 83 Tipi di da; e domini (1) Numerici Interi (INTEGER o INT, SMALLINT) e Reali (FLOAT, REAL, DOUBLE PRECISION) Numeri formaQa; (DECIMAL(i,j), DEC(i,j), NUMERIC(i,j)) i, deQa precisione, indica il numero di cifre decimali, mentre j, deQa scala, indica il numero di cifre dopo la virgola Stringhe di caraQeri A lunghezza fissa (CHAR(n), CHARACTER(n)) e a lunghezza variabile (VARCHAR(n) o CHAR VARYING(n)) Per default n, il numero massimo di caraQeri, è 1 Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 84 Tipi di da; e domini (2) Stringhe di bit A lunghezza fissa (BIT(n)) e a lunghezza variabile (BIT VARYING(n)) DATE Ha dieci posizioni, con componen; YEAR, MONTH e DAY. Formato YYYY-­‐MM-­‐DD TIME Ha (almeno) oQo posizioni con componen; HOUR, MINUTE e SECOND. Formato HH:MM:SS Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 85 Domini personalizza; In SQL2 è possibile sia dichiarare il ;po di dato di un aQributo, sia dichiarare il dominio Ciò semplifica il cambiamento di un ;po per un dominio usato più volte nello schema. Esempio: CREATE DOMAIN ssn_type AS CHAR(9); e poi si usa ssn_type per gli aQribu; ssn e superssn di Employee mgrssn e essn di Department essn di Works_on Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 86 I valori null e default Poiché SQL consente che un aQributo abbia valore null, se si vuole impedire ciò si usa il vincolo NOT NULL Tale vincolo deve sempre essere specificato per la chiave primaria E’ anche possibile specificare un valore di default per un aQributo, aQraverso la clausola DEFAULT <value>, dopo la dichiarazione dell’aQributo Senza tale clausola il valore di default di un aQributo è null Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 87 CREATE TABLE: Esempio Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 88 Altri vincoli (1) Dopo le specifiche degli aQribu;, possono essere specifica; i vincoli di tabella, quali chiave ed integrità referenziale La clausola PRIMARY KEY specifica uno o più aQribu; che faranno da chiave primaria La clausola UNIQUE specifica una chiave alterna;va La clausola FOREIGN KEY specifica l’integrità referenziale Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 89 Altri vincoli (2) Il progeIsta dello schema può specificare l’azione da intraprendere se si viola un vincolo di integrità referenziale, aQraverso la cancellazione di una tupla referenziata o aQraverso la modifica di un valore di chiave referenziata L’azione referenziale triggered può essere specificata nella clausola FOREIGN KEY Possibili azioni sono SET NULL, CASCADE e SET DEFAULT, qualificate da opzioni ON DELETE e ON UPDATE Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 90 Altri vincoli: Esempio (1) Specifica di valori di default e azioni referenziali triggered Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 91 Altri vincoli: Esempio (2) Nell’esempio, per la chiave esterna SUPERSSN di EMPLOYEE ci sono i vincoli: SET NULL ON DELETE Se la tupla dell’impiegato che supervisiona viene cancellata, il valore di SUPERSSN è posto a null in tuQe le tuple impiegato che lo referenziano. CASCADE ON UPDATE Se il valore SSN di un impiegato che supervisiona è aggiornato, il nuovo valore è riportato in SUPERSSN di tuQe le tuple impiegato che referenziano il valore aggiornato Ai vincoli può essere dato un nome (per poterli riu;lizzare), usando la keyword COSTRAINT Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 92 Relazioni base e virtuali Le relazioni create con CREATE TABLE sono deQe tabelle base o relazioni base in SQL, e significa che sono create e memorizzate come file dal DBMS Le relazioni base sono dis;nte dalle relazioni virtuali, create mediante CREATE VIEW, cui può o meno corrispondere un file fisico In SQL gli aQribu; sono considera; ordina; nella sequenza in cui sono sta; specifica;. Le righe non sono considerate ordinate Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 93 Il comando DROP SCHEMA Se uno schema non è più necessario, si usa il comando DROP SCHEMA, con due possibili opzioni (drop behaviour): CASCADE e RESTRICT Esempi: DROP SCHEMA Company CASCADE; Lo schema del db COMPANY viene rimosso, con tuQe le tabelle, domini ed altri elemen; DROP SCHEMA Company RESTRICT; Lo schema è eliminato solo se non con;ene elemen; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 94 Il comando DROP TABLE PermeQe di eliminare una tabella DROP TABLE Dependent CASCADE; Se non si vuole tenere più traccia delle persone a carico nel db COMPANY DROP TABLE Dependent RESTRICT; La tabella è eliminata solo se non è referenziata in alcun vincolo o vista. Con l’opzione CASCADE sarebbero automa;camente elimina; insieme alla tabella stessa Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 95 Il comando ALTER TABLE La definizione di una tabella base può essere cambiata usando il comando ALTER TABLE Possibili azioni di modifica di una tabella sono: Aggiunta o rimozione di aQribu; Cambio di definizione di una colonna Aggiunta o rimozione di un vincolo Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 96 ALTER TABLE: Esempi Vogliamo aggiungere il lavoro svolto da un impiegato nella tabella Employee ALTER TABLE Company.Employee ADD job VARCHAR(12); Il valore di Job o si specifica di default o sarà null. Con la ALTER TABLE non è permessa la clausola NOT NULL Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 97 ALTER TABLE: Esempi Vogliamo eliminare una colonna: occorre scegliere l’opzione CASCADE o RESTRICT Con CASCADE tuI i vincoli e le viste che referenziano la colonna sono elimina; automa;camente dallo schema Con RESTRICT il comando ha successo solo se nessun vincolo o vista referenzia la colonna Esempio: rimuovere address dalla tabella Employee ALTER TABLE Company.Employee DROP address CASCADE; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 98 ALTER TABLE: Esempi Modifica di una colonna eliminando una clausola di default o definendone una nuova. Esempi: ALTER TABLE Company.Department ALTER mgrssn DROP DEFAULT; ALTER TABLE Company.Department ALTER mgrssn SET DEFAULT “333444555”; Cambio di vincoli E’ possibile eliminare un vincolo solo se ha un nome ALTER TABLE Company.Employee DROP COSTRAINT empsuperfk CASCADE; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 99 Il comando SELECT (1) Il comando SELECT è l’istruzione di base per recuperare informazioni da un database Il SELECT dell’SQL non ha relazioni con l’operatore di select dell’algebra relazionale. La forma di base, deQa mapping o blocco di SELECT FROM WHERE è formata da tre clausole: SELECT <lista_attributi> FROM <lista_tabelle> WHERE <condizione> Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 100 Il comando SELECT (2) <lista_attributi> è una lista di nomi di aQribu; i cui valori devono essere recupera; dalla query <lista_tabelle> è una lista di nomi di relazioni richies; per elaborare la query <condizione> è un’espressione booleana di ricerca che iden;fica la tupla da ritrovare Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 101 SELECT: Esempio (1) Trovare la data di nascita e l’indirizzo dell’impiegato di nome ‘John B. Smith’ SELECT bdate, address FROM Employee WHERE fname=‘JOHN’ AND minit=‘B‘ AND lname=‘SMITH’; BDATE e ADDRESS sono deI anche a9ribu1 di proiezione Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 102 SELECT: Esempio (2) Viene effettuata prima una selezione e poi una proiezione SELECT bdate, address FROM employee WHERE fname=‘JOHN’ AND minit=‘B’ AND lname=‘SMITH’; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 103 SELECT: Esempio (3) Trovare cognome, nome e indirizzo di tuI gli impiega; del dipar;mento numero 5 SELECT fname, lname, address FROM Employee WHERE dno=5; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 104 Cross Product o Cross Join Se non si specifica la clausa WHERE e nella clausola FROM sono specificate più tabelle, si effeQua un cross product o cross join (prodoQo cartesiano) ProdoQo cartesiano R(A1, A2,…, An) x S(B1, B2,…, Bm) = Q(A1, A2,…, An, B1, B2,…, Bm) In Q si ha una tupla per ogni combinazione di una da R ed una da S Se R con;ene nr tuple ed S con;ene ns tuple, allora R x S con;ene nr x n1 tuple Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 105 ProdoQo cartesiano: Esempio Impiegati Impiegato Rossi Neri Bianchi Reparto A B B Reparti Codice A B Capo Mori Bruni Impiegato Reparto Codice Capo Rossi A A Mori Rossi A B Bruni Neri B A Mori Neri B B Bruni Bianchi B A Mori Bianchi B B Bruni SELECT * FROM Impiegati, Reparti Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 106 Tabelle joined Possono essere usa; i seguen; ;pi di join: INNER JOIN LEFT OUTER JOIN / RIGHT OUTER JOIN FULL OUTER JOIN Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 107 Inner Join: Esempio (1) Impiegati Impiegato Rossi Neri Bianchi Reparto A B B Impiegat Reparto o Rossi A Neri B Bianchi B Codice A B B Capo Mori Bruni Bruni Reparti Codice A B Capo Mori Bruni SELECT * FROM (Impiegati JOIN Reparti ON Impiegati.Reparto = Reparti.Codice) Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 108 Inner Join: Esempio (2) Trovare il nome e l'indirizzo di ogni impiegato che lavora per il Dipar;mento ‘Research’: SELECT fname, lname, address FROM (Employee JOIN Department ON dno=dnumber) WHERE dname='Research‘; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 109 Join: Tuple tagliate fuori Impiegati Impiegato Rossi Neri Bianchi Reparto A B B Impiegat Reparto o Neri B Bianchi B Codice B B Capo Bruni Bruni Reparti Codice B C Capo Bruni Verdi SELECT * FROM (IMPIEGATI JOIN REPARTI ON IMPIEGATI.REPARTO = REPARTI.CODICE Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 110 Join esterno Sinistro: man;ene tuQe le ennuple del primo operando, estendendole con valori nulli, se necessario Destro: ... del secondo operando ... Completo: … di entrambi gli operandi ... Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 111 Leu Join: Esempio Impiegati Impiegato Rossi Neri Bianchi Reparto A B B Reparti Codice B C Capo Bruni Verdi Impiegato Reparto Codice Capo Rossi A Neri B null B null Bruni Bianchi B B Bruni SELECT * FROM (Impiegati LEFT JOIN Reparti ON Impiegati.Reparto = Reparti.Codice) Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 112 Right Join: Esempio Impiegati Impiegato Rossi Neri Bianchi Reparto A B B Reparti Codice B C Capo Bruni Verdi Impiegato Reparto Codice Capo null null C Verdi Neri B B Bruni Bianchi B B Bruni SELECT * FROM (Impiegati RIGHT JOIN Reparti ON Impiegati.Reparto = Reparti.Codice) Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 113 Full Join: Esempio Impiegati Impiegato Rossi Neri Bianchi Reparto A B B Reparti Codice B C Capo Bruni Verdi Impiegato null Rossi Neri Bianchi Codice C null B B Capo Verdi null Bruni Bruni SELECT * FROM (Impiegati FULL JOIN Reparti ON Impiegati.reparto = Reparti.Codice) Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 Reparto null A B B R. Oliveto 114 Renaming (1) In SQL lo stesso nome può essere usato per più aQribu; solo se ques; appartengono a relazioni diverse Se una query coinvolge tali relazioni, occorre qualificare il nome dell’aQributo con il nome della relazione per evitare ambiguità Esempio: Employee.SSN Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 115 Renaming (2) Si può avere ambiguità anche nel caso di query che riferiscono due volte alla stessa relazione Esempio: Per ogni impiegato, trovare il nome ed il cognome suo e del suo superiore direQo SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME FROM EMPLOYEE AS E, EMPLOYEE AS S WHERE E.SUPERSSN=S.SSN; Abbiamo dichiarato nomi di relazione alterna;vi E ed S, deI alias, per la relazione Employee Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 116 Il caraQere jolly “*” Recupera tuI gli aQribu; delle tuple selezionate Esempio: trovare tuI i valori degli aQribu; degli impiega; che lavorano per il dipar;mento n°5 SELECT * FROM Employee WHERE dno=5; Trovare tuI gli aQribu; di Employee e gli aQribu; del Department per cui lavora ogni impiegato del Dipar;mento ‘Research’ SELECT * FROM Employee, Department WHERE dname=‘Research’ AND dno=dnumber; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 117 Duplicazioni di tuple in SQL SQL non traQa relazioni come insiemi: tuple duplicate possono apparire più di una volta. Se le duplicazioni non sono volute,lo si specifica con la clausola DISTINCT Esempi: Trovare i salari di tuI gli impiega; SELECT salary FROM Employee; Trovare i salari dis;n; degli impiegatI SELECT DISTINCT salary FROM Employee; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 118 Confronto tra soQostringhe Per il confronto tra stringhe si usa l’operatore LIKE CaraQeri jolly: ‘%’ rimpiazza qualsiasi numero di caraQeri ‘_’ rimpiazza un singolo caraQere Esempio: trovare tuI gli impiega; il cui indirizzo è a Houston, Tx SELECT fname, lname FROM Employee WHERE address LIKE ‘%Houston, Tx%’; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 119 Uso di “LIKE” (1) Gli impiega; che hanno un nome che inizia per 'A' e ha una 'd' come terza leQera SELECT * FROM Employee WHERE fname LIKE 'A_d%' Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 120 Uso di “LIKE” (2) Trovare tuI gli impiega; na; negli anni ’50. Il formato di data è YYYY-­‐MM-­‐DD. SELECT fname, lname FROM Employee WHERE bdate LIKE ‘_ _ 5_ _ _ _ _ _ _ _’; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 121 Calcolo di valori Mostrare i salari risultan; se a tuI gli impiega; che lavorano sul progeQo ‘Product X’ viene concesso un aumento del 10% SELECT fname, lname, 1.1*salary FROM Employee, Works_on, Project WHERE essn=ssn AND pno=pnumber AND pname=‘Product X’; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 122 Ges;one dei valori nulli Recuperare gli tutti gli impiegati la cui età potrebbe essere maggiore di 40 Matricola Cognome 7309 5998 Rossi Neri 5998 9553 Bruni Neri 9553 Bruni Filiale Milano Roma Milano Milano Età 32 45 NULL 45 NULL SELECT * FROM Impiegato WHERE eta > 40 OR eta IS NULL Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 123 Aggregazione e raggruppamento Le funzioni di aggregazione e di raggruppamento sono diffusissime nella ges;one di basi di da;. SQL incorpora le seguen; funzioni: COUNT: conteggio tuple SUM: somma dei valori di un aQributo in una tabella MAX: valore massimo tra gli aQribu; di una tabella MIN: valore minimo tra gli aQribu; di una tabella AVG: valore medio tra gli aQribu; di una tabella Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 124 Aggregazione e Esempio: trovare la somma dei salari di tuI gli impiega;, il massimo, il minimo e la media dei salari: SELECT SUM(salary), MAX(salary), MIN(salary), AVG(salary) FROM Employee; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 125 Count (1) Res;tuisce il numero di tuple nel risultato della query (*) Esempio: conta il numero di impiega; SELECT COUNT(*) FROM Employee; Esempio: conta il numero di impiega; del dipar;mento “Research” SELECT COUNT(*) FROM Employee, Department WHERE dno=dnumber AND dname=‘Research’; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 126 Count (2) Conta il numero di valori di s;pendi dis;n; SELECT COUNT(DISTINCT salary) FROM Employee; Elencare il nome ed il cognome degli impiega; che hanno due o più persone a carico SELECT lname, fname FROM Employee WHERE (SELECT COUNT(*) FROM Dependent WHERE ssn=essn)>=2; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 127 Ordinamento di tuple (1) Per ordinare le tuple nel risultato della query si usa la clausola ORDER BY Esempio: Ritrovare una lista di impiega; e dei progeI su cui lavorano, ordina; per dipar;mento, e nell’ambito di ciascun dipar;mento, alfabe;camente per cognome e nome SELECT dname, fname, lname, pname FROM Department, Employee, Works_on, Project WHERE dnumber=dno AND ssn=essn AND pno=pnumber ORDER BY dname, lname, fname; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 128 Ordinamento di tuple (2) L’ordine di default è crescente ASC per crescente DESC decrescente Esempio: per avere un ordine decrescente di dipar;mento e crescente per nome e cognome: ORDER BY dname DESC, lname ASC, fname ASC Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 129 Group by (1) Raggruppiamo le tuple che hanno lo stesso valore per alcuni aQribu; Esempio: Recuperare, per ogni diparimento, il numero di impiega; e il salario medio SELECT dno, COUNT(*), AVG(salary) FROM Employee GROUP BY dno; Le tuple sono divise in gruppi, ogni gruppo ha lo stesso valore per DNO. Le funzioni COUNT e AVG sono applicate ad ogni gruppo di queste tuple Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 130 Group by (2) Risultato Dno COUNT(*) AVG(salary) 1 4 23000 4 3 25000 3 4 22000 Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 131 Group by (3) Per ogni progeQo, visualizzare il numero del progeQo, il nome del progeQo ed il numero di impiega; che lavorano su quel progeQo: SELECT pnumber, pname, COUNT(*) FROM Project, Works_on WHERE pnumber=pno GROUP BY pnumber, pname; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 132 Group by (4) Per ogni progeQo su cui lavorano più di due impiega;, visualizzare il numero del progeQo, il nome del progeQo ed il numero di impiega; che lavorano su quel progeQo: SELECT pnumber, pname, COUNT(*) FROM Project, Works_on WHERE pnumber=pno GROUP BY pnumber, pname; HAVING COUNT(*) > 2; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 133 Group by (5) Per ogni progeQo visualizzare il numero del progeQo, il nome del progeQo ed il numero di impiega; del dipar;mento n.5 che lavorano su quel progeQo: SELECT pnumber, pname, COUNT(*) FROM Project, Works_on, Employee WHERE pnumber=pno AND sss=essn AND dno=5 GROUP BY pnumber, pname; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 134 Group by (6) Determinare, per ogni dipar;mento che ha più di 6 impiega;, il numero totale degli impiega; il cui s;pendio è maggiore di $40.000 SELECT dname, COUNT(*) FROM Department, Employee WHERE dnumber=dno AND salary>40000 GROUP BY dname HAVING COUNT(*)>6; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 135 Aggiornamen; in SQL In SQL sono previs; tre comandi per modificare il database: INSERT DELETE UPDATE Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 136 Il comando Insert Il comando INSERT INTO inserisce nuove righe in una relazione Sintassi: INSERT INTO Target [(FieldName,…)] VALUES (Value1,…); Oppure: INSERT INTO Target [(FieldName,…)] SELECT FieldNames FROM TableExpression WHERE Conditions; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 137 Insert: Esempio (1) Aggiungere una nuova tupla alla relazione ‘Employee’: INSERT INTO Employee VALUES (‘Richard’, ‘K’, ‘Marini’, ‘654765876’, ’30-DEC-52’, ‘98 Oak Forest, Katy, TX’, ‘M’, 37000, ‘987654321’, 4); Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 138 Insert: Esempio (2) E’ possibile non assegnare valori a tuI gli aQribu; In tal caso, ques; avranno il valore di default o null Esempio: INSERT INTO Employee (fname, lname, ssn) VALUES (‘Richard’, ‘Marini’, ‘654765876’); Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 139 Insert: Esempio (3) Creare una tabella temporanea che ha nome, numero di impiega; e salari totali per ciascun dipar;mento: CREATE TABLE Depts_Info ( dept_name VARCHAR(15), no_of_emps INTEGER, total_sal INTEGER); INSERT INTO Depts_Info (dept_name, no_of_emps, total_sal) SELECT dname, COUNT(*), SUM(salary) FROM Department, Employee WHERE dnumber=dno GROUP BY dname; Eventuali aggiornamen; successivi non influenzano la tabella originale. Per aggiornarle, è invece necessario definire una vista. Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 140 Il comando DELETE Il comando DELETE rimuove una o più tuple da una relazione Sintassi: DELETE FROM TableName WHERE Criteria; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 141 DELETE: Esempi Eliminare l’impiegato il cui cognome è “Brown” DELETE FROM Employee WHERE lname=‘Brown’; Eliminare tuI gli impiega; che afferiscono al dipar;mento “Research” DELETE FROM Employee WHERE dno IN (SELECT dnumber FROM Department WHERE dname=‘Research’); Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 142 Il comando UPDATE Il comando UPDATE consente di modificare uno o più aIbu; di una o più tuple di una relazione Sintassi: UPDATE TableName SET Attribute1 = NewValue1,... WHERE Criteria; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 143 UPDATE: Esempio (1) Modificare il luogo e il dipar;meto che ges;sce il progeQo 5: UPDATE Project SET plocation=‘Bellaire’, dnum=5 WHERE pnumber=10; Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 144 UPDATE: Esempio (2) Incrementare del 10% il salario di tuI gli impiega; che lavorano sul dipar;mento “Research”: UPDATE Employee SET salary=salary * 1.1 WHERE dno IN (SELECT dnumber FROM Department WHERE dname=‘Research’); Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 145 Domande e/o commen;? Corso di Bioinformatica - Basi di dati biologiche lunedì 19 marzo 12 R. Oliveto 146