Trabalho 1 Bd2
C

Trabalho 1 Bd2

Данное задание заключается в чтении файлов метаданных и данных для имитации запроса `select * from table`. Для этого будут предоставлены три файла: один с метаданными таблицы (table.dic), второй — с метаданными атрибутов (att.dic) и третий — с данными одной из таблиц, указанных в файле table.dic (11.dat).

GitHub|

T1 — Чтение файлов данных

Данное задание предполагает чтение метаданных и файлов данных для моделирования операции SELECT * FROM table. Для этой цели будут предоставлены три файла: один, содержащий метаданные таблицы (table.dic), другой — метаданные атрибутов (att.dic), и третий — фактические данные для одной из таблиц, перечисленных в table.dic (например, 11.dat).
+-----------+ idtable +---------+
| table.dic |---------------<| att.dic |
+-----------+ +---------+

Реализуйте приложение на языке C, выполняющее следующее:

  • При запуске программа должна получать параметр (строку), соответствующий логическому имени (таблице) в базе данных. Например, если программа называется select, то в командной строке (в Linux) будет вводиться ./select table. Результат должен быть эквивалентен SQL-запросу SELECT * FROM table.
  • Приложение будет искать в файле table.dic имя таблицы, переданное в качестве параметра; в случае нахождения оно должно открыть файл, соответствующий физическому имени, для чтения. Структура файла table.dic следующая:

struct ttable {
int idtable; // идентификатор таблицы
char ctname[20]; // концептуальное имя таблицы
char ptname[20]; // физическое имя таблицы
}

  • Если логическое имя найдено в файле table.dic, необходимо открыть файл att.dic для извлечения схемы файла. Он организован следующим образом:

struct tatt {
int idtable; // идентификатор таблицы
char atname[20]; // имя атрибута
char attype; // S (строка) I (целое число) F (плавающее число) (C Char)
char isKey; // 1 — первичный ключ
char atopt; // обязательный (0) необязательный (1)
int atlen; // длина
}

Отправьте ZIP-файл, содержащий созданный исходный код (рекомендуется использовать отдельные файлы .h и .c), или просто исходный файл, если всё содержится в одном файле. Имя ZIP-файла или исходного файла должно соответствовать вашему студенческому идентификационному номеру. Пример:
Представьте себе экземпляр файла table.dic со следующим содержанием:
<1, "car", "xyz.dat">, <2, "owner", "d001.dat"> и
экземпляр файла att.dic со следующим содержанием:
<1, "model", 'S', 1, 0, 30>, <1, "year", 'I', 0, 0, 4>,
<2, "issn", 'S', 1, 0, 12>, <2, "name", 'S', 0, 0, 30>

Если имя приложения — selectDB, то в Linux команда запуска будет выглядеть так: ./selectDB owner (где «owner» соответствует имени таблицы — логическому имени).

Файл d001.dat будет содержать данные, соответствующие схеме таблицы с ID 2 («owner») в файле att.dic: а именно, «issn» (строка длиной 12 символов, обязательная и являющаяся ключом) и «name» (строка длиной 30 символов, обязательная, не являющаяся ключом).

Наконец, необходимо перечислить содержимое физического файла (d001.dat). Для упрощения задачи вам не нужно обрабатывать необязательные атрибуты, так как все они будут считаться обязательными. Предлагаемый вывод:
issn name

002322 Джон Уэйн
230011 Энтони Хопкинс
450001 Грета Гарбо

Для предлагаемого задания файлы table.dic и att.dic содержат метаданные для таблиц «student», «course» и «enrollment». Предоставлен только физический файл для таблицы «student». Проведите тестирование с использованием этой таблицы. При оценке мы будем использовать таблицы «course» и «enrollment» в дополнение к таблице «student».