Vous êtes sur la page 1sur 5

Primer Trabajo de Bases de Datos 2 (13%) Semestre 2013 2

Por favor lea todo el enunciado y los ejemplos. 1. Considere el siguiente modelo Entidad Relacin: ELEMENTO #cdigo *nombre CARPETA

miembro de

compuesta por

ARCHIVO

Sea la tabla:
CREATE TABLE elemento( codigo NUMBER(10) PRIMARY KEY, nombre VARCHAR2(20) NOT NULL, elem_padre NUMBER(10) REFERENCES elemento, tipo VARCHAR2(1) NOT NULL, tamano NUMBER(8), CHECK (tipo IN (A,C)), CHECK (elem_padre <> codigo), CHECK ((tipo = C AND nombre NOT LIKE(%.%) AND nombre NOT LIKE(%/%) AND tamano IS NULL) OR (tipo = A AND tamano IS NOT NULL AND tamano>=0)) );

Ejemplos:
INSERT INTO elemento VALUES(1,ppal1, NULL,C, NULL); INSERT INTO elemento VALUES(2,ppal2, NULL,C, NULL); INSERT INTO elemento VALUES(3,temp, 1,C, NULL); INSERT INTO elemento VALUES(4,temp, 2,C, NULL); INSERT INTO elemento VALUES(5,oso.doc, 3,A, 100); INSERT INTO elemento VALUES(6,gato.doc, 3,A, 200); INSERT INTO elemento VALUES(7,gato2.doc, 1,A, 30); --Archivo en la raiz sin padre: INSERT INTO elemento VALUES(8,gato.doc, NULL,A, 400); INSERT INTO elemento VALUES(9,temp, NULL,C, NULL); INSERT INTO elemento VALUES(10,gato.doc, 9,A, 50); INSERT INTO elemento VALUES(11,xxx, 1,C, NULL); INSERT INTO elemento VALUES(12,hoja.doc, 11,A, 20);

Ejercicios
Regla 1: Los nombres de los archivos y de las carpetas se deben almacenar en la tabla siempre con TODAS sus letras en minscula. As por ejemplo si el usuario escribe en un insert: INSERT INTO elemento VALUES(10,GaTo.doc, 9,A, 50); En la tabla el nombre insertado debe quedar: gato.doc (10%) Implemente los triggers necesarios (de insercin y de actualizacin) que garanticen que siempre se cumpla la Regla 1. (10%) Implemente los triggers necesarios (de insercin y de actualizacin) que impidan que el elemento padre de otro elemento sea un archivo. Como lo muestra el modelo, solo los elementos de tipo Carpeta (C) pueden ser padres de otros elementos (ya sean carpetas o archivos) pero un archivo no puede ser padre de otro elemento. Regla 2: En este sistema hay una regla muy estricta: dentro de una misma carpeta NO PUEDE haber dos archivos con el mismo nombre ni siquiera si los archivos estn en subcarpetas distintas de dicha carpeta. Por ejemplo, segn los datos anteriores la siguiente insercin es invlida: INSERT INTO elemento VALUES(16,hoja.doc, 3,A, 30); INVLIDA Ac se intenta insertar un archivo hoja.doc en la carpeta temp que est dentro de ppal1. La insercin es invlida porque ya existe un archivo con ese nombre en la carpeta xxx que est dentro de ppal1. Otro ejemplo: INSERT INTO elemento VALUES(15,gato2.doc, 3,A, 30); INVLIDA Ac se intenta insertar un archivo gato2.doc en la carpeta temp que est dentro de ppal1. La insercin es invlida porque ya existe un archivo con ese nombre en ppal1 (archivo que de hecho es hijo directo de ppal1). Ahora veamos un ejemplo que S es vlido: INSERT INTO elemento VALUES(18,gato2.doc, 4,A, 30); VLIDA Esta insercin es vlida porque el archivo gato2.doc se va a insertar en la carpeta temp de ppal2 y ppal2 no est dentro de ppal1. (25%) Implemente los triggers necesarios (de insercin y de actualizacin) que garanticen que siempre se cumpla la Regla 2.

Regla 3: La Regla 3 es anloga a la Regla 2 pero para carpetas: dentro de una misma carpeta NO PUEDE haber subcarpetas con el mismo nombre ni siquiera si estn en subcarpetas distintas de dicha carpeta. Por ejemplo, segn los datos anteriores la siguiente insercin es invlida: INSERT INTO elemento VALUES(16,temp, 11,C, NULL); INVLIDA Ac se intenta insertar una carpeta temp dentro de la carpeta xxx que es hija de ppal1. La insercin es invlida porque ya existe una carpeta con ese nombre que est dentro de ppal1. Regla 4. En el nivel principal (elementos que no tienen padre, es decir, su padre es NULL) no pueden existir dos carpetas con el mismo nombre ni dos archivos con el mismo nombre. (10%) Implemente los triggers necesarios (de insercin y de actualizacin) que garanticen que siempre se cumpla la Regla 4. (25%) Desarrolle una solucin en PL/SQL que imprima un informe con las siguientes condiciones: Primero se deben imprimir todos los archivos que no tienen padre, ordenados alfabticamente. A continuacin se deben imprimir todas las carpetas ordenadas tambin alfabticamente. A continuacin de cada carpeta se deben imprimir todos sus archivos (hijos directos) y sus subcarpetas y as sucesivamente hasta llegar a los archivos, siempre manteniendo un orden alfabtico para los elementos situados en un mismo nivel de profundidad. Cada carpeta debe tener al frente entre parntesis la suma de los tamaos de todos los archivos que contiene (incluso la suma de los archivos contenidos en sus subcarpetas). Para los datos ejemplo (los de la pgina 1), la salida debe ser: gato.doc ppal1 (350) gato2.doc temp (300) gato.doc oso.doc xxx (20) hoja.doc ppal2 (0) temp (0)

temp (50) gato.doc (20%) Finalmente, elabore un subprograma PL/SQL llamado Alaraiz(carpetaOrigen) que recibe como parmetro el nombre de una carpeta origen. El procedimiento debe copiar todos los archivos de la carpeta origen (incluso todos los archivos que estn dentro de todas sus subcarpetas) a la raz (nivel principal) del sistema y estos archivos quedan con padre NULL. La carpeta origen con todos sus archivos y subcarpetas son borrados. Nota: Si en la raz del sistema ya existen archivos cuyo nombre coincida los de la carpeta origen, entonces los archivos de la raz se borran y sern sobreescritos por los que vienen de la carpeta origen. Ejemplo. Con los datos insertados al inicio (pgina 1) de este documento, suponga que se invoca al subprograma as Alaraiz(ppal1). El sistema queda as: gato.doc (el de tamao 200) gato2.doc hoja.doc oso.doc ppal2 temp temp gato.doc Otro ejemplo: Con los datos insertados al inicio (pgina 1) de este documento, suponga que se invoca al subprograma as Alaraiz(ppal1/temp). El sistema queda as: gato.doc (el de tamao 200) oso.doc ppal1 gato2.doc xxx hoja.doc ppal2 temp temp gato.doc

Notas adicionales: Nota: Sus soluciones deben funcionar para cualquier cantidad de filas que tenga la tabla: existen muchos elementos: muchos archivos, muchas carpetas, subcarpetas, subcarpetas dentro de subcarpetas, etc. Los datos presentados son solo para efectos de ejemplificacin. No modifique la estructura de la tabla dada: no cambie los nombres ni le adicione ni le quite columna. Puede usar todas las estructuras de datos y todas las tablas auxiliares que desee. Para entregar impreso y por email a fjmoreno@unal.edu.co, el jueves 3 de octubre en la oficina M8A-312 HASTA LAS 6:30 PM. No se reciben trabajos en hora posterior. No se reciben versiones mejoradas. Para la parte impresa solo se debe imprimir un informe donde se describa cmo se solucion cada punto. No imprimir el cdigo. Por email S se debe enviar todo el cdigo. Grupos mximo de tres personas. Los trabajos deben ser independientes entre los grupos. Trabajos copiados as sea en un SOLO punto se califican con 0 (cero) en su totalidad para todos los integrantes. Las soluciones presentadas deben ser originales, concebidas por cada grupo, no copiadas de medios como pginas web, foros, libreras de programas existentes, etc.. El trabajo debe ser desarrollado por los integrantes del grupo no por personas ajenas a l. Cualquier duda consultarla personalmente o por email con el profesor. El monitor les puede ayudar con aspectos tcnicos pero su funcin no es hacerles la prctica ni cambiarles las condiciones del trabajo. Atentamente, Pacho. Septiembre 11 de 2013 (el da en que cayeron las torres gemelas!)

Vous aimerez peut-être aussi