La terza esercitazione richiede la traduzione di un semplice modello concettuale ad oggetti nel modello relazionale, la definizione in SQL della base di dati, il suo popolamento ed infine la formulazione di alcune query. L'esercitazione nel suo complesso può richiedere più tempo di quello a disposizione. Si presuppone la conoscenza della parte teorica discussa a lezione. Dubbi su MySQL possono essere risolti riferendosi alla MySQL Reference Guide. Nel caso questo non fosse sufficiente, sarò in laboratorio e possiamo discutere insieme di eventuali quesiti. Realizzazione di una base di datiSi vuole creare una base che memorizzi informazioni relative ad un file system. Lo schema concettuale a oggetti della base di dati è una semplificazione di quello già analizzato a lezione.![]()
1. Progetto relazionaleTradurre lo schema concettuale in uno schema relazionale. Per rappresentare la gerarchia usare partizionamento verticale.2. Realizzazione dello schema in SQLSi realizzi lo schema in SQL, tenendo conto, nella definizione delle chiavi esterne, delle assunzioni elencate dopo lo schema concettuale.Nota: Durante la creazione e la popolazione della base di dati vi può essere utile (ad es. nel caso di riferimenti ciclici) inibire il controllo sulle chiavi esterne rispettivamente con SET FOREIGN_KEY_CHECKS=0; e SET FOREIGN_KEY_CHECKS=1; 3. Popolazione della Base di DatiSi popoli la base di dati di modo che ricalchi la situazione descritta dalla seguente tabella.Id Nome Utente GruppoAlcune osservazioni
Gruppo DataGli utenti presenti, con i relativi gruppi di appartenenza sono Login Nome Gruppi Ricordate che potete caricare le tabelle con il comando INSERT INTO tabella VALUES ....oppure LOAD DATA LOCAL INFILE 'file.txt' INTO TABLE tabelladove 'file.txt' è un file preventivamente creato che contiene le ennuple da inserire in 'tabella', campi separati da TAB, per default, ma si possono specificare anche altri separatori. Vi potrebbero essere utili i seguenti file (nei quali i campi sono separati da TAB ...) Directory.txt GruppiUtenti.txt Utenti.txt File.txt Gruppi.txt (Nota: Per poter usare il comando 'LOAD DATA ...' occorre aver avviato il client con il flag '--local-infile=1') 4. Effettuare interrogazioniFornire le interrogazioni SQL per rispondere alle seguenti domande. Ogni query è accompagnata dal risultato che si otterrebbe rispetto alla popolazione indicata sopra.
12. Definire una trigger che assicuri la validità del seguente vincolo semantico: non ci possono essere più di 256 utenti. Possibile intestazione dell trigger CREATE TRIGGER MaxUsers BEFORE INSERT ON Utenti FOR EACH ROW. 13. Definire una funzione che dato un Id di file, restituisce il corrispondente pathname (es. per 121, che corrisponde a 'tmp0.txt' dovrebbe restituire '/Radice/tmp/tmp0.txt'). Possibile intestazione della funzione CREATE FUNCTION givePath (FId INT) RETURNS CHAR(255).
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Nota: Per scrivere ed eseguire le istruzioni SQL relative alle interrogazioni si può, al solito, creare un file query_n.sql per ciascuna query ed eseguirlo
Dal client MySQL può essere anche utile utilizzare il comando \eche permette di editare la query corrente (o quella appena eseguita) in un editor a vostra scelta, cosi` come impostato nella variabile d'ambiente EDITOR. Qualora questa non fosse impostata, potete definirla inserendo nel file .bash_profile nella vostra home le righe EDITOR=emacsSe il file non esistesse potete crearlo con il contenuto sopra indicato. |
Directory.txt
GruppiUtenti.txt
Utenti.txt
File.txt
Gruppi.txt