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 يقوم بما يلي:

  • عند التنفيذ، يجب أن يتلقى البرنامج معلمة (سلسلة) تتوافق مع الاسم المنطقي (table) داخل قاعدة البيانات. على سبيل المثال، إذا كان اسم البرنامج 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 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, "year", 'I',0, 0, 4>, <1, "model", 'S', 1, 0, 30>, <1, "
<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 على بيانات تتبع المخطط المطابق لمعرف الجدول 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».