a Database “3 puntata” Pablo Genova [email protected] I. I. S. “Angelo Omodeo” Indirizzo Tecnico-Economico Mortara A. S. 2016 – 2017 Cosa vedremo in questo (ultimo) modulo sui database? Tenendo presente quanto visto l'anno scorso, quest'anno approfondiamo i seguenti aspetti, che l'anno scorso abbiamo trascurato: Ripasso ed approfondimento query sql (vedi esercizi sqlzoo) Ripasso ed approfondimento di concetti importanti in sql ed access Operazioni relazionali, definizione ed esempi concreti di Unione di relazioni Intersezione di due relazioni Differenza di relazioni Giunzione naturale tra due relazioni Proiezione di relazioni Restrizione di relazioni Prodotto di relazioni in sql e in access Pagine 156 – 165 del libro + Brain & Computer ;-) Per ripassare le query esercitati nello ZOO ;-) http://sqlzoo.net Sito web divertente che permette di esercitarsi nella creazione di query e verifica del loro funzionamento (senza aver installato un server sql) In particolare provare con attenzione le sezioni http://sqlzoo.net/wiki/SELECT_basics SELECT BASICS http://sqlzoo.net/wiki/SELECT_names SELECT NAMES http://sqlzoo.net/wiki/SELECT_from_WORLD_Tutorial Tutorial DB WORLD http://sqlzoo.net/wiki/SELECT_Reference HOW TO SELECT http://sqlzoo.net/wiki/CREATE_a_new_table HOW TO CREATE a table http://sqlzoo.net/wiki/DROP_a_table HOW TO DROP a table http://sqlzoo.net/wiki/INSERT_new_records HOW TO INSERT values http://sqlzoo.net/wiki/UPDATE_existing_records HOW TO UPDATE values http://sqlzoo.net/wiki/DELETE_records HOW TO DELETE values → Nella verifica bisognerà sapere il comando sql per ... ✔Selezionare dei dati da una tabella, con eventuali restrizioni ✔Creare una tabella RICORDA! ✔Cancellare una tabella (comando DROP) La riga (le righe) di un database si chiama RECORD(S), ✔Inserire dati (records) ad una tabella la colonna (le colonne) colonne ✔Aggiornare i dati (records) di una tabella CAMPO (I) (FIELD(S)) ntupla =tupla = record ✔Cancellare dati (records) di una tabella ✔Saper usare LIKE e i simboli speciali % * _ per le scelte rapide Assegnato un database, nella verifica vi chiederò la spiegazione di un comando sql o viceversa di scrivere il comando che fa una determinata operazione Esempio dato il database world cosa fanno le seguenti queries: SELECT name FROM world WHERE population > 200000000 SELECT capital FROM world WHERE name LIKE 'M%' → Scrivere il comando SQL per richiedere il nome e la popolazione degli stati con area > 100000 → Ripassare CREATE TABLE, INSERT, DELETE UPDATE DISCIPLINA (CodDisciplina, NomeDisciplina) Do you remember? CREATE TABLE DISCIPLINA ( CodDisciplina CHAR(6) NOT NULL , /*definisco una stringa di caratteri lunga 6 */ NomeDisciplina CHAR(30) NOT NULL , /*definisco una stringa di caratteri lunga 30 */ PRIMARY KEY(CodDisciplina) /* CodDisciplina è la chiave primaria */ ); INSERT INTO DISCIPLINA VALUES (“INFO01”, “Informatica”); /* CodDisciplina 6 CARATTERI */ UPDATE DISCIPLINA SET NomeDisciplina = “Informatica Aziendale” /* nuovo nome alla disciplina */ WHERE CodDisciplina = “INFO01”; /* che ha per codice INFO01 */ DELETE FROM DISCIPLINA WHERE CodDisciplina = “INFO01”; /* la materia INFO01 è stata soppressa */ DROP TABLE DISCIPLINA; /* l'intera tabella disciplina è stata soppressa */ Festa grande tra gli studenti ;-)! VEDI PUNTATE PRECEDENTI SLIDES ANNO SCORSO E LIBRO 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 In access sono i records le righe della tabella 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 2) in forma tabellare 3) in forma insiemistica → utile nel caricamento dati/codice sql → utile nella visualizzazione dei dati → collegamento con la matematica Prendiamo la relazione Automobile ecco le tre possibili rappresentazioni di una istanza della relazione AUTOMOBILE(Targa, Marca, Modello) AUTOMOBILE(Targa, Marca, Modello) = { (AA000ZZ, Fiat, Grande Punto), (CC200LN,Volkswagen, Passat), (RR100AA,Renault,Megane) (KK200II,Lada, Kalina) } elencazione insiemistica AUTOMOBILE TARGA MARCA MODELLO AA00ZZ Fiat Grande Punto CC200LN Volkswagen Passat RR200AA Renault Megane KK200II Lada Kalina AUTOMOBILE 1)(AA000ZZ, Fiat, Grande Punto), 2)(CC200LN,Volkswagen, Passat), 3)(RR100AA,Renault,Megane) 4)(KK200II,Lada, Kalina) tabellare righe → records colonne → campi Algebra relazionale L'algebra relazionale, concetto formulato dall'informatico E. F. Codd, è il fondamento teorico di ogni query SQL (o in un qualunque linguaggio/sistema di gestione di un database). In parole semplici: una query si può sempre ricondurre ad una precisa operazione tra insiemi e quindi si può ricondurre alla ben nota teoria degli insiemi (parte importante della matematica). Il termine “algebra” è legato al tipo di operazioni tra insiemi che si potranno “sommare” “sottrarre” “moltiplicare” in modo “simile”, ma non identico, ai numeri ordinari Ecco i principali (non gli unici!!) tipi di operazioni relazionali fondamentali operazioni binarie derivate Vedi pagina 156 LIBRO binarie ∩ unarie selezione proiezione unione differenza ▬ prodotto cartesiano x ∩ intersezione join o giunzione Unione di due relazioni compatibili Due relazioni qualsiasi R e S si dicono compatibili se: 1) hanno lo stesso numero di attributi 2) ogni attributo ha la stessa posizione all'interno delle due relazioni 3) ogni attributo è dello stesso tipo Date due relazioni R e S tra di loro compatibili l'unione è la relazione fondamentale binaria (t sta per tupla) così definita: ∩ R S= {t|t|∈R OR t ∈S } Corrisponde all'unione insiemistica dei due insiemi R e S La tabella unione come sarà fatta? → avrà le stesse colonne delle due tabelle R e S, ma avrà sia le righe della tabella R sia le righe della tabella S (senza ripetizioni) Nella verifica vi posso dare due tabelle e chiedere di fare la loro unione Prova a costruire l'unione tra due relazioni VEDI pagina 157 del libro Differenza di due relazioni compatibili Date due relazioni R e S tra di loro compatibili la differenza è la relazione fondamentale binaria (t sta per tupla) così definita: R ▬ S= {t|t|∈R AND t ∉S } Corrisponde alla differenza insiemistica dei due insiemi R e S Si noti che R▬ S ≠S ▬ R come nella differenza tra numeri non vale la proprietà commutativa (essa vale invece per l'unione, come per la somma tra numeri) La tabella differenza R ▬ S come sarà fatta? → avrà le stesse colonne delle due tabelle R e S, ma avrà le righe della tabella R tolte le righe di R eventualmente presenti anche in tabella S Nella verifica vi posso dare due tabelle e chiedere di fare la loro differenza Prova a costruire la differenza tra due relazioni VEDI pagina 158 del libro Intersezione di due relazioni compatibili Date due relazioni R e S tra di loro compatibili l'intersezione è la relazione derivata binaria (t sta per tupla) così definita: R ∩ S= {t | t ∈R AND t ∈S } Corrisponde all'intersezione insiemistica dei due insiemi R e S come per l'unione vale la proprietà commutativa → R ∩ S = S∩ R La tabella intersezione come sarà fatta? → avrà le stesse colonne delle due tabelle R e S, ma avrà le righe costituite da tutte e sole le tuple presenti sia in R sia in S (se ci sono) Nella verifica vi posso dare due tabelle e chiedere di fare la loro intersezione Prova a costruire l'intersezione tra due relazioni VEDI pagina 161 del libro Proiezione di una relazione Attenzione: questa operazione è di tipo UNARIO ovvero agisce solo su una relazione Date una relazione R e un sottoinsieme A = {A1,...,A2,...,An} dei suoi attributi la proiezione è la relazione fondamentale unaria (t sta per tupla) così definita: (R )= {t [ A , A , ... A ] t∈R } A 1 2 n La notazione sopra indicata significa che dalla relazione iniziale R si estraggono soltanto le colonne contenute nel sottoinsieme A, ovvero si sta proiettando la relazione R su A. La tabella proiezione come sarà fatta? → avrà le stesse righe della tabella R, ma un numero di colonne ridotto, limitato soltanto al sottoinsieme A scelto. Il grado (= numero di colonne) della relazione proiettata sarà minore al grado della relazione iniziale. Nella verifica vi posso dare una tabella e un insieme e chiedere di fare la proiezione prova a costruire una proiezione VEDI pagina 159 del libro Selezione o restrizione di una relazione Attenzione: questa operazione è di tipo UNARIO ovvero agisce solo su una relazione Date una relazione R e un predicato P la selezione o restrizione è la relazione fondamentale unaria (t sta per tupla) così definita: (R)={t | t∈R P (t )= } AND VERO P La notazione sopra indicata significa che dalla relazione iniziale R si estraggono soltanto le righe e le colonne che soddisfano la condizione P(t) La tabella selezione come sarà fatta? → sarà una tabella ridotta alle sole tuple (= righe) che soddisfano P(t), la condizione logica [predicato = condizione logica vera o falsa] La si può trovare indicata anche con il simbolo Nella verifica vi posso dare una tabella e un predicato e chiedere di fare la restrizione (= selezione) prova a costruire una restrizione VEDI pagina 159 del libro A cosa corrispondono e in SQL? Cosa sto facendo in questa query: SELECT Matricola, CodDisciplina /*nota l'uso della virgola per separare */ FROM INSEGNA /* perché voglio sia la Matricola che il CodDisciplina */ Sto proiettando la tabella INSEGNA sugli attributi Matricola, CodDisciplina E' un'operazione relazionale di tipo con (R ) A { R = INSEGNA A = { Matricola, CodDisciplina} LE QUERY SONO OPERAZIONI RELAZIONALI!! E in quest'altra query: SELECT * /* seleziono TUTTI GLI ATTRIBUTI */ FROM INSEGNA WHERE (NumOre=12); /* ma questo è il predicato!!! restrizione!! */ Sto restringendo la tabella INSEGNA alla condizone P(t) = “NumOre=12” E' un'operazione relazionale di tipo (R) NumOre=12 (o con R = INSEGNA secondo un'altra notazione) LE QUERY SONO OPERAZIONI RELAZIONALI!! x relazione Prodotto cartesiano di due relazioni Date due relazioni R e S il prodotto cartesiano è la fondamentale binaria (t sta per tupla) così definita: R x S={t | t =(r , s), r ∈R AND s∈S } La notazione sopra indicata significa che le nuove tuple sono le coppie ordinate (r,s) ottenute a partire dalle tuple originarie r ed s, come per il prodotto cartesiano tra due insiemi. La tabella prodotto cartesiano come sarà fatta? → sarà una “tabellona”, una tabella che avrà un numero di colonne pari alla somma del numero delle colonne delle tabelle di partenza e un numero di righe pari al prodotto del numero delle righe delle tabelle originarie, contenenti tutte le combinazioni possibili (senza ripetizioni). ATTENZIONE: il prodotto cartesiano si può fare anche tra relazioni non compatibili, ma per evitare ambiguità i nomi degli attributi delle due relazioni devono essere diversi, occorre ridenominare i nomi uguali!! Nella verifica vi posso dare una tabella e un predicato e chiedere di fare il prodotto cartesiano prova a costruire una prodotto cartesiano VEDI pagina 160 del libro Giunzione naturale di due relazioni Quando si vuole collegare le informazioni di due tabelle anche molto diverse, spesso si procede all'operazione di giunzione ovvero join (sinonimo inglese merge). Attenzione: ci sono vari tipi di join, utili a seconda del caso. Il natural join è così: Date due relazioni R e S e un attributo A di R e un attributo B di S, aventi lo stesso tipo, la giunzione naturale è la relazione derivata binaria (t sta per tupla) ottenuta così: 1) Si effettua il prodotto cartesiano tra R e S 2) Sulla relazione ottenuta si effettua una restrizione sulle tuple tali che A = B il valore di A (in R) deve essere uguale al valore di B (in S) 3) Si elimina la colonna comune ripetuta In parole semplici stiamo unendo le due tabelle, creando una nuova tabella composta dalle tuple che hanno un attributo che ha lo stesso valore in entrambe le tabelle. Unisco in base ad un attributo comune che è lo stesso in entrambe le tabelle R S VEDI pagina 163 del libro Esempio: siano date la relazioni IMPIEGATO e DIPARTIMENTO IMPIEGATO(CodiceImpiegato, Nome, NomeDipartimento) DIPARTIMENTO(NomeDipartimento,NomeDiretttore) Com'è IMPIEGATO DIPARTIMENTO su NomeDipartimento? È la nuova relazione GN(CodiceImpiegato, Nome, NomeDipartimento, NomeDirettore) Questa relazione permette di vedere in'unica tabella il codice, il nome degli impiegati, il nome del dipartimento E il nome del direttore del dipartimento. Attenzione: non di un direttore qualunque, ma proprio del direttore di quel dipartimento a cui l'impiegato appartiene! (punto numero 2 del procedimento del natural join) Che cosa ci ricorda questo meccanismo? → la chiave esterna!!! Per approfondire... tanti modi per fare join ;-) In SQL ci sono vari modi di fare il join, usando i comandi <tabella1> INNER JOIN <tabella2> ON <condizione> <tabella1> LEFT JOIN <tabella2> ON <condizione> <tabella1> RIGHT JOIN <tabella2> ON <condizione> Ci sono anche TANTE altre possibilità e sottigliezze che non affrontiamo pagine 186 - 187 libro Il più usato in SQL è il comando INNER JOIN ≈ NATURAL JOIN Conclusioni (fragili e provvisorie) Quando interrogo un database con SQL o altri programmi, sto facendo un insieme di operazioni relazionali Abbiamo descritto le principali operazioni relazionali di uso comune nei database Abbiamo rivisto le operazioni fatte l'anno scorso, da un altro punto di vista E' il modo tipico di procedere della scienza, il metodo scientifico Teoria1 → Pratica → Teoria1 → Pratica Teoria2 → Pratica → Teoria2 → Pratica Pratica → Teoria3 → Pratica → Teoria3 Pratica → Teoria4 → Pratica → Teoria4 … … … … … … … … … … ... VOLTE Non fermarti... BUON PROSEGUIMENTO ! GOOD LUCK ! MAI by Pablo ;-)