Prácticas de Estructuras de Datos

Pr´acticas de Estructuras de Datos ˜ David Arroyo Guardeno ´ ´ Escuela Politecnica Superior de la Universidad Autonoma de Madrid 1 2 3 4 5 6 Intr

0 downloads 123 Views 179KB Size

Story Transcript

Pr´acticas de Estructuras de Datos ˜ David Arroyo Guardeno ´ ´ Escuela Politecnica Superior de la Universidad Autonoma de Madrid

1 2

3 4

5 6

Introducci´on Normativa General Requisitos de las entregas Pr´actica 1 Introducci´on a PostgreSQL Comandos utiles ´ Importaci´on de datos Copia de seguridad SHELL SQL

Informaci´on general

3 B 3 ☠

Correo ↔ [email protected] [EDAT] Nota: 0.7 × NT + 0.3 × NP COPIAS

Requisitos de las entregas

´ de 1 punto por d´ıa de Penalizacion retraso E ntrega moodle L´ımite: una hora antes del ´ de la comienzo de la primera sesion ´ siguiente practica N ombre entregable Gxxx Pyy z.tgz R etraso

en caso contrario, ↓ 1 punto

Contenido del fichero 1

2

Fichero de texto: nombre alumnos, email, grupo y fecha ´ en formato pdf Documentacion 7 Respuesta a preguntas breves ´ 7 Como se ha realizado cada ejercicio ´ ejercicio final: 7 Documentacion

3

´ Listado de codigo fuente documentado ´ modular y estructurada 7 Programacion 7 Makefile ´ no correcta: 0!!! ☠ Compilacion

Pr´actica 1

1 2 3

Crear un diagrama E-R ´ del primer diseno ˜ Optimizacion Consultas SQL

Gesti´on de un cat´alogo de libros I 1

2

3

Libro: uno o varios autores, una o varias ediciones, uno o varios idiomas, tapa dura o bolsillo ´ puede tener un editor o Cada edicion ´ puede editores distintos; cada edicion tener un precio distinto Existen ofertas para un grupo de libros dentro de una cierto rango de fechas

Gesti´on de un cat´alogo de libros II 4

5

6

Existen usuarios fidelizados: identificador ´ y numero (unico) de tarjeta de credito ´ ´ Los usuarios fidelizados tienen un ´ en libros descuento de un 10% (tambien en oferta) Hay registro de compras para cada usuario fidelizado. La compra puede ser ´ en metalico o con tarjeta

Gesti´on de un cat´alogo de libros III

7

Los usuarios no fidelizados compran (en ´ metalico o con tarjeta) y el registro se lleva sobre los art´ıculos adquiridos

Consultas I 1

2

3

4

´ Dado un t´ıtulo, ¿Cuantas ediciones tiene? ¿En cuantos idiomas? ´ ¿Cuantos libros se han vendido de un autor dado? ´ ¿Cuantos libros de un autor dado se han vendido en oferta? ´ ¿Cuanto dinero se ha ganado vendiendo libros de un editor dado?

Consultas II

5

6

´ ¿Cuantos libros han comprado los usuarios fidelizados? ´ ¿Cuantos usuarios fidelizados han ´ comprado libros en ingles?

sudo apt−g e t i n s t a l l p o s t g r e s q l p o s t g r e s q l −c o n t r i b sudo − i −u p o s t g r e s c r e a t e u s e r edat −d − l sudo − i −u edat c r e a t e d b −U edat l i b r e r i a man c r e a t e u s e r man c r e a t e d b man dropuser

Comandos utiles ´ de PostgreSQL Ø psql −U para conectar un usuario a una base de datos Ø \l lista todas las bases de datos Ø \du lista todos los usuarios Ø \d muestra la estructura de una tabla (su ´ descripcion) Ø \q para salir de psql

´ Ø pgadmin3 para acceder en modo grafico

Introducir un fichero en una tabla de la base de datos \copy users from ’ / tmp / user . t x t ’ CSV header d e l i m i t e r E ’ \ t ’ encoding ’ ISO −8859−1 ’ NULL as ’NULL ’

CSV header elimina la cabecera del fichero (los descriptores de columna) ´ separadas Ø with delimiter E’\t’ establece que las columnas estan mediante un tabulador

Ø

Ø

encoding ’ISO−8859−1’ establece que la codificacion del fichero de ´ es ’ISO-8859-1’ importacion ´ adecuada puede haber problemas 7 Si no se usa la codificacion ´ de caracteres especiales con la visualizacion ´ de un fichero desde la shell de Linux, 7 Para ver la codificacion basta hacer file fichero.txt 7 Por defecto PostgreSQL asume que el fichero esta´ codificado siguiendo la norma UTF-8 ´ de un fichero mediante iconv ⇒ 7 Se puede cambiar la codificacion man iconv

Realizar un backup de la base de datos y cargar desde un dump

pg dump −U username − f backup . s q l database name p s q l −d database name − f b a c k u p s q l

M´as comando utiles ´ # M o s t r a r un l i s t a d o con todas l a bases de datos sudo −u p o s t g r e s p s q l −− l i s t # R e a l i z a r un backup sudo −u p o s t g r e s pg dump [ database name ] > dumpl . s q l # E l i m i n a r una base de datos sudo −u p r o s t g r e s dropdb [ database name ] # Crear una base datos sudo −u p o s t g r e s c r e a t e d b [ new databse ] # R e s t a u r a r una base de datos sudo −u p o s t g r e s p s q l [ new database ] < dump . s q l ##################################################### # Respaldar una u n i c a t a b l a sudo −u p o s t g r e s pg dump −−t a b l e [ table name ] [ database name ] > dump . s q l # R e s t a u r a r s o l o una t a b l a sudo −u p o s t g r e s p s q l − f dump . s q l [ database name ]

Configuraci´on de pgadmin I Editar el fichero /etc/postgresql/9.x/main/pg hba.conf Cambiar #Database a d m i n i s t r a t i v e l o g i n by Unix domain s o c k e t local all postgres

md5

por #Database a d m i n i s t r a t i v e l o g i n by Unix domain s o c k e t local all postgres

Re-arrancar el servidor sudo service postgresql restart Hacer

trust

Configuraci´on de pgadmin II p s q l −U p o s t g r e s ALTER USER p o s t g r e s w i t h password ’ new password ’ ;

´ inicial del fichero de Volver a la configuracion ´ de PostgreSQL configuracion #Database a d m i n i s t r a t i v e l o g i n by Unix domain s o c k e t local all postgres

Finalmente sudo service postgresql restart

md5

Permitir hacer login a cualquier usuario en local y dado de alta en postgres

Editar pg hba.conf # Database a d m i n i s t r a t i v e l o g i n by Unix domain s o c k e t # s o´ l o para p o s t g r e s #local all postgres local all all

md5 md5

Shell: comandos utiles ´ I Analizador de comandos shell: ExplainShell m head −1 LIBROS.txt : muestra la primera fila del fichero, en este caso la cabecera CSV Ø cut −d $’\t’ −f1−3,5 LIBROS.txt : muestra las columnas 1 a 3 ´ separadas por un y la columna 5 del fichero; las columnas estan ´ tabulador (el parametro −d define el separador entre columnas)

Ø

paste −d $’\t’ user id.txt isbns vendidos.txt > ventas.txt : crea un nuevo fichero (ventas.txt) anexionando las columnas de ´ dos, pero pueden ser los ficheros de entrada (en este caso solo tantos como precisemos); las columnas se separan mediante tabulador de l´ıneas de un fichero Ø wc −l fichero.txt : numero ´

Ø

Ø

find ./ −name ∗.txt −type f | xargs −I{} grep candidato {}

Shell: comandos utiles ´ II 7 find ./ −name ∗.txt −type f : encuentra ´ txt y que todo los ficheros con extension ´ contenidos en el directorio actual o en esten ´ alguno de los directorios que este contiene 7 xargs −I{} : considera como argumento de entrada la salida proporcionada por el comando a la izquierda de la tuber´ıa 7 xargs −I{} grep candidato {} : busca la palabra “candidato” en cada una de los ficheros que devuelve el comando find

Shell: comandos utiles ´ III Ø

sed −i ’s/0000−00−00/1984−01−01/g’ LIBROS.txt : sustituir la cadena “0000-00-00” por “1984-01-01” en LIBROS.txt (el ´ −i hace que sed guarde el resultado en el fichero parametro de entrada)

cut Ø −d $’\t’ −f8 LIBROS FINAL.txt | sed ’1d’ | sort | uniq −c | tr −s ” ”

7 cut −d $’\t’ −f8 LIBROS FINAL.txt : extrae la columna 8 del fichero de entrada 7 | sed ’1d’ : elimina la primera fila del resultado anterior 7 | sort : ordena las filas obtenidas en el anterior paso

Shell: comandos utiles ´ IV 7 | uniq −c : en base al resultado de la ´ previa, obtiene los elementos que operacion ´ muestra cuantas ´ son unicos y, ademas, ´ veces aparece cada uno de ellos ocurrencias 7 | tr −s ” ” : sustituye multiples ´ de un espacio en blanco por una unica ´ ocurrencia cat /dev/urandom | tr −cd ”0−9” | fold −w 3 | | xargs −I{} date −d ”2016−09−28 + {} days” +”%d−%m−%Y” Ø

cat /dev/urandom | tr −cd ”0−9” | fold −w 3 : Genera aleatoriamente numeros de 3 d´ıgitos ´

Ø

| xargs −I{} date −d ”2016−09−28 + {} days” +”%d−%m−%Y” : suma el numero aleatorio a una fecha de partida ´

Comandos utiles ´ SQL I ´ de los ya conocidos . . . Ademas ´ de tipos (casting): select 1::boolean; (conversion ´ Ø Conversion de entero en booleano); select 1 as boolean; ; select now()::date; (muestra la hora actual en formato de fecha sin hora); select 1.56::money; (convierte un numero a formato money) ´ ´ de valores aleatorios: select random(); ; Ø Generacion ´ de tipo money select random()∗10:int8::money; (generacion de modo aleatorio) Ø Fecha aleatoria: select (now()+ interval ’1’ minute ∗ round(365∗(random()::numeric ),0)):: timestamp (0); ´ de claves primarias en la Ø Evitar problemas por duplicacion ´ de datos (☠: solo ´ si es estrictamente necesario) importacion

Comandos utiles ´ SQL II insert into libros (select isbn,titulo ,formato,idioma from libros temp)on conflict do nothing; ´ funciona para versiones de PostgreSQL Ø Lo anterior solo ´ 9.4.5 superiores a la version select ∗ from (select ∗, row number()over (partition by isbn order by titulo) as row number from libros temp02)as rows where row number = 1; Ø Funciones de ventana en PostgreSQL: https://www.postgresql.org/docs/current/static/ functions-window.html

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.