Download Sistemas de Información I - Universidad Autónoma de Madrid

Document related concepts
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