Trabalho 1 Bd2
Esta atividade consiste em ler arquivos de metadados e dados para simular um select * from table. Para tal, serão fornecidos três arquivos: um contendo o metadado da tabela (table.dic), outro o metadado dos atributos (att.dic) e um outro com os dados de uma das tabelas presentes no table.dic (11.dat).
T1 - Leitura de arquivos de dados
Esta atividade envolve a leitura de metadados e arquivos de dados para simular uma operação SELECT * FROM table. Três arquivos serão fornecidos para esse fim: um contendo os metadados da tabela (table.dic), outro contendo os metadados dos atributos (att.dic) e um terceiro contendo os dados reais de uma das tabelas listadas em table.dic (por exemplo, 11.dat).
+-----------+ idtable +---------+
| table.dic |---------------<| att.dic |
+-----------+ +---------+
Implemente um aplicativo em C que execute o seguinte:
- Ao ser executado, o programa deve receber um parâmetro (uma string) correspondente ao nome lógico (tabela) dentro do banco de dados. Por exemplo, se o programa se chamar
select, a entrada na linha de comando (no Linux) seria./select table. O resultado deve ser equivalente a uma consulta SQL do tipoSELECT * FROM table. - O aplicativo procurará em
table.dicpelo nome da tabela passado como parâmetro; se encontrado, deverá abrir o arquivo correspondente ao nome físico para leitura. A estrutura detable.dicé a seguinte:
struct ttable {
int idtable; // id da tabela
char ctname[20]; // nome conceitual da tabela
char ptname[20]; // nome físico da tabela
}
- Se o nome lógico for encontrado em
table.dic, o arquivoatt.dicdeve ser aberto para recuperar o esquema do arquivo. Ele está organizado da seguinte forma:
struct tatt {
int idtable; // ID da tabela
char atname[20]; // nome do atributo
char attype; // S (string) I (inteiro) F (flutuante) (C Char)
char isKey; // 1 indica chave primária
char atopt; // obrigatório (0) opcional (1)
int atlen; // comprimento
}
Envie um arquivo ZIP contendo o código-fonte criado (recomenda-se usar arquivos .h e .c separados) ou apenas o arquivo-fonte, caso tudo esteja contido em um único arquivo. O nome do arquivo ZIP ou do arquivo-fonte deve ser o seu número de identificação de aluno. Exemplo:
Imagine uma instância de table.dic com
<1, "car", "xyz.dat">, <2, "owner", "d001.dat"> e
uma instância de att.dic com
<1, "model", 'S', 1, 0, 30>, <1, "year", 'I', 0, 0, 4>,
<2, "issn", 'S', 1, 0, 12>, <2, "name", 'S', 0, 0, 30>
Se o nome do aplicativo for selectDB, a execução no Linux seria ./selectDB owner (onde “owner” corresponde ao nome da tabela — o nome lógico).
O arquivo d001.dat conterá dados seguindo o esquema correspondente à tabela com ID 2 (“owner”) no arquivo att.dic: especificamente, “issn” (uma string de 12 caracteres, obrigatória e chave) e “name” (uma string de 30 caracteres, obrigatória, não chave).
Por fim, o conteúdo do arquivo físico (d001.dat) deve ser listado. Para simplificar, você não precisa lidar com atributos opcionais, pois todos serão considerados obrigatórios. Saída sugerida:
issn name
002322 John Wayne
230011 Anthony Hopkins
450001 Greta Garbo
Para a tarefa proposta, os arquivos table.dic e att.dic armazenam metadados para as tabelas “student”, “course” e “enrollment”. Apenas o arquivo físico de “student” foi fornecido. Realize seus testes usando essa tabela. Durante a avaliação, usaremos as tabelas “course” e “enrollment”, além de “student”.
