Trabalho 1 Bd2
この課題は、メタデータファイルとデータファイルを読み込み、「SELECT * FROM table」をシミュレートするものです。 そのために、3つのファイルが提供されます。1つはテーブルのメタデータ(table.dic)、もう1つは属性のメタデータ(att.dic)、そしてもう1つはtable.dicに含まれるテーブルの1つのデータ(11.dat)です。
T1 - データファイルの読み込み
この課題では、メタデータとデータファイルを読み込み、SELECT * FROM table 操作をシミュレートします。 この目的のために、3つのファイルが提供されます。1つはテーブルのメタデータ(table.dic)、もう1つは属性のメタデータ(att.dic)、そして3つ目はtable.dicに記載されているテーブルの1つに関する実際のデータ(例:11.dat)です。
+-----------+ idtable +---------+
| table.dic |---------------<| att.dic |
+-----------+ +---------+
以下の機能を実行する C アプリケーションを実装してください:
- 実行時、プログラムはデータベース内の論理名(テーブル)に対応するパラメータ(文字列)を受け取る必要があります。例えば、プログラム名が
selectの場合、コマンドラインでの入力(Linux の場合)は./select tableとなります。 結果は、SELECT * FROM tableという SQL クエリと同等のものである必要があります。 - アプリケーションは、パラメータとして渡されたテーブル名を
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)
char isKey; // 1は主キー
char atopt; // 必須 (0) オプション (1)
int atlen; // 長さ
}
作成したソースコードを含む ZIP ファイル(.h ファイルと .c ファイルを別々に作成することを推奨)を提出してください。すべてが 1 つのファイルに含まれている場合は、そのソースファイルのみを提出してください。ZIP ファイルまたはソースファイルの名前は、学生 ID 番号にする必要があります。例:
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 には、att.dic ファイル内のテーブル ID 2(「owner」)に対応するスキーマに従ったデータが含まれます。具体的には、 「issn」(12文字の文字列、必須、キー)および「name」(30文字の文字列、必須、キーではない)。
最後に、物理ファイル(d001.dat)の内容を一覧表示する必要があります。 簡略化のため、オプション属性については扱わなくても構いません。すべて必須とみなされます。推奨される出力例:
issn name
002322 ジョン・ウェイン
230011 アンソニー・ホプキンス
450001 グレタ・ガルボ
提案された課題では、table.dic および att.dic には、「student」、「course」、「enrollment」の各テーブルのメタデータが格納されています。 提供されているのは「student」の物理ファイルのみです。このテーブルを使用してテストを行ってください。採点時には、「student」に加え、「course」および「enrollment」テーブルも使用します。
