Trabalho 1 Bd2
Diese Aufgabe besteht darin, Metadaten- und Datendateien zu lesen, um ein „SELECT * FROM table“ zu simulieren. Dazu werden drei Dateien bereitgestellt: eine mit den Metadaten der Tabelle (table.dic), eine mit den Metadaten der Attribute (att.dic) und eine weitere mit den Daten einer der in table.dic enthaltenen Tabellen (11.dat).
T1 – Einlesen von Datendateien
Bei dieser Aufgabe geht es darum, Metadaten und Datendateien einzulesen, um eine SELECT * FROM table-Operation zu simulieren. Zu diesem Zweck werden drei Dateien bereitgestellt: eine mit Tabellenmetadaten (table.dic), eine mit Attributmetadaten (att.dic) und eine dritte mit den eigentlichen Daten für eine der in table.dic aufgeführten Tabellen (z. B. 11.dat).
+-----------+ idtable +---------+
| table.dic |---------------<| att.dic |
+-----------+ +---------+
Implementieren Sie eine C-Anwendung, die Folgendes ausführt:
- Bei der Ausführung muss das Programm einen Parameter (eine Zeichenkette) erhalten, der dem logischen Namen (Tabelle) innerhalb der Datenbank entspricht. Wenn das Programm beispielsweise
selectheißt, lautet der Befehlszeileneintrag (unter Linux)./select table. Das Ergebnis sollte einer SQL-Abfrage vom TypSELECT * FROM tableentsprechen. - Die Anwendung durchsucht
table.dicnach dem als Parameter übergebenen Tabellennamen; wird dieser gefunden, muss sie die Datei, die dem physischen Namen entspricht, zum Lesen öffnen. Die Struktur vontable.dicist wie folgt:
struct ttable {
int idtable; // ID der Tabelle
char ctname[20]; // konzeptioneller Name der Tabelle
char ptname[20]; // physischer Name der Tabelle
}
- Wird der logische Name in
table.dicgefunden, muss die Dateiatt.dicgeöffnet werden, um das Dateischema abzurufen. Diese ist wie folgt aufgebaut:
struct tatt {
int idtable; // ID der Tabelle
char atname[20]; // Name des Attributs
char attype; // S (Zeichenkette) I (Ganzzahl) F (Gleitkomma) (C-Zeichen)
char isKey; // 1 bedeutet Primärschlüssel
char atopt; // obligatorisch (0) optional (1)
int atlen; // Länge
}
Reichen Sie eine ZIP-Datei ein, die den erstellten Quellcode enthält (die Verwendung separater .h- und .c-Dateien wird empfohlen), oder einfach nur die Quelldatei, falls alles in einer einzigen Datei enthalten ist. Der Name der ZIP-Datei oder der Quelldatei muss Ihre Matrikelnummer sein. Beispiel:
Stellen Sie sich eine Instanz von table.dic mit
<1, "car", "xyz.dat">, <2, "owner", "d001.dat"> und
eine Instanz von att.dic mit
<1, „model“, 'S', 1, 0, 30>, <1, „year“, 'I', 0, 0, 4>,
<2, „issn“, 'S', 1, 0, 12>, <2, „name“, 'S', 0, 0, 30>
Wenn der Anwendungsname „selectDB“ lautet, würde die Ausführung unter Linux wie folgt lauten: ./selectDB owner (wobei „owner“ dem Tabellennamen – dem logischen Namen – entspricht).
Die Datei d001.dat enthält Daten, die dem Schema entsprechen, das der Tabellen-ID 2 („owner“) in der Datei att.dic zugeordnet ist: konkret „issn“ (eine 12-stellige Zeichenkette, obligatorisch und ein Schlüssel) und „name“ (eine 30-stellige Zeichenkette, obligatorisch, kein Schlüssel).
Abschließend muss der Inhalt der physischen Datei (d001.dat) aufgelistet werden. Zur Vereinfachung müssen Sie optionale Attribute nicht berücksichtigen, da alle als obligatorisch angesehen werden. Vorgeschlagene Ausgabe:
issn name
002322 John Wayne
230011 Anthony Hopkins
450001 Greta Garbo
Für die vorgeschlagene Aufgabe enthalten die Dateien „table.dic“ und „att.dic“ Metadaten für die Tabellen „student“, „course“ und „enrollment“. Es wurde nur die physische Datei für „student“ bereitgestellt. Führen Sie Ihre Tests anhand dieser Tabelle durch. Bei der Benotung werden wir zusätzlich zu „student“ auch die Tabellen „course“ und „enrollment“ heranziehen.
