Trabalho 1 Bd2
C

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).

GitHub|

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 SQL SELECT * FROM table.
  • Aplikacja przeszuka plik table.dic w poszukiwaniu nazwy tabeli przekazanej jako parametr; jeśli ją znajdzie, musi otworzyć plik odpowiadający nazwie fizycznej w trybie odczytu. Struktura pliku table.dic jest 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ć plik att.dic w 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”.