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 है, तो कमांड लाइन एंट्री (लिनक्स पर) ./select table होगी। परिणाम SELECT * FROM table SQL क्वेरी के बराबर होना चाहिए।
  • एप्लिकेशन पैरामीटर के रूप में दिए गए टेबल नाम के लिए 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; // लंबाई
}

बनाए गए स्रोत कोड वाली एक ज़िप फ़ाइल जमा करें (अलग .h और .c फ़ाइलों का उपयोग करने की अनुशंसा की जाती है), या यदि सब कुछ एक ही फ़ाइल में शामिल है तो केवल स्रोत फ़ाइल जमा करें। ज़िप या स्रोत फ़ाइल का नाम आपका छात्र आईडी नंबर होना चाहिए। उदाहरण:
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 है, तो लिनक्स पर निष्पादन ./selectDB owner होगा (जहाँ "owner" तालिका के नाम—तार्किक नाम—के अनुरूप है)।

d001.dat फ़ाइल में att.dic फ़ाइल में तालिका आईडी 2 ("owner") के अनुरूप स्कीमा के अनुसार डेटा होगा: विशेष रूप से, "issn" (12-अक्षरों की स्ट्रिंग, अनिवार्य और एक कुंजी) और "name" (30-अक्षरों की स्ट्रिंग, अनिवार्य, कुंजी नहीं)।

अंत में, भौतिक फ़ाइल (d001.dat) की सामग्री को सूचीबद्ध किया जाना चाहिए। मामलों को सरल बनाने के लिए, आपको वैकल्पिक विशेषताओं को संभालने की आवश्यकता नहीं है, क्योंकि सभी को अनिवार्य माना जाएगा। सुझाया गया आउटपुट:
issn name

002322 जॉन वेन
230011 एंथनी हॉपकिंस
450001 ग्रेटा गार्बो

प्रस्तावित कार्य के लिए, table.dic और att.dic तालिकाओं "student", "course", और "enrollment" के लिए मेटाडेटा संग्रहीत करते हैं। केवल "student" के लिए भौतिक फ़ाइल प्रदान की गई है। इस तालिका का उपयोग करके अपने परीक्षण करें। ग्रेडिंग के दौरान, हम "student" के अलावा "course" और "enrollment" तालिकाओं का भी उपयोग करेंगे।