Download Sistemas de Información I - Universidad Autónoma de Madrid
Transcript
Universidad Autónoma de Madrid Departamento de Ingeniería Informática Sistemas de Información I Partiendo del modelo entidad-relación obtenido como resultado de la práctica I se realizará la transformará al modelo relacional y se implementará en la base de datos postgreSQL (www.postgresql.org). A continuación se describe la práctica y en el apéndice A podéis encontrar consejos sobre como utilizar postgreSQL en los laboratorios. Al transformar el modelo Entidad-Relación al modelo relacional no os olvidéis de justificar (al menos) los siguientes puntos: - Tipo de dato adecuado para cada columna. - Restricciones de integridad y valores NULL (o valores por defecto) en las columnas. - Restricciones referenciales adecuadas entre filas de dos tablas - - Claves extranjeras - Si se elimina una entidad, qué debe hacer la base de datos con las entidades relacionadas con ella. En caso de que se almacene información redundante justificar por qué se hace Una vez implementada la base de datos en postgreSQL, poblarla con datos, empleando de manera ordenada sentencias SQL (INSERT o COPY). Las páginas web mencionadas en la práctica 1 pueden ser una buena fuente de información. El resultado de esta práctica estará compuesto por: 1. Diagrama Entidad Relación obtenido en la práctica anterior. (Inclúyase las restricciones de cardinalidad tal y como se muestran en el ejemplo del Apéndice B apartado a). 2. En caso de que se desee modificar el diseño de la base: nuevo diagrama E-R y justificación de los cambios. 3. Esquema del modelo relacional incluyendo los razonamientos para obtenerlo (y en particular los puntos resaltados arriba). (Sígase la notación del ejemplo del Apéndice B apartado b). 4. Diagrama relacional. (Sígase el modelo descrito en el Apéndice B apartado c) 5. Conjunto de sentencias SQL para la creación de las tablas (incluidas las restricciones). 6. Script necesario para crear y poblar las tablas en postgreSQL. 7. Volcado de la base de datos (pg_dump). ¿Qué hay que entregar? Se deberá entregar una memoria por escrito conteniendo los primeros 5 apartados y se entregará electrónicamente tanto la memoria como el resultado de los apartados 6 y 7 (vedse http://www.ii.uam.es/~jiperez/si1practicas/enunciado.html sección “Entrega de prácticas vía web”) . Sistemas de Información I Prácti ca 2 - 1 Universidad Autónoma de Madrid Departamento de Ingeniería Informática El resultado del apartado 6 será un fichero con el nombre tablas.sql que deberá generar las tablas si se ejecutan los comandos createdb nombredemibasededatos cat tablas.sql | psql nombredemibasededatos (véase apéndice A para una introducción al uso de postgreSQL). Por favor, generar cuidadosamente los ficheros solicitados en los apartados 6 y 7, y aseguraos que funcionan en la versión de postgreSQL instalada en los laboratorios, es absolutamente imprescindible para aprobar la práctica que estos ficheros se comporten correctamente. Sistemas de Información I Prácti ca 2 - 2 Universidad Autónoma de Madrid Departamento de Ingeniería Informática Apendice A: Usando postgreSQL en los laboratorios Antes de nada, recuerdo que es responsabilidad de los alumnos hacer un buen uso de los equipos así como la tarea de proteger su trabajo. postgreSQL está instalado en la partición Linux, cada PC tiene instalado su propio servidor. La instalación actual del laboratorio sólo permite acceso a dicho servidor con el usuario alumnodb, cuya contraseña es fsedb. Creación de una base de datos Para realizar las prácticas, cada grupo deberá crear una base de datos con el comando createdb -T template0 dbname Recordad que los ordenadores son públicos y por lo tanto hacer backups de la base de datos (véase más adelante) al terminar cada sesión Clientes para editar una base de datos Una vez creada la base de datos se procede a la creación de tablas utilizando uno de los dos clientes habituales en postgreSQL, dichos clientes son: psql: Cliente basado en línea de comandos, desde donde se pueden insertar las sentencias SQL que generan tablas, realizan consultas, etc. pgaccess: Cliente con interfaz gráfica desde donde se pueden realizar tareas similares. En las prácticas que realicemos, se puede utilizar tanto uno como otro indistintamente. Almacenamiento de la información y posterior recuperación. Para poder guardar el trabajo realizado en los laboratorios vamos a hacer uso de una de las utilidades que suministra postgreSQL para la realización de back ups. pg_dump vuelca el contenido de una base de datos (con toda la información de control que añade postgreSQL a la misma) en un fichero de texto. La sintaxis de este comando es: pg_dump dbname > outputfile Para recargar uno de los dumps generados por pg_dump podemos utilizar el siguiente comando: cat inputfile | psql dbname En el fondo, lo que esto significa es que sobre la consola de psql se ejecuten todas las sentencias que aparecen en el fichero inputfile, que debería corresponder con el outputfile generado con pg_dump, y esto implica que la base de datos dbname tiene que haber sido creada previamente. Para ello y para evitar errores en la recarga del dump, debemos borrar nuestra base de datos dropdb dname y volver a crearla: createdb -T template0 dbname Sistemas de Información I Prácti ca 2 - 3 Universidad Autónoma de Madrid Departamento de Ingeniería Informática Ejecución de scripts Cualquier fichero conteniendo un conjunto de órdenes SQL puede ser suministrado como entrada al cliente de la base de datos psql utilizando el comando cat myscript_file.sql | psql dbname Alternativamente se puede invocar desde dentro de psql ejecutando en el prompt de psql >> \i myscript_file.sql Para cualquier consulta acerca de las opciones de los comandos mencionados se puede hacer uso de las páginas man dedicadas a los mismos o de la documentación existente en www.postgreSQL.org. Poblar la base de datos usando la instrucción copy Supongamos que tenemos la tabla productos CREATE TABLE productos ( productID INT, name VARCHAR(80), price NUMERIC(10,2), retailPrice NUMERIC(10,2) ); Un fichero con el contenido listado a continuación cargará cuatro tuplas en la relación (tabla) productos: COPY productos FROM stdin USING DELIMITERS '|'; 1419|American Greetings CreataCard Gold V4.0|21.49|25.24 1424|Barbie(R) Nail Designer(TM)|20.74|25.99 1427|Panzer Commander|21.99|30.24 1431|Riven: The Sequel to Myst|31.99|40.24 \. En la primera linea USING DELIMITERS '|' es opcional y significa que los valores estarán separados por el carácter '|'. El separador por defecto es el tabulador. El número de campos en cada línea debe ser igual al número de atributos. Los datos deben acabarse con '\.' En una línea independiente Nota: COPY (a diferencia de INSERT) es un comando propio de postgreSQL Sistemas de Información I Prácti ca 2 - 4 Universidad Autónoma de Madrid Departamento de Ingeniería Informática Apéndice B Apartado a: Diagrama E-R con restricciones de cardinalidad. Sistemas de Información I Prácti ca 2 - 5 Universidad Autónoma de Madrid Departamento de Ingeniería Informática Apartado b: Esquema del modelo relacional. student(studentId, name, birthdate, program, feesOwed) ↑ studentMajor(studentId , major) course(courseId, title, credits, hours) ↑, section, term, limit) register(studentId ↑, courseId ↑, section ↑, offering(courseId approval, grade) teach(courseId ↑, section ↑, ↑) officeRoomId ↑, profId prof(profId, name, phone, division(divisionId, name) room(roomId, purpose, capacity) instruction(type, description) location(courseId Sistemas de Información I ↑, ↑ section , type ↑, divisionId roomId ↑, ↑) time) Prácti ca 2 - 6 Universidad Autónoma de Madrid Departamento de Ingeniería Informática Apartado c: Diagrama del modelo relacional. Sistemas de Información I Prácti ca 2 - 7