Trabalho 1 Bd2
Zadanie to polega na odczytaniu plików metadanych i danych w celu symulacji zapytania `select * from table`. W tym celu udostępnione zostaną trzy pliki: jeden zawierający metadane tabeli (table.dic), drugi – metadane atrybutów (att.dic), a trzeci – dane z jednej z tabel wymienionych w pliku table.dic (11.dat).
T1 – Odczyt plików danych
Zadanie to polega na odczytaniu metadanych i plików danych w celu symulacji operacji SELECT * FROM table. W tym celu udostępnione zostaną trzy pliki: jeden zawierający metadane tabeli (table.dic), drugi zawierający metadane atrybutów (att.dic) oraz trzeci zawierający rzeczywiste dane dla jednej z tabel wymienionych w pliku table.dic (np. 11.dat).
+-----------+ idtable +---------+
| table.dic |---------------<| att.dic |
+-----------+ +---------+
Zaimplementuj aplikację w języku C, która wykonuje następujące czynności:
- Po uruchomieniu program musi otrzymać parametr (ciąg znaków) odpowiadający logicznej nazwie (tabeli) w bazie danych. Na przykład, jeśli program nosi nazwę
select, polecenie w wierszu poleceń (w systemie Linux) brzmiałoby./select table. Wynik powinien być równoważny zapytaniu SQLSELECT * FROM table. - Aplikacja przeszuka plik
table.dicw poszukiwaniu nazwy tabeli przekazanej jako parametr; jeśli ją znajdzie, musi otworzyć plik odpowiadający nazwie fizycznej w trybie odczytu. Struktura plikutable.dicjest następująca:
struct ttable {
int idtable; // identyfikator tabeli
char ctname[20]; // koncepcyjna nazwa tabeli
char ptname[20]; // fizyczna nazwa tabeli
}
- Jeśli nazwa logiczna zostanie znaleziona w pliku
table.dic, należy otworzyć plikatt.dicw celu pobrania schematu pliku. Jego struktura jest następująca:
struct tatt {
int idtable; // identyfikator tabeli
char atname[20]; // nazwa atrybutu
char attype; // S (ciąg znaków) I (liczba całkowita) F (liczba zmiennoprzecinkowa) (C Char)
char isKey; // 1 oznacza klucz główny
char atopt; // obowiązkowe (0) opcjonalne (1)
int atlen; // długość
}
Prześlij plik ZIP zawierający utworzony kod źródłowy (zaleca się użycie oddzielnych plików .h i .c), lub po prostu plik źródłowy, jeśli wszystko znajduje się w jednym pliku. Nazwa pliku ZIP lub pliku źródłowego musi być zgodna z Twoim numerem identyfikacyjnym studenta. Przykład:
Wyobraź sobie instancję pliku table.dic zawierającą
<1, "car", "xyz.dat">, <2, "owner", "d001.dat"> oraz
instancję pliku att.dic zawierającą
<1, „model”, 'S', 1, 0, 30>, <1, „year”, 'I', 0, 0, 4>,
<2, „issn”, 'S', 1, 0, 12>, <2, „name”, 'S', 0, 0, 30>
Jeśli nazwa aplikacji to selectDB, w systemie Linux polecenie uruchamiające brzmiałoby ./selectDB owner (gdzie „owner” odpowiada nazwie tabeli — nazwie logicznej).
Plik d001.dat będzie zawierał dane zgodne ze schematem odpowiadającym tabeli o identyfikatorze 2 („owner”) w pliku att.dic: a konkretnie „issn” (ciąg znaków o długości 12 znaków, obowiązkowy i będący kluczem) oraz „name” (ciąg znaków o długości 30 znaków, obowiązkowy, niebędący kluczem).
Na koniec należy wyświetlić zawartość pliku fizycznego (d001.dat). Aby uprościć sprawę, nie trzeba uwzględniać atrybutów opcjonalnych, ponieważ wszystkie będą traktowane jako obowiązkowe. Sugerowany wynik:
issn name
002322 John Wayne
230011 Anthony Hopkins
450001 Greta Garbo
W ramach proponowanego zadania pliki table.dic i att.dic przechowują metadane dla tabel „student”, „course” i „enrollment”. Dostarczono jedynie plik fizyczny dla tabeli „student”. Przeprowadź testy, korzystając z tej tabeli. Podczas oceniania będziemy korzystać z tabel „course” i „enrollment” oprócz tabeli „student”.
