Trabalho 1 Bd2
Questa attività consiste nel leggere file di metadati e dati per simulare un select * from table. A tal fine, verranno forniti tre file: uno contenente i metadati della tabella (table.dic), un altro contenente i metadati degli attributi (att.dic) e un altro ancora con i dati di una delle tabelle presenti nel file table.dic (11.dat).
T1 - Lettura dei file di dati
Questa attività prevede la lettura dei metadati e dei file di dati per simulare un'operazione SELECT * FROM table. A tal fine verranno forniti tre file: uno contenente i metadati della tabella (table.dic), un altro contenente i metadati degli attributi (att.dic) e un terzo contenente i dati effettivi relativi a una delle tabelle elencate in table.dic (ad esempio, 11.dat).
+-----------+ idtable +---------+
| table.dic |---------------<| att.dic |
+-----------+ +---------+
Implementare un'applicazione in C che esegua quanto segue:
- Al momento dell’esecuzione, il programma deve ricevere un parametro (una stringa) corrispondente al nome logico (tabella) all’interno del database. Ad esempio, se il programma si chiama
select, il comando da riga di comando (su Linux) sarebbe./select table. Il risultato dovrebbe essere equivalente a una query SQLSELECT * FROM table. - L'applicazione cercherà in
table.dicil nome della tabella passato come parametro; se lo trova, deve aprire in lettura il file corrispondente al nome fisico. La struttura ditable.dicè la seguente:
struct ttable {
int idtable; // ID della tabella
char ctname[20]; // nome concettuale della tabella
char ptname[20]; // nome fisico della tabella
}
- Se il nome logico viene trovato nel file
table.dic, è necessario aprire il fileatt.dicper recuperare lo schema del file. Esso è organizzato come segue:
struct tatt {
int idtable; // ID della tabella
char atname[20]; // nome dell'attributo
char attype; // S (stringa) I (intero) F (float) (C Char)
char isKey; // 1 indica una chiave primaria
char atopt; // obbligatorio (0) facoltativo (1)
int atlen; // lunghezza
}
Invia un file ZIP contenente il codice sorgente creato (si consiglia di utilizzare file .h e .c separati), oppure solo il file sorgente se tutto è contenuto in un unico file. Il nome del file ZIP o del file sorgente deve corrispondere al tuo numero di matricola. Esempio:
Immagina un'istanza di table.dic con
<1, "car", "xyz.dat">, <2, "owner", "d001.dat"> e
un'istanza di att.dic con
<1, "model", 'S', 1, 0, 30>, <1, "year", 'I', 0, 0, 4>,
<2, "issn", 'S', 1, 0, 12>, <2, "name", 'S', 0, 0, 30>
Se il nome dell’applicazione è selectDB, l’esecuzione su Linux sarebbe ./selectDB owner (dove "owner" corrisponde al nome della tabella, ovvero al nome logico).
Il file d001.dat conterrà dati che seguono lo schema corrispondente all’ID della tabella 2 ("owner") nel file att.dic: in particolare, "issn" (una stringa di 12 caratteri, obbligatoria e chiave) e "name" (una stringa di 30 caratteri, obbligatoria, non chiave).
Infine, occorre elencare il contenuto del file fisico (d001.dat). Per semplificare, non è necessario occuparsi degli attributi opzionali, poiché saranno tutti considerati obbligatori. Risultato suggerito:
issn name
002322 John Wayne
230011 Anthony Hopkins
450001 Greta Garbo
Per l’esercizio proposto, i file table.dic e att.dic contengono i metadati delle tabelle "student", "course" e "enrollment". È stato fornito solo il file fisico relativo a «student». Eseguite i vostri test utilizzando questa tabella. Durante la valutazione, utilizzeremo le tabelle «course» e «enrollment» oltre a «student».
