• Viernes 15 de Noviembre de 2024, 05:07

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Arikel

Páginas: [1]
1
C/C++ / Implementando base de datos
« en: Sábado 16 de Octubre de 2010, 17:55 »
Hola chicos ando desesperada si alguien me puede brindar ayuda con esto estare muy agradecida.

Introducci¶on
Esta tarea es obligatoria y su no aprobaci¶on implicar¶a la perdida del curso. El estudiante
deber¶a resolver e implementar la tarea propuesta utilizando los TAD y sus implementaciones
asi como del lenguaje C++ los conocimientos impartidos en el curso.
Simulador de un Manejador de Base de Datos
Se desea implementar un sistema manejador de base de datos que permita crear y mantener
tablas, almacenar datos en ellas y realizar ciertas operaciones sobre los datos.
Una base de datos es un conjunto de tablas que poseen nombres ¶unicos que permiten
identi¯carlas. Una tabla es, desde el punto de vista l¶ogico, un conjunto de ¯las y columnas
(campos) donde se distribuye la informaci¶on.

Ejemplo
Tabla Personas
Nombre Apellido CI
Maria Casta~na 0.000.001
Juan P¶erez 2.256.698
Daniel Filth 3.333.444
Laura P¶erez 2.123.328

Cada columna tiene un nombre que debe ser ¶unico dentro de las columnas de la tabla y
contiene datos de una misma naturaleza. Si tomamos como ejemplo la tabla personas, cada
columna representa un atributo de las personas. Luego las ¯las contienen los datos de cada
persona. Una tupla es la colecci¶on de datos presentes en una ¯la de la tabla, considerando el
orden en que se presentan los datos. Esto nos lleva a que dos tablas con todas sus columnas
iguales pero dispuestas en distinto orden se consideran tablas distintas. En otras palabras,
una tabla es un conjunto de tuplas y una tupla es un conjunto de datos, debiendo cumplirse
que para una misma tabla todas las tuplas tienen la misma cantidad de datos de los mismos
tipos y en el mismo orden.


Existen tres formas de cali¯car a una columna de una tabla: NOT EMPTY, PRIMARY
KEY y ANY. NOT EMPTY signi¯ca que la columna no admite campos vacios. Es decir no
admite campos con el valor EMPTY. El cali¯cador PRIMARY KEY puede aplicarse a 0 o 1
columnas de una tabla. PRIMARY KEY indica que los valores de la columna no pueden ser
EMPTY y son ¶unicos. Entonces, se puede identi¯car un¶³vocamente a una tupla por el valor
del campo correspondiente a la columna PRIMARY KEY. ANY se considera un cali¯cador
neutro, es decir, no restringe los valores de la columna. El valor EMPTY se acepta para
cualquier columna, independientemente de su tipo de datos, siempre que la columna no est¶e
cali¯cada como NOT EMPTY ni como PRIMARY KEY. Notar que en el ejemplo previo de
la tabla de personas, Apellido no podr¶³a ser un campo PRIMARY KEY, pero si el campo
CI (de acuerdo a las tuplas del ejemplo).

Por motivos de simplicidad se considerar¶an s¶olo dos posibles tipos de datos almacen-
ables en una tabla: strings e integers. Un string es una secuencia de caracteres donde se
excluyen los siguientes caracteres: el mayor (>), el menor (<), el igual (=) y el dos puntos (:).
En resumen, el sistema deber¶a poder almacenar y administrar tablas que cumplan el
siguiente esquema:

² Un nombre que identi¯ca a la tabla de manera ¶unica.
² Las columnas, de las que se conoce su:
{ Nombre (que la identi¯ca dentro de la tabla)
{ Tipo de datos (string, integer)
{ Cali¯cador que se aplica a esa columna
El nombre de tabla tiene un m¶aximo de 15 caracteres y el tipo de datos string que aplica
a las columnas tiene un m¶aximo de 10 caracteres.

Consideraciones generales
El sistema deber¶a implementar de forma e¯ciente las operaciones sobre la base de datos.
En particular, teniendo en cuenta la posible existencia en las tablas de una clave primaria
(columna PRIMARY KEY).

En caso de existir una columna PRIMARY KEY no se aceptar¶an tuplas repetidas, es-
tando esto permitido si no hay PRIMARY KEY.

Si la aplicaci¶on de alguna de las operaciones que se describen m¶as adelante, deja a las
tablas de la base de datos en un estado inconsistente o la operaci¶on no est¶a permitida por
su especi¯caci¶on o por las reglas antes mencionadas se establecer¶a una situaci¶on de error en
la cual:

² Permanecer¶a invariante el estado de la base de datos
² Se mostrar¶a un mensaje de error adecuado y clari¯cador.
A continuaci¶on se describen las operaciones del sistema.

Operaciones sobre la Base de Datos
CREAR TABLA - createTable(nombreTabla)
Descripci¶on: Crea una nueva tabla vacia (sin columnas ni tuplas) en la base de datos con
nombre nombreTabla, siempre que no exista ya una tabla con dicho nombre.

ELIMINAR TABLA - dropTable(nombreTabla)
Descripci¶on: Elimina la tabla de nombre nombreTabla de la base de datos, si ¶esta existe y
las tuplas que la misma posee.

OPERACIONES PARA MODIFICAR UNA TABLA:
addCol(nombreTabla,nombreCol,tipoCol,cali¯cadorCol)
Descripci¶on: Agrega a la tabla de nombre nombreTabla, si esta existe, una nueva columna
al ¯nal, de nombre nombreCol, si esta no existe, tipo tipoCol y cali¯cador cali¯cadorCol. Si
la tabla tiene tuplas, el nuevo campo tendr¶a el valor EMPTY en cada tupla. Por lo tanto,
en el caso en que la tabla tenga tuplas no es v¶alido que se agregue un cali¯cador distinto de
ANY. Tampoco es v¶alido que cali¯cadorCol sea PRIMARY KEY si existe ya una columna
con dicho cali¯cador en la tabla nombreTabla.

dropCol(nombreTabla,nombreCol)
Descripci¶on: Elimina de la tabla de nombre nombreTabla, si esta existe, la columna de
nombre nombreCol, si esta existe. Si la tabla tiene tuplas, entonces se eliminar¶a de estas
el campo correspondiente a la columna eliminada. Si la tabla ten¶³a una ¶unica columna de
nombre nombreCol entonces quedar¶a como tabla vacia.
alterCol(nombreTabla,nombreCOL,tipoColNuevo,cali¯cadorColNuevo, nombreCol-
Nuevo)

Descripci¶on: Modi¯ca de la tabla de nombre nombreTabla, si ¶esta existe, la columna de
nombre nombreCol, si est¶a existe, quedando ¶esta columna con el nuevo tipo de datos tipoCol-
Nuevo, cali¯cador cali¯cadorColNuevo y nombre nombreColNuevo, si ¶este ¶ultimo no es el
nombre de otra columna de la tabla. Si la tabla tiene tuplas, los valores de la columna
modi¯cada deber¶an satisfacer las nuevas caracteristicas (tipo de datos y cali¯cador). El tipo
de datos s¶olo puede cambiar de integer a string y en este caso se deber¶a realizar la conversi¶on
de tipo de la columna especi¯cada en todas las tuplas de la tabla.
Operaciones para la Edici¶on de Datos

INSERTAR TUPLA - insertInto(nombreTabla,columnasTupla,valoresTupla)
Descripci¶on: Inserta en la tabla de nombre nombreTabla, si esta existe, una tupla con los
valores dados en valoresTupla para las columnas indicadas en columnasTupla, si los nom-
bres de las columnas existen, los valores son del tipo adecuado y satisfacen los cali¯cadores
correspondientes a cada columna. Si no se indican todas las columnas se inserta EMPTY
en las otras. Por lo tanto, la operaci¶on se permite s¶olo si las columnas que no se indican
tienen el cali¯cador ANY. Los nombres de las columnas en columnasTupla y los valores de
valoresTupla se separan con el uso del caracter dos puntos (:) y deben corresponderse uno
a uno. Esto es, el nombre de columna i en columnasTupla con el valor en la posici¶on i de
valoresTupla.

ELIMINAR TUPLA - delete(nombreTabla,condicionEliminar)
Descripci¶on: Elimina de la tabla de nombre nombreTabla, si ¶esta existe, todas las tuplas que
cumplen la condici¶on condicionEliminar. En caso de que la condici¶on sea "", se eliminan
todas las tuplas de la tabla. Si ninguna tupla cumple la condici¶on, la operaci¶on no tendr¶a
efecto.

El formato de las condiciones es: columna operador valor (sin espacios en blanco inter-
medios). Los operadores a utilizar son: =, <, >.
4
Por ejemplo: Sexo=Masculino, Edad<18, Apellido > Perez.
Para comparar strings con el operador > o < se utilizar¶a el orden lexicogr¶a¯co habitual.
El valor EMPTY puede usarse en una condici¶on. La condici¶on columna=EMPTY resulta
verdadera para una tupla si y solo si el valor de la columna en dicha tupla es EMPTY. En
cualquier otro caso, una condici¶on que involucre el valor EMPTY resulta ser falsa. Asimismo,
toda condici¶on que no involucre al valor EMPTY resultar¶a falsa al ser instanciada por una
tupla que tenga el valor EMPTY en la columna de la condici¶on.

MODIFICAR TUPLA - update(nombreTabla,condicionModi¯car,columnaModi¯car
,valorModi¯car)

Descripci¶on: Modi¯ca en la tabla de nombre nombreTabla, si esta existe, el valor de las
tuplas en la columna de nombre columna Modi¯car, si ¶esta existe, que cumplen la condici¶on
condicionModi¯car. En la columna especi¯cada de las tuplas que cumplen la condici¶on se
asigna el valor valorModi¯car, siempre que este valor sea del tipo adecuadoy satisfaga el
cali¯cador de la columna especi¯cada. En caso de que la condici¶on sea "", la operaci¶on tiene
aplicaci¶on sobre todas las tuplas de la tabla.

Operaciones para la Impresi¶on de Informaci¶on
LISTAR TABLAS - printTables()
Descripci¶on: Imprime los nombres de las tablas de la base de datos del sistema, ordenados
alfab¶eticamente de menor a mayor.
LISTAR ESQUEMA - printMetadata(nombreTabla)
Descripci¶on: Imprime el esquema de la tabla de nombre nombreTabla, si ¶esta existe. Es decir,
imprime el nombre de la Tabla, los nombres de sus columnas en el orden correspondiente,
indicando para cada columna su tipo de datos y cali¯cador.
LISTAR TABLA - printDataTable(nombreTabla,nombreCol)
Descripci¶on: Imprime las tuplas de la tabla de nombre nombreTabla. Si la tabla tiene un
campo PRIMARY KEY, las tuplas se imprimen ordenadas de menor a mayor seg¶un dicho
campo, sino se imprimen ordenadas de menor a mayor por el campo nombreCol si ¶este existe
en la tabla.

Sugerencias
Dado que la no satisfacci¶on de alguna precondici¶on de alguna de las operaciones, puede hacer
que la implementaci¶on de la operaci¶on deje alguna tabla en forma inconsistente, se sugiere
implementar para cada una de las operaciones una funci¶on precondicion de operacion que
veri¯que si se satisfacen todas las precondiciones necesarias para que una operacion pueda
ser ejecutada en forma consistente.

Compilador
Todos los m¶odulos entregados deben compilar y linkeditar con el compilador del curso
mingw32 3.4.2. Versi¶on que viene con el entorno de desarrollo Dev-C++ 5.0 beta 9.2 (4.9.9.2)
con Mingw/GCC 3.4.2


Quize ponerls el link pero no me permite el foro asi que si alguien quiere y puede darme una mano igual mandeme MP

Páginas: [1]