Trabalho 1 Bd2
Ця діяльність полягає у читанні файлів метаданих та даних для симуляції select * from table. Для цього будуть надані три файли: один, що містить метадані таблиці (table.dic), інший – метадані атрибутів (att.dic), і ще один з даними однієї з таблиць, що присутні у table.dic (11.dat).
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; // id таблиці
char ctname[20]; // концептуальна назва таблиці
char ptname[20]; // фізична назва таблиці
}
- Якщо логічна назва знайдена в
table.dic, файлatt.dicповинен бути відкритий для отримання схеми файлу. Він організований наступним чином:
struct tatt {
int idtable; // id таблиці
char atname[20]; // назва атрибута
char attype; // S (рядок) I (ціле число) F (число з плаваючою комою) (C Символ)
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 John Wayne
230011 Anthony Hopkins
450001 Greta Garbo
Для запропонованого завдання table.dic та att.dic зберігають метадані для таблиць "student", "course" та "enrollment". Надано лише фізичний файл для "student". Виконуйте свої тести, використовуючи цю таблицю. Під час оцінювання ми будемо використовувати таблиці "course" та "enrollment" на додаток до "student".
