Trabalho 1 Bd2
C

Trabalho 1 Bd2

Esta actividad consiste en leer archivos de metadatos y datos para simular un «select * from table». Para ello, se proporcionarán tres archivos: uno que contiene los metadatos de la tabla (table.dic), otro con los metadatos de los atributos (att.dic) y otro con los datos de una de las tablas presentes en table.dic (11.dat).

GitHub|

T1 - Lectura de archivos de datos

Esta actividad consiste en leer metadatos y archivos de datos para simular una operación SELECT * FROM table. Se proporcionarán tres archivos para este fin: uno que contiene los metadatos de la tabla (table.dic), otro que contiene los metadatos de los atributos (att.dic) y un tercero que contiene los datos reales de una de las tablas enumeradas en table.dic (por ejemplo, 11.dat).
+-----------+ idtable +---------+
| table.dic |---------------<| att.dic |
+-----------+ +---------+

Implementa una aplicación en C que realice lo siguiente:

  • Al ejecutarse, el programa debe recibir un parámetro (una cadena) correspondiente al nombre lógico (tabla) dentro de la base de datos. Por ejemplo, si el programa se llama select, la entrada en la línea de comandos (en Linux) sería ./select table. El resultado debería ser equivalente a una consulta SQL SELECT * FROM table.
  • La aplicación buscará en table.dic el nombre de la tabla pasado como parámetro; si lo encuentra, debe abrir el archivo correspondiente al nombre físico para su lectura. La estructura de table.dic es la siguiente:

struct ttable {
int idtable; // id de la tabla
char ctname[20]; // nombre conceptual de la tabla
char ptname[20]; // nombre físico de la tabla
}

  • Si se encuentra el nombre lógico en table.dic, se debe abrir el archivo att.dic para recuperar el esquema del archivo. Está organizado de la siguiente manera:

struct tatt {
int idtable; // id de la tabla
char atname[20]; // nombre del atributo
char attype; // S (cadena) I (entero) F (flotante) (C Char)
char isKey; // 1 indica que es una clave primaria
char atopt; // obligatorio (0) opcional (1)
int atlen; // longitud
}

Envía un archivo ZIP que contenga el código fuente creado (se recomienda utilizar archivos .h y .c separados), o simplemente el archivo fuente si todo está contenido en un único archivo. El nombre del archivo ZIP o del archivo fuente debe ser tu número de matrícula. Ejemplo:
Imagina una instancia de table.dic con
<1, "car", "xyz.dat">, <2, "owner", "d001.dat"> y
una instancia de att.dic con
<1, «model», «S», 1, 0, 30>, <1, «year», «I», 0, 0, 4>,
<2, «issn», 'S', 1, 0, 12>, <2, «name», 'S', 0, 0, 30>

Si el nombre de la aplicación es selectDB, la ejecución en Linux sería ./selectDB owner (donde «owner» corresponde al nombre de la tabla, es decir, el nombre lógico).

El archivo d001.dat contendrá datos que siguen el esquema correspondiente a la tabla con ID 2 («owner») en el archivo att.dic: concretamente, «issn» (una cadena de 12 caracteres, obligatoria y clave) y «name» (una cadena de 30 caracteres, obligatoria, pero no clave).

Por último, debe enumerarse el contenido del archivo físico (d001.dat). Para simplificar, no es necesario tener en cuenta los atributos opcionales, ya que todos se considerarán obligatorios. Resultado sugerido:
issn nombre

002322 John Wayne
230011 Anthony Hopkins
450001 Greta Garbo

Para la tarea propuesta, los archivos table.dic y att.dic almacenan metadatos de las tablas «student», «course» y «enrollment». Solo se ha facilitado el archivo físico de «student». Realiza tus pruebas utilizando esta tabla. Durante la evaluación, utilizaremos las tablas «course» y «enrollment», además de «student».