01 0 reporte practicas 01 - 09

Upload: irving-vs

Post on 10-Jul-2015

433 views

Category:

Documents


0 download

TRANSCRIPT

SUBSECRETARIA DE EDUCACION SUPERIOR DIRECCION GENERAL DE EDUCACION SUPERIOR TECNOLOGICA INSTITUTO TECNOLOGICO DE OAXACA DEPARTAMENTO DE SISTEMAS Y COMPUTACION

INSTITUTO TECNOLOGICO DE OAXACA

DEPARTAMENTO DE SISTEMAS Y COMPUTACION LICENCIATURA LICENCIATURA EN INFORMATICA

MANUAL DE PRACTICAS DE LA ASIGNATURA IFH IFH0439 TALLER DE BASES DE DATOS

ARTURO ARMANDO ARAGON SORROZA

TRABAJO DE AO SABATICO REPORTE INTERMEDIO DEL 18 DE ENERO D EL 2010 17 DE JULIO DEL 2010

INDICECONTENIDO PAGINA ------------------------------------------------------------------------------------

INTRODUCCION _____________________________________________ 1 PRACTICA # 1. PREPARACIN DEL ENTORNO OPERATIVO _______ 2 PRACTICA # 2. INSTALACIN DEL GESTOR DE BASES DE DATOS _ 5 PRACTICA # 3. RECONOCIMIENTO DEL ENTORNO OPERATIVO DEL GESTOR DE BASES DE DATOS __________________ 9 PRACTICA # 4. CREACIN DE BASES DE DATOS Y ESQUEMAS __ 13 PRACTICA # 5. USO DE LA INTEGRIDAD _______________________ 21 PRACTICA # 6. CREACIN DE TABLAS ________________________ 32 PRACTICA # 7. ACCESO A LA BASE DE DATOS _________________ 39 PRACTICA # 8. MONITOREO DE BASES DE DATOS _____________ 49 PRACTICA # 9. USO DE TRIGGERS ____________________________ 55

INTRODUCCIONLa importancia de almacenar, manipular y recuperar la informacin en forma eficiente ha llevado al desarrollo de una teora esencial para las bases de datos. Esta teora ayuda al diseo y procesamiento de consultas de bases de datos por parte de un usuario ingenuo. Las arquitecturas de las bases de datos han evolucionado mucho desde sus comienzos, aunque la considerada estndar hoy en da es la descrita por el Comit ANSI/X3/SPARC (Standard Planning And Requirements Committee of The American National Standards Institute on Computers and Information Processing) que data de finales de los aos setenta. A partir de entonces han aparecido en la escena de los Sistemas de Informacin Informatizados, infinidad de tecnologas que han implementado esta teora, llmense Oracle, Sybase, SQL Server de MS, Informix y DB2 de IBM, PostgreSQL, MySql de Sun, entre otras, ofreciendo la gestin de las bases de datos al profesional de la informtica en una forma accesible a travs del lenguaje de programacin SQL (Structured Querie Language). Como parte fundamental del perfil del Licenciado en Informtica, el Sistema Nacional de Educacin Superior Tecnolgica a travs de la Direccin General de Institutos Tecnolgicos, los alumnos inscritos en los Institutos Tecnolgicos del pas se forman para aplicar esta teora en la solucin de problemas de administracin de datos que requieren las empresas e instituciones asentadas en las distintas regiones de la Repblica Mexicana. Si bien es cierto que un buen Administrador de Bases de Datos no se hace en semanas ni meses, sino en aos, existe la posibilidad de utilizar tcnicas de enseanza-aprendizaje que guen a los estudiantes de informtica de nuestro Sistema Nacional de Educacin Superior Tecnolgica a conseguir el conocimiento suficiente y estandarizado de un Sistema de Gestin de Bases de Datos (SGBD) y del SQL, con cuyas bases pueda extender su experiencia para aprender el funcionamiento de al menos media docena de otros SGBD con la misma efectividad. Se requiere entonces, apoyarse en el inters y el gusto personales de cada estudiante con base en metodologas, como la de aprender haciendo mediante esfuerzos deliberados tareas bien definidas, con niveles apropiados de dificultad segn las posibilidades de cada individuo, con retroalimentacin y oportunidades de repeticin y correccin de errores para que logre las competencias suficientes para desarrollarse en el campo de las Bases de datos. En este sentido, el Manual de prcticas para la materia de Taller de Bases de Datos, tiene como objetivo principal el ofrecer a nuestros estudiantes un material debidamente dosificado tanto en nivel de dificultad como en contenidos que pueda estudiar y aplicar tanto en sesiones grupales como en forma individual, cuantas veces lo crea necesario hasta conseguir la meta establecida para cada ejercicio propuesto. El material est diseado para ofrecer al estudiante y al profesor tambin, la teora bsica en que se fundamenta la prctica propuesta, el algoritmo a seguir para conseguir la meta y la retroalimentacin necesaria para evaluar el avance en el aprendizaje. Las primeras dos practicas tienen como finalidad preparar el equipo con las caracteristicas operativas suficientes para instalar el sistema gestor de bases de datos con el que se trabajara durante el semestre. Al desarrollar la practica numero tres, el alumno aprendera a manipular la interfase que le permitira usar eficientemente el gestor de base de datos. Con las practicas cuatro a siete, se debera adquirir la habilidad para crear, gestionar y consultar bases de datos. A partir de la practica ocho se abordaran topicos cuya finalidad es preparar al estudiante para programar la gestion de los datos, usando triggers, procedimientos almacenados y programando interfases graficas mediante un lenguaje de programacion de alto nivel, asi como realizar respaldos y recuperacion de copias de datos con la debida seguridad en el acceso a las bases de datos.

Pagina 1

PRACTICA # 1. PREPARACIN DEL ENTORNO OPERATIVONo. de prctica: 01 Nombre: Objetivo: Preparacin del entorno operativo Verificar que el equipo de cmputo a utilizar posea las caractersiticas operativas necesarias para alojar el SGBD PostgreSQL.

Un sistema gestor de bases de datos (SGBD), es un conjunto de programas Introduccin: que se ejecutan sobre una plataforma o sistema operativo previamente instalado. Adems de ste software bsico, el equipo debe poseer caractersticas fsicas suficientes para alojar y ejecutar eficiente y seguramente las diversas piezas de software que componen el SGBD. Por regla general, los SGBD actuales se dice que son multiplataforma, es decir, la base de datos implementada sobre un sistema operativo particular puede interactuar con equipos que corren en otros sistemas operativos. Por ejemplo, una base de datos implementada en Unix puede manipularse en equipos que corren en Windows o Solaris a travs de interaces de software correctamente programadas. Para fines de ste manual de prcticas, consideraremos el sistema operativo Windows (XP o Vista) como la plataforma de implementacin para las bases de datos que se implementarn. Dentro de una amplia gama de SBGD, que va desde MicroSoft Access hasta Oracle, se opt por seleccionar el Postgres Studio. Deber usarse la versin o release ms actualizada a la fecha de preparacin de los equipos a usar para utilizar este manual de prcticas. Como sabemos, el diseo de bases de datos normalmente se hace bajo el modelo relacional; sin embargo, las metodologas han evolucionadon tremendamente, pasando por el diseo orientado a objetos, la programacin basada en patrones y frameworks. En este sentido el Postgres Studio que usa el PostgreSQL, permite implementar las bases de datos bajo la metodologa de orientacin a objetos, razn por la cual fue seleccionado. Ahora bien. Qu es PostgreSQL? Es un sistema de gestin de bases de datos objeto-relacional (SGBDOR) de tipo open-source basado en PostGres versin 4.1, desarrollado en la Universidad de California en el Departamento de Ciencias de la Computacin de Berkeley. Reconoce una gran parte del SQL standard y ofrece muchas caractersticas modernas como: queries (consultas) complejas, llaves forneas, disparadores, vistas, integridad transaccional, control de concurrencia multiversin y posibilidades de expansin permitiendo la agregacin de nuevos tipos de datos, funciones, operadores, funciones agregadas, mtodos de indizacin y lenguajes procedimentales. Y como es de licencia libre, PostgreSQL se puede usar, modificar y distribuir gratuitamente, libre de cargos para cualquier propsito, que puede ser privado, comercial o acadmico. Incluye las siguientes caractersticas funcionales: - Plataformas soportadas: Linux x86/32 , Linux x86/64, Windows, Solaris, SPARC - Cumplimiento de la norma ACID completa - Vistas - Tipos de datos definidos por el usuario - Restricciones ANSI - Indices funcionales - Indices parciales - Particionamiento de datos e ndices

Pagina 2

PRACTICA # 1. PREPARACIN DEL ENTORNO OPERATIVOIndices de bitmaps Llaves primarias y forneas Mquina de reglas Herencia Triggers y funciones almacenadas Transacciones anidadas Soporte de lenguajes procedimentales Soporte SQL/XML Control de concurrencia Multi-versin (MVCC) Bsqueda de texto completa PostgreSQL database links Autenticacin pluggable Improved heap-only tuples (HOT) Consola de administracin GUI (pgAdmin) Point-in-time recovery (PITR) Reorganizacin de ndices en lnea Respaldo en lnea Terminal interactiva SQL Conectores cliente: libpq, ECPG, JDBC, ODBC, .net Asynchronous pre-fetch para RAID: ndices bitmap Soporte para lenguajes de programacin: PL/pgSQL, PL/Java, PL/Ruby, PL/Python, PL/PHP, PL/Perl, C/C++, PL/Tcl, PL/Scheme

Dependiendo del alcance del sistema de bases de datos a implementar PostgreSQL ofrece muchas ms caractersticas en sus paquetes Postgres Plus Standard Server y Postgres Plus Advanced Server. Los requerimientos fsicos necesarios para instalar y operar el PostgreSQL son: - Memoria Ram: 2 GB mnimo, se recomienda 4 GB o ms. - Disco duro: 2 GB libres para albergar el SGBD y 20 GB para los datos de prctica. - Tarjeta de red. - Conexin a internet - Sistema operativo Windows XP o Vista instalado. Especificar en cada prctica la correlacin con l o los temas y subtemas del programa de estudio vigente: Tema 1: Subtema 1.3: Gestor de bases de datos Instalacin y configuracin del entorno operativo.

Material y equipo usado: Equipo de cmputo personal o Laptop con sistema operativo Windows XP o Vista. Metodologa: 1. Encender el equipo de cmputo. 2. Con el explorador de Windows verificar las caractersticas fsicas del equipo. 3. Verificar que no exista un usuario con el nombre de enterprisedb En caso de que si enterprisedb. exista, brrelo con la orden: net user enterprisedb /deleted desde la lnea de comandos. 4. Desde el panel de control, con las herramientas administrativas, crear un punto de restauracin del sistema como precaucin por si la instalacin muestra errores. Esto permitir regresar el sistema a un estado previo a la instalacin de PostgreSQL.

Pagina 3

PRACTICA # 1. PREPARACIN DEL ENTORNO OPERATIVO5. Verificar contra las especificaciones mnimas de funcionamiento del gestor de bases de datos a instalar. Sugerencias didcticas: Leer el documento 02 1 Which Postgres is Right For Me.pdf que se encuentra en el CD de soporte, para abundar el conocimiento sobre los diferentes tipos de PostgreSQL que existen. Investigar en internet acerca del Proyecto Postgres de Berkeley (The Berkeley POSTGRES Project) para conocer la filosofa de este SGBD. Puede hojear el archivo 04 1 postgresql8.4.3-US, manual.pdf que se encuentra en el CD de soporte. Crear puntos de restauracin del sistema, instalar programas, restaurar el sistema al punto de restauracin previo a la instalacin de los programas y verificar el estado del equipo.

-

-

(resultados): Reporte del alumno (resultados): 1. Elaborar un check-list de las caractersticas del sistema operativo en funcionamiento. 2. Elaborar un documento que describa las adecuaciones necesarias del sistema operativo y hardware del equipo que deban hacerse en caso necesario. 3. Elaborar un resumen que describa las diferencias entre el PostgreSQL, PostgreSQL Plus Standard Server y PostgreSQL Plus Advanced Server. Bibliografa preliminar: 1. 02 1 Which Postgres is Right For Me.pdf 2. 04 1 postgresql-8.4.3-US, manual.pdf 3.http://www.enterprisedb.com/learning/documentation.do

Pagina 4

GESTOR PRACTICA # 2. INSTALACIN DEL GESTOR DE BASES DE DATOSNo. de prctica: 02 Nombre: Objetivo: Instalacin del gestor de bases de datos Instalar en el equipo de cmputo el software SGBD PostgreSQL.

Todo paquete de software es desarrollado, documentado y soportado por una Introduccin: organizacin empresarial. Esta organizacin ofrece a sus clientes las versiones binarias del software, la documentacin pertinente, entrenamiento, capacitacin y soporte tcnico. Para el caso de PostgreSQl, el software en si es gratuito, no as los servicios que ofrece la organizacin que lo pone a disposicin. EnterpriseDb es la organizacin de la que podemos obtener una copia legal de PostgreSQL, adems de la documentacin bsica para su operacin. Una vez instalado el software, podemos hacer uso de l mediante una interface apropiada o incrustndolo en aplicaciones de programacin hechas por el usuario, usando lenguajes de programacin como C++, Java, PHP, Python, entre otros. Asi que lo primero que tenemos que hacer es tener a la mano una copia del software a instalar. El archivo binario para Windows que instalaremos es: pgplus-advsvr -windows_830112.exe que se pgplus-advsvrencuentra en el CD de soporte a este manual o si se desea, se puede accesar a la pgina de EnterpriseDB y descargar el producto y versin que se desee:http://www.enterprisedb.com/products/download.do

la pgina se ve as:

Pagina 5

GESTOR PRACTICA # 2. INSTALACIN DEL GESTOR DE BASES DE DATOSPlataformas calificadas Postgres Plus Advanced Server Postgres Plus Advanced Server 8.3 R2 SP1 (8.3.0.112) fue probado y calificado sobre las siguientes plataformas, tanto en 32-bit como en 64-bit. Windows 2000, 2003 Windows XP Windows Vista Windows 7 Este producto ha sido certificado en las siguientes localidades: en_US Ingls de Estados Unidos zh_HK Chino tradicional con Hong Kong SCS zh_TW Chino tradicional para Taiwan zh_CN Chino simplificado ja_JP Japons euc_KR Coreano en Especificar en cada prctica la correlacin con l o los temas y subtemas del programa de estudio vigente: Tema 1: Subtema 1.3: Gestor de bases de datos Instalacin y configuracin del entorno operativo.

Material y equipo usado: Equipo de cmputo personal o Laptop con sistema operativo Windows XP o Vista. Metodologa: 1. Instalacin de Postgres Plus Advanced Server con el Graphical Installer a. Descargar o ubicar el archivo de instalacin. b. Cllick derecho sobre el icono del archivo, seleccionar 'Extract All...' desde el pop-up menu. c. Usar el Windows Extraction Wizard para extraer el programa de instalacin. d. Doble click sobre el folder extrado (pgplus-advsvr-windows_830112) para abrir el archivo en una ventana de administrador de archivos. e. El folder contiene los iconos de Postgres Plus Advanced Server y de README_FIRST_Windows. f. Doble click sobre el icono de pgplus-advsvr-windows_830112 para iniciar el Installation Wizard. g. Obedecer los dilogos en pantalla para completar la instalacin de Postgres Plus Advanced Server. h. El nombre del usuario ser: enterprisedb y el password: masterkey masterkey. Nota: Al finalizar la instalacin, se conectar automticamente a internet para realizar actualizaciones al server. 2. Instalacin de Postgres Plus Advanced Server en la Lnea de Comandos a. Descargar o ubicar el archivo de instalacin. b. Cllick derecho sobre el icono del archivo, seleccionar 'Extract All...' desde el pop-up menu.

Pagina 6

GESTOR PRACTICA # 2. INSTALACIN DEL GESTOR DE BASES DE DATOSc. Usar el Windows Extraction Wizard para extraer el programa de instalacin. d. Abrir una ventana MsDos y navegar hasta el directorio que contiene el archivo de instalacin. C:\> pgplus-advsvr-windows_830112.exe -console e. El script de instalacin te guiar a travs del proceso de instalacin de Postgres Plus Advanced Server. f. El nombre del usuario ser: enterprisedb y el password: masterkey masterkey. key Para los usuarios de Windows Vista Si se est trabajando con el User Account Control (UAC) activado, debern invocarse privilegios de Administrador para poder ejecutar las opciones Start Database, Stop Database y Restart Database del men de Aplicacin. Para ejecutar estas opciones, d click derecho sobre el item del men y seleccione la opcin Run as administrator. En windows Vista Home o Premiun, se debe desactivar el UAC y luego ejecutar en la lnea de comandos la siguiente orden: net User Administrador /active:Yes Esto es importante dado que la instalacion en Vista se debe hacer con el Usuario Administrador. 3. Desinstalacin de Postgres Plus Advanced Server a. Desinstar el software desde el Panel de Control b. Borrar la cuenta enterprisedb desde la lnea de comandos con la orden: net user enterprisedb /deleted Sugerencias didcticas: Leer acerca de la orden net user de la lnea de comandos, resulta til para la manipulacin de cuentas de usuario. La razn para adquirir habilidad en su manejo es porque al reinstalar el PostgreSQL con la misma cuenta de usuario (enterprisedb) y esta cuenta sigue activa en Windows, la instalacin abortar y emitir el mensaje correspondiente. Sera conveniente crear cuentas de usuario y manipularlas y eliminarlas mediante la orden net user.

(resultados): Reporte del alumno (resultados): 1. Al iniciar la instalacin de PostgreSQL Plus Advanced Server, se obtiene el aviso:

Pagina 7

GESTOR PRACTICA # 2. INSTALACIN DEL GESTOR DE BASES DE DATOS2. Al finalizar la instalacin de PostgreSQL Plus Advanced Server, se obtiene el aviso:

3. Al enlazarse a internet para actualizar el software instalado aparecer:

4. Al dar click en Download & Apply y terminar la actualizacin, el aviso es:

Bibliografa preliminar:1. http://wiki.postgresql.org/wiki/Instalacin_interactiva_en_Windows

Pagina 8

PRACTICA # 3. RECONOCIMIENTO DEL ENTORNO OPERATIVO DEL GESTOR DE BASES DE DATOSNo. de prctica: 03 Nombre: Objetivo: Reconocimiento del entorno operativo del gestor de bases de datos. Conocer y manejar la GUI de PostgreSQL: pgAdmin para la gestin intuitiva de bases de datos.

Introduccin: El SGBD es un software que corre en un segundo plano (background), por lo Introduccin: que se necesita de una interface (foreground) para utilizarlo. En otras palabras, el usuario necesita de un programa que realice las conexiones necesarias con el gestor de bases de datos y permita la edicin de instrucciones de SQL para crear, eliminar y manipular bases de datos, adems de que sea de forma intuitiva y fcil. El SGBD PostgreSQL incluye la GUI (Graphics User Interface) pgAdmin que fungir como enlace entre el implementador y l para la gestin sencilla y efectiva de bases de datos. La pantalla principal del pgAdmin tiene el siguiente diseo:

En esta pantalla se despliega la estructura de las bases de datos. Se pueden crear nuevos objetos, asi como borrar y editar objetos ya existentes si el usuario conectado posee los privilegios suficientes para hacerlo. En el lado izquierdo (object browser) se muestra un rbol con todos los servidores y sus objetos. En el lado superior derecho se muestran los detalles del objeto actualmente seleccionado en el rbol. Algunos objetos podran tener estadsticas en adicin a sus propiedades, las cuales se mostrarn al seleccionar la pestaa statistics. El lado inferior derecho presenta en ingeniera inversa, scripts SQL del objeto seleccionado en el rbol. Se pueden copiar a cualquier editor mediante cut&paste o almacenarlos en un archivo usando la opcin Save definition del men File, o bien, usarlos como patrones si se selecciona Query Tool. Si est seleccionada la opcin Copy SQL, el query se copiar automticamente a la herramienta.Pagina 9

PRACTICA # 3. RECONOCIMIENTO DEL ENTORNO OPERATIVO DEL GESTOR DE BASES DE DATOSLa lnea del fondo o lnea de estado mostrar alguna informacin pertinente, as como el tiempo que pgAdmin se tard en completar la ltima accin. Se puede cambiar el tamao de la ventana principal y de los paneles que la componen segn el gusto del usuario. Estos cambios se preservarn al salir del pgAdmin. El estado de los objetos en el object browser se refrescan solo por demanda o despus de hacerles cambios con las herramientas internas del programa. - La ventana principal muestra la estructura de las bases de datos y los detalles de sus objetos. - Opciones del men File: - Save Definition permite almacenar en un archivo scripts SQL. - Usar la opcin Add server.. o el botn en la barra de herramientas para agregar una nueva conexin de base de datos a pgAdmin. - Con Change password se puede cambiar la contrasea del usuario actualmente conectado con la base de datos seleccionada. - El dilogo Options permitir configurar el programa pgAdmin. - Exit, termina la sesin y cierra el programa. - Opciones del men Tools: - Control server permite controlar el estado de los servidores de bases de datos, iniciarlos y detenerlos. - Query Tool permite la ejecucin arbitraria de rdenes SQL. - Debugger permite la depuracin de funciones y procedimientos almacenados de pl/sql y edb-spl.. - Export Tool permite exportar datos desde Query Tool. - Edit Grid permite ver y editar datos en una tabla o vista seleccionada. - La herramienta de Maintenance ejecuta la tarea de reconstruir las estadsticas de las bases de datos y sus tablas, eliminar renglones de datos no usados y reorganizar ndices. - La herramienta Backup llama a la herramienta de vaciado de PostgreSQL para crear archivos de respaldo de los datos. - La herramienta Restore llama a la herramienta de restauracin de datos de PostgreSQL para recuperar datos desde archivos backup. - Grant Wizard permite la asignacin de privilegios de grupo o usuario sobre muchos objetos a la vez. - Report Tool genera reportes simples de datos y objetos de la base de datos. - La ventana Server status mostrar los usuarios actualmente conectados, sus seguros y la bitcora del servidor de la base de datos seleccionada. - Guru Hints ayuda a perfeccionar la base de datos. - Command Line Options permite iniciar pgAdmin en el modo mss conveniente. Al editar las propiedades de un objeto de bases de datos y se presiona la tecla F1, pgAdmin proporcionar la ayuda pertinente acerca de las rdenes SQL de PostgreSQL seleccionadas. Para que esto trabaje bien, el nombre del sitio de ayuda en el dilogo de opciones deber estar especificado correctamente. Para manipular las tablas de una base de datos mediante instrucciones SQL, se usa la herramienta Query Tool, que tiene las siguientes propiedades:

Pagina 10

PRACTICA # 3. RECONOCIMIENTO DEL ENTORNO OPERATIVO DEL GESTOR DE BASES DE DATOS

La parte superior es la ventana de entrada, donde se escribirn y editarn las instrucciones SQL. Se puede leer un query desde un archivo, o se puede escribir el query a un archivo. La ventana de entrada tiene la opcin de autocompletar para auxiliar en la escritura de queries. Para usar esta utilidad, al ir escribiendo se pulsa la combinacin Control+Espacio para ver una lista de posibles nombres de objetos a insertar. Para ejecutar el query, seleccionar la opcin Execute del men Query, presionar la botn de ejecutar de la barra de herramientas o presionar la tecla F5. Si no se tiene seleccionada una palabra, el contenido completo de la ventana se enviar al servidor de la base de datos, quien se encargar de ejecutarlo. Esto quiere decir, que se puede ejecutar solo una parte del texto, seleccionndolo y ejecutandolo. Si en lugar de pulsar F5, se pulsa F7, la instruccin se ejecutar presentando los resultados en la pestaa Output Data, y dibujando un diagrama explicativo en la pestaa Explain del Output Pane. programa Especificar en cada prctica la correlacin con l o los temas y subtemas del pro grama de estudio vigente: Tema 1: Subtema 1.2: Subtema 1.3: Gestor de bases de datos. Herramientas. Instalacin y configuracin del entorno operativo.

Material y equipo usado: Equipo de cmputo personal o Laptop con sistema operativo Windows XP o Vista. SGBD PostgreSQL instalado.

Pagina 11

PRACTICA # 3. RECONOCIMIENTO DEL ENTORNO OPERATIVO DEL GESTOR DE BASES DE DATOSMetodologa: 1. Ejecutar el programa Postgres Studio. a. Seleccionar Inicio | Programas | Postgres Plus Advanced Server 8.3r2 | Postgres Studio

b. Seleccionar desde el escritorio el icono 2. Navegar y explorar las partes que forman el pgAdmin. 3. Seleccionar del arbol en Servers, Advanced Server 8.3R2 (localhost:5432) a. Entrar con el usuario enterprisedb y el password masterkey. b. Abrir la base de datos postgres, ir a schemas, public, tables y emp. 1. Navegar por la interface, ir a Query Tools y probar alguna instruccin Select. Sugerencias didcticas: El alumno est obligado a leer ntegramente el documento 03 4 Using PGAdmin III.pdf que se encuentra en el CD de soporte, para conocer al detalle el contenido completo de la interface pgAdmin III.

Reporte (resultados): Rep orte del alumno (resultados): 1. Elaborar un resumen de la navegacin que realiz en pgAdmin. 2. Elaborar un reporte de mensajes y las acciones tomadas para resolver los problemas que se pudieron presentar. Bibliografa preliminar: 1. Documento 03 4 Using PGAdmin III.pdf ubicado en el CD de soporte. 2.http://www.enterprisedb.com/docs/en/8.3/pgadmin/

Using pgAdmin III

Pagina 12

PRACTICA # 4. CREACIN DE BASES DE DATOS Y ESQUEMASNo. de prctica: 04 Nombre: Objetivo: Creacin de bases de datos y esquemas. Mediante el pgAdmin, aprender el procedimiento para crear bases de datos y sus tablas usando el SGBD PostgreSQL.

Las bases de datos han existido desde los Sumerios y los Egipcios, quienes Introduccin: utilizaron escritura cuneiforme y jeroglficos para registrar sus cuentas en una forma que pudieran preservarse y reexaminarse posteriormente [Diamond 1997]. Esa es la esencia de una base de datos: ser un mecanismo de almacenamiento de informacin razonablemente permanente y accesible. Los sistemas de gestin de bases de datos con sus interfaces grficas y herramientas, han hecho posible que las bases de datos actuales sean prcticamente entes vivos en las manos de los usuarios, aunque en realidad no sean ms que colecciones abstractas de bits organizadas alrededor de estructuras de datos, operaciones y restricciones. Todos estos elementos se agrupan en un espacio compacto denominado esquema (schema), en PostgreSQL las bases de datos se crean en un servidor, cada base de datos puede tener tantos esquemas como sea necesario. Por razones prcticas, se crea el schema por default Public, en el cual agregaremos las tablas, los dominios, los triggers y otros elementos que formarn nuestra base de datos. Para crear una base de datos, usaremos el pgAdmin y para agregar sus elementos usaremos tambin el pgAdmin con sus cuadros de dilogo o a travs de la herramienta Query Tool, escribimos y ejecutamos scripts de SQL. Un elemento muy importante al crear una tabla es el tipo de datos de cada atributo, el cual establece el dominio de los valores a almacenar. PostgreSQL tiene un rico conjunto de tipos de datos nativo disponible para los usuarios. stos pueden agregar nuevos tipos a PostgreSQL usando la instruccin CREATE TYPE. La siguiente tabla muestra todos los tipos de datos de propsito general reconocidos por PostgreSQL. Muchos de los nombres alternativos listados en la columna Alias son los usados internamente por PostgreSQL por razones histricas. En adicin, algunos tipos usados internamente o deprecados estn an disponibles, pero no aparecen en la tabla. Tabla Tipos de DatosAlias int8 signed serial8 varbit bool Descripc Descripcin entero de ocho-bytes entero de ocho-bytes autoincrementable string de bits de longitud fija string de bits de longitud variable Boolean lgico (true/false) caja rectangular sobre un plano datos binarios (byte array) cadena de caracteres de longitud variable cadena de caracteres de longitud fija IPv4 o IPv6 network address crculo sobre un plano fecha de calendario (ao, mes, da) nmero de punto flotante de doble precisin (8 bytes) Nombre bigint bigserial bit [ (n) ] bit varying [ (n) ] boolean box bytea character varying [ (n)] character [ (n) ] cidr circle date double precision

varchar [ (n) ] char [ (n) ]

float8

Pagina 13

PRACTICA # 4. CREACIN DE BASES DE DATOS Y ESQUEMASNombre inet integer interval [ fields ] [ (p)] line lseg macaddr money numeric [ (p, s) ] path point polygon real smallint serial text time [ (p) ] [ without time zone ] time [ (p) ] with time zone timestamp [ (p) ] [without time zone] timestamp [ (p) ] with time zone tsquery tsvector txid_snapshot uuid xml Alias int, int4 Descripc Descripcin IPv4 o IPv6 host address entero signado de cuatro-bytes intervalo de tiempo lnea infinita sobre un plano segmento de lnea sobre un plano MAC (Media Access Control) address cantidad monetaria numrico exacto de precisin seleccionable trayectoria geomtrica sobre un plano punto geomtrico sobre un plano trayectoria geomtrica cerrada sobre un plano nmero de punto flotante de precicin sencilla (4 bytes) entero signado de dos-bytes entero de cuatro-bytes autoincrementable cadena de caracteres de longitud variable hora (sin zona horaria) hora, incluyendo zona horaria fecha y hora (sin zona horaria) fecha y hora, incluyendo zona horaria query de bsqueda de texto documento de bsqueda de texto user-level transaction ID snapshot identificador universalmente nico datos XML

decimal [ (p, s) ]

float4 int2 serial4

timetz timestamptz

-

(Schemas Schemas) Esquemas PostgreSQL (Schemas)

Un cluster de BD de PostgreSQL contiene una o mas BD con nombre. Usuarios y grupos de usuarios son compartidos a travs del cluser entero, pero ningn otro dato se comparte a travs de las BD. Cualquier conexin cliente dada al servidor puede accesar solamente los datos de una sola BD, la especificada en la peticin de conexin. Nota Not a: Los usuarios de un cluster no necesariamente tienen los privilegios para accesar todas las BD en l. Una BD contiene uno o ms esquemas con nombre, los cuales a su vez contienen tablas. Los esquemas tambin contienen otras clases de objetos con nombre, incluyendo tipos de datos, funciones y operadores. El mismo nombre de objeto puede usarse sin conflicto en esquemas diferentes; por ejemplo, en los esquemas public y miesquema podemos crear la tabla persona y usarla sin ningn problema. Un usuario puede accesar objetos en cualquier esquema en la BD en la que est conectado, siempre y cuando tenga los privilegios para hacerlo. Algunas de las razones para usar estos esquemas son: Permitir que muchos usuarios usen una BD sin interferirse unos con otros. Organizar objetos de BD en grupos lgicos para hacerlos ms administrables. Poner aplicaciones de terceras partes en esquemas separados para que no se colisionen con los nombres de otros objetos.

Los esquemas son como los directorios en el SO, excepto que no pueden anidarse.

Pagina 14

PRACTICA # 4. CREACIN DE BASES DE DATOS Y ESQUEMASSe usa la instruccin CREATE SCHEMA para crear un esquema con el nombre apropiado. Por ejemplo: CREATE SCHEMA myschema; Para crear o accesar objetos en un esquema, se debe escribir un nombre calificado, consistiendo del nombre del esquema y el de la tabla, separado por un punto: schema.table La sintaxis ms general sera: database.schema.table As que para crear una tabla en el nuevo esquema, se usa: CREATE TABLE miesquema.mitabla ( ... ); Para eliminar (drop) un esquema si est vaco, usar: DROP SCHEMA miesquema; Si no est vaco se usa: DROP SCHEMA miesquema CASCADE; Los esquemas cuyo nombre inician con pg_ son reservados para propsitos del sistema y no los pueden crear los usuarios. Si no se especifica el esquema a usar, por default las tablas (y otros objectos) automticamente se colocan en el esquema public. Todas las BD nuevas contienen ese esquema. As, lo siguiente es equivalente: CREATE TABLE productos ( ... ); y CREATE TABLE public.productos ( ... ); bsqueda La trayectoria de bsqued a de los esquemas Por razones de comodidad, las tablas son referenciadas mediante sus nombres no calificados; es decir, con solo su nombre. El sistema determina que tablas son las que necesitamos siguiendo una trayectoria de bsqueda, que consiste en una lista de esquemas existentes en la BD conectada. La primer tabla encontrada con el nombre buscado, se convierte en la tabla significativa. En caso de no encontrarse, se reporta un error, an si la tabla existe en otro esquema (obviamente no incluido en la trayectoria de bsqueda). El primer esquema de la lista se conoce como el esquema actual. Adems de ser el primero en ser analizado, es en donde las nuevas tablas se crean si no se especifica un esquema diferente. Para mostrar la trayectoria de bsqueda actual, se usa: SHOW search_path; Por default se regresa: "$user",public El primer elemento especifica que un esquema con el mismo nombre que el usuario conectado va a ser buscado. Si tal esquema no existe, se ignora. El segundo elemento se refiere al esquema public. Como esta es la configuracin inicial, todos los objetos de nueva creacin en la BD se crean en el esquema public. Cuando los objetos son referenciados en algn otro contexto sin la calificacin del nombre del esquema (modificacin de tablas o datos, requisiciones de datos), la trayectoria de bsqueda es recorrida hasta que el objeto buscado se encuentra. Para agregar un esquema a la trayectoria de bsqueda, se usa: SET search_path TO miesquema,public;

Pagina 15

PRACTICA # 4. CREACIN DE BASES DE DATOS Y ESQUEMAS(Se omite el $user porque no lo necesitamos por ahora.) Y entonces podremos acceder a la tabla sin la calificacin del esquema: DROP TABLE mitabla; Adems, como miesquema es el primer elemento en la lista, ahora todos los objetos sin nombre calificado se crearn en l. Si se hubiera escrito: SET search_path TO miesquema; Entonces, el esquema pblico deber accesarse con calificacin de nombre explcita. El esquema public no es especial, solo se crea por default, por lo que se puede borrar (dropped) en el momento que se quiera. La trayectoria de bsqueda de los esquemas trabaja de igual manera con nombres de tipos de datos, de funciones y de operadores. La calificacin de los nombres de tipos de datos y funciones se hace igual que con los nombres de las tablas, no as con los nombres de los operadores, que cuando se requera se debe codificar: OPERATOR(schema.operator) Se hace esto para eliminar ambigedades sintcticas. Por ejemplo: SELECT 3 OPERATOR(pg_catalog.+) 4; Esquemas Privilegio ios Esquemas y Privileg io s Por default, los usuarios no pueden accesar objetos colocados en esquemas que no le pertenecen. Para permitirles el acceso a esos objetos, el propietario del esquema deber garantizar el privilegio USAGE sobre su esquema y los privilegios adicionales sobre los objetos. El privilegio CREATE sobre el esquema, permitir a esos usuarios crear objetos nuevos en esos esquemas. Como puede verse, los privilegios CREATE y USAGE sobre el esquema public, se dan por default a todos y cualquiera de los usuarios. Para quitar privilegios se usa: REVOKE CREATE ON SCHEMA public FROM PUBLIC; (El primer public es el esquema, el segundo public se refiere a cualquier usuario. El primero es un identificador y el segundo es una palabra clave, se ve tambin la utilidad de escribir con maysculas o no. sistem stema El esquema de catlogo del si stem a En adicin a los esquemas public y los creados por el usuario, cada BD tiene un esquema pg_catalog, que contiene las tablas del sistema, los tipos de datos internos, funciones y operadores. pg_catalog est explicitamente incluido en la trayectoria de bsqueda de los esquemas. Esto asegura que todos los objetos internos siempre estn disponibles. Sin embargo, si explcitamente se coloca pg_catalog al final de la lista de esquemas, los nombres de los objetos creados por el usuario pueden sobreescribir a los objetos del sistema (si as fueran programados). Descripcin del ejercicio a implementar Para aprender a crear una base de datos en PostgreSQL, usaremos el siguiente modelo conceptual: Base de datos: Personal Tabla: Persona IDPersona Nombre Sexo

rowid Llave primaria text character[1]

Pagina 16

PRACTICA # 4. CREACIN DE BASES DE DATOS Y ESQUEMASFechaNacimiento Estatura Peso EstadoCivil Comentario date real real character[1] text

Especificar en cada prctica la correlacin con l o los temas y subtemas del programa de estudio vigente: Tema 2: Subtema 2.1: Administracin de bases de datos. Creacin de bases de datos.

Material y equipo usado: Equipo de cmputo personal o Laptop con sistema operativo Windows XP o Vista. SGBD PostgreSQL instalado. Metodologa: Creacin de la base de datos Personal: 1. 2. 3. 4. 5. 6. 7. 8. 9. Ejecutar el pgAdmin. Seleccionar el servidor Advanced Server 8.3R2 (localhost:5432). Entrar con el password masterkey. En el rbol, expandir y seleccionar la entrada Databases. Dar click derecho y seleccionar New Database o ir al men Edit | New Object | New Database. En el cuadro de propiedades escribir: a. Name Personal b. Comment Datos personales Las otras propiedades dejarlas como sugiere PostgreSQL (Owner, Limit Conexions, ,,,) En el cuadro de privilegios, agregar todos los privilegios a este usuario: ALL y agregar. Cerrar el cuadro de dilogo y listo, la base de datos ha sido creada en el servidor seleccionado. Esta base de datos tiene como propietario al usuario enterprisedb. Una vez creada la BD, se pueden cambiar el nombre, el propietario y los comentarios. Para ello se abre el cuadro de dilogo de propiedades y se hacen los cambios. El cuadro se abre dando doble click sobre cualquiera de las propiedades de la BD, con el men Edit | Properties o con el icono correspondiente en la barra de herramientas. Creacin de la tabla Persona usando pgAdmin: 1. 2. 3. 4. Seleccionar la base de datos Personal. Seleccionar Schemas y public. En la entrada Tables dar click derecho y seleccionar New Table. Llenar el cuadro de dilogo con: a. Name Persona b. Has OIDs seleccionar -- cada tupla tendr un identificador interno nico c. Comment Datos de cada persona 5. Agregar cada columna (atributo) de la tabla, pulsando el botn Add y escribiendo los datos correspondientes: Name, Data Type, Not Null, Comment.

Pagina 17

PRACTICA # 4. CREACIN DE BASES DE DATOS Y ESQUEMAS6. En el cuadro Constraints, agregar (Add) la restriccin de llave primaria (primary key), identificar la restriccin como pk_persona, en el cuadro de dilogo Columns, seleccionar la columna IDPersona. 7. Pulsar el botn OK y listo, la tabla Persona se agreg a la BD Personal. Creacin de la tabla Persona usando un script en SQL: Seleccionar la base de datos Personal. Seleccionar Schemas y public. Seleccionar la entrada Tables. Abrir la herramienta Query Tool, en el men Tools | Query Tool, pulsando CTRL + E o el icono correspondiente en la barra de herramientas. 5. Escribir el script en la ventana de edicin o leerlo si se hizo previamente.CREATE TABLE Persona ( IDPersona rowid NOT NULL, Nombre text NOT NULL, Sexo character(1) NOT NULL, FechaNacimiento date NOT NULL, Estatura real NOT NULL, Peso real NOT NULL, EstadoCivil character(1) NOT NULL, Comentario text, CONSTRAINT pk_persona PRIMARY KEY (IDPersona) )

1. 2. 3. 4.

6. Ejecutar el script y cerrar Query Tool. 7. En el rbol, seleccionar Tables, dar click derecho y Refresh para visualizar la nueva entrada. Sugerencias Sug erencias didcticas: Ver el video How To Create A Postgres Database Using pgAdmin.Avi que se encuentra en el CD de soporte o en la direccin de internet:http://www.enterprisedb.com/learning/videos/Create_Postgres_Database_pgAdmin.do.

-

Ver el video Video Demo PostgreSQL PgAdmin.Avi que se encuentra en el CD de soporte. Usando pgAdmin, agregar la siguiente tabla: Base de datos: Personal Tabla: Direccion IDDireccion Calle Colonia Localizacion Ciudad Estado CodigoPostal Comentario

rowid Llave primaria text text point text text integer text

Pagina 18

PRACTICA # 4. CREACIN DE BASES DE DATOS Y ESQUEMASUsando Query Tool, elaborar el script para agregar la siguiente tabla: Base de datos: Personal Tabla: Role IDRole Descripcion FechaInicio Base de datos: Personal Tabla: OrganizacionCriminal Nombre EstadoLegal Estabilidad PrioridadInvestigacion EstadoProsecucion (resultados): Reporte del alumno (resultados): 1. Al terminar de crear la tabla Persona, deber obtener una pantalla como la siguiente:

rowid Llave primaria text date

Usando Query Tool, elaborar el script para agregar la siguiente tabla:

text text box text text

Llave primaria

2. De la misma manera presentar las pantallas correspondientes a las tablas Direccion, Role y OrganizacionCriminal.

Pagina 19

PRACTICA # 4. CREACIN DE BASES DE DATOS Y ESQUEMASBibliografa preliminar: 1. Muller, Robert J. Database Design for Smarties : using UML for data modeling Morgan Kaufmann Publishers ISBN 1-55860-515-0 2. Elmasri, Ramez., Navathe, Shamkant B. Sistemas de Bases de datos. Conceptos fundamentales Addison Wesley Iberoamericana, S.A. ISBN 968-444-399-4 3. Documento 04 1 postgresql-8.4.3-US, manual.pdf que se encuentra en el CD de soporte.

Pagina 20

PRACTICA # 5. USO DE LA INTEGRIDADNo. de prctica: 05 Nombre: Objetivo: Uso de la integridad. Agregar a las tablas de la base de datos las restricciones necesarias que permitan asegurar la integridad de llave primaria, de llave fornea y de datos.

La integridad de datos se refiere al estado de correccin y completitud de los Introduccin: datos ingresados en una base de datos. Los SGBD relacionales deben encargarse de mantener la integridad de los datos almacenados con respecto a las reglas predefinidas o restricciones (constraints). La integridad tambin puede verificarse inmediatamente antes del momento de introducir los datos a la base de datos (por ejemplo, en un formulario empleando validacin de datos), aunque esto aumentara la cohesin. Un claro ejemplo de error de integridad es el ingreso de un tipo de dato incorrecto dentro de un campo. Por ejemplo, ingresar un texto cuando se espera un nmero entero. Tambin un error de integridad puede ser la existencia de un valor numrico (id cliente) en la compra de un producto por parte de un cliente que no existe en su correspondiente tabla con ese nmero (integridad referencial). Tambin puede suceder que se elimine una fila padre con dos o ms filas hijos que quedaran "hurfanas".. (integridad referencial). default Valores por d efault Los valores por defaut se pueden asignar a una columna. Cuando se inserta un nuevo rengln y no se especifican valores para algunas de sus columnas, stas se llenarn con sus respectivos valores por default. Si no se especifica un valor por default, ste ser el valor null, el cual representa a un dato desconocido. En la definicin de una tabla, los valores por default se escriben despus del tipo de dato. Por ejemplo: CREATE TABLE products ( product_no integer, name text, price numeric DEFAULT 9.99 ); El valor por default puede se una expresin, la cual se evaluar al insertar el nuevo rengln, no cuando se crea la tabla. Un ejemplo comn sera para una columna de tipo timestamp darle un valor por default CURRENT_TIMESTAMP, para que inserte la hora al momento de insertar el nuevo rengln. Otro ejemplo sera generar un valor serial para cada rengln. En PostgreSQL se hace as: CREATE TABLE products ( product_no integer DEFAULT nextval(products_product_no_seq), ... ); en donde la funcin nextval() proporciona valores sucesivos de una secuencia de objetos. Esta es una prctica tan comn que existe una abreviatura para hacerla:

Pagina 21

PRACTICA # 5. USO DE LA INTEGRIDADCREATE TABLE products ( product_no SERIAL, ... ); (constraints onstraints) Restricciones (constraints) Los tipos de datos son una forma para limitar la clase de datos que pueden almacenarse en una tabla. Sin embargo, para muchas aplicaciones las restricciones que esto proporciona son muy gruesas. Por ejemplo, una columna que contiene el precio de un producto debera probablemente aceptar solo valores positivos. Pero, no existe un tipo de datos standard que acepte solo valores positivos. Otro punto es que se quisiera restringir los datos de una columna con respecto a otras columnas o renglones. Por ejemplo, en una tabla que contiene informacin de productos, solo deber existir un solo rengln para cada nmero de producto. SQL permite definir restricciones sobre columnas y tablas. Las restricciones dan tanto control sobre los datos en las tablas como se desee. Si un usuario intenta almacenar datos en una columna que pudieran violar una restriccin establecida, generara una situacin de error de integridad. Esto aplica an si el valor proviene del valor por default definido para esa columna. Restricciones de tipo Check Son el tipo de restriccin de integridad de datos ms genrica. Permite especificar el valor en cierta columna que satisfar una expresin Booleana (valor true). Por ejemplo, para requerir precios de productos positivos, se usara: CREATE TABLE products ( product_no integer, name text, price numeric CHECK (price > 0) ); Como se puede observar, la definicin de una restriccin se escribe despus del tipo de dato, de la misma forma que las definiciones de los valores por default. Ambas definiciones pueden escribirse en cualquier orden. Una restriccin de integridad de datos consiste de la palabra clave CHECK seguida por una expresin entre parntesis. Deber involucrar la columna a ser restringida para que tenga sentido. Se puede agregar un nombre a la restriccin para clarificar los mensajes de error y permitirnos identificar la restriccin cuando se requiera cambiarla. La sintaxis es: CREATE TABLE products ( product_no integer, name text, price numeric CONSTRAINT positive_price CHECK (price > 0) ); Para especificar el nombre de la restriccin, se usa la palabra clave CONSTRAINT seguida por un identificador y su definicin. En caso de no especificar un nombre especfico, el sistema selecciona un nombre en forma automtica. Una restriccin de tipo check puede hacer referencia a varias columnas de la tabla. Por ejemplo, si queremos almacenar un precio regular y un precio de descuento para un producto, debemos asegurarnos que el precio de descuento sea menor que el precio regular:

Pagina 22

PRACTICA # 5. USO DE LA INTEGRIDADCREATE TABLE products ( product_no integer, name text, price numeric CHECK (price > 0), discounted_price numeric CHECK (discounted_price > 0), CHECK (price > discounted_price) ); Las dos primeras restricciones usan la sintaxis regular. La tercera usa una sintaxis nueva. No est ligada a una columna particular, en vez de eso aparecere como un elemento separado en la lista de columnas separadas por comas. Ambos tipos de definiciones pueden aparecer mezcladas. Se dice que las dos primeras restricciones son restricciones de columna, mientras que la tercera sera una restriccin de tabla, a la que tambin se le puede asignar un identificador. Las restricciones de columna se pueden escribir tambin como restricciones de tabla, mientras que lo contrario no ser posible. El ejemplo anterior se puede escribir como: CREATE TABLE products ( product_no integer, name text, price numeric, CHECK (price > 0), discounted_price numeric, CHECK (discounted_price > 0), CHECK (price > discounted_price) ); o tambin: CREATE TABLE products ( product_no integer, name text, price numeric CHECK (price > 0), discounted_price numeric, CHECK (discounted_price > 0 AND price > discounted_price) ); Es cuestn de gustos. CREATE TABLE products ( product_no integer, name text, price numeric, CHECK (price > 0), discounted_price numeric, CHECK (discounted_price > 0), CONSTRAINT valid_discount CHECK (price > discounted_price) ); Puesto que algunas columnas o expresiones se evaluarn al valor null, podrn generar algunas confusiones. Por lo tanto se recomienda usar la restriccin not null para esa columna. Por ejemplo: CREATE TABLE products ( product_no integer NOT NULL, name text NOT NULL, price numeric );

Pagina 23

PRACTICA # 5. USO DE LA INTEGRIDADPor supuesto que una columna puede tener ms de una restriccin. Solo se escriben una tras otra: CREATE TABLE products ( product_no integer NOT NULL, name text NOT NULL, price numeric NOT NULL CHECK (price > 0) ); El orden no importa. La restriccin NOT NULL tiene su inverso: la restriccin NULL (no existe en el SQL std, se adapt por PostgreSQL para hacerlo compatible con otros sistemas). Sin embargo, a algunos usuarios les gusta porque facilita cambiar la restriccin en un script. Por ejemplo, se pudiera iniciar con: CREATE TABLE products ( product_no integer NULL, name text NULL, price numeric NULL ); y luego insertar la palabra NOT donde se desee. Tip: En muchos diseos de BD la mayora de las columnas deber marcarse como not null. Restricciones Unique Las restricciones Unique aseguran que los datos contenidos en una columna o grupo de columnas es nico con respecto a todos los renglones en la tabla. La sintaxis es: CREATE TABLE products ( product_no integer UNIQUE, name text, price numeric ); cuando se escribe como restriccin de columna, y: CREATE TABLE products ( product_no integer, name text, price numeric, UNIQUE (product_no) ); cuando se escribe como restriccin de tabla. Si una restriccin unique se refiere a un grupo de columnas, stas se escriben separadas por comas: CREATE TABLE example ( a integer, b integer, c integer, UNIQUE (a, c) );

Pagina 24

PRACTICA # 5. USO DE LA INTEGRIDADEsto especifica que la combinacin de valores en las columnas indicadas es nico en toda la tabla, aunque alguna de las columnas no necesitan ser nicas (ordinariamente no lo son). Se puede asignar un nombre de la forma usual: CREATE TABLE products ( product_no integer CONSTRAINT must_be_different UNIQUE, name text, price numeric ); En general, se viola una restriccin unique cuando hay ms de un rengln en la tabla con las columnas incluidas en la restriccin con el mismo valor. Dos valores null no se consideran iguales. Por lo que una columna restringida puede contener el valor null sin generar un error. Restriccin de lllave primaria lave Tcnicamente, una restriccin de llave primaria (primary key) es una combinacin de una restriccin unique y una not null. As, las siguientes dos definiciones de tablas aceptan los mismos datos: CREATE TABLE products ( product_no integer UNIQUE NOT NULL, name text, price numeric ); CREATE TABLE products ( product_no integer PRIMARY KEY, name text, price numeric ); La llave primaria puede considerar ms de una columna, la sintaxis es similar a la de una restriccin unique: CREATE TABLE example ( a integer, b integer, c integer, PRIMARY KEY (a, c) ); Una llave primaria indica que una columna o grupo de columnas pueden usarse como un identificador nico para los renglones en la tabla. (Esta es una consecuencia directa de la definicin de una llave primaria. Note que una restriccin unique por si misma, no provee de un identificador nico porque no excluye los valores null). Una tabla puede tener al menos una llave primaria. (Puede haber cualquier cantidad de restricciones unique o not null, las cuales funcionalmente son la misma cosa, pero solo una puede ser identificada como la llave primaria). La teora de las BD relacionales dicta que todas las tablas deben tener una llave primaria.

Pagina 25

PRACTICA # 5. USO DE LA INTEGRIDADRestriccin de llaves forneas (Foreign Keys)

Una restriccin de llave fornea especifica que los valores en una columna o grupo de columnas, deber coincidir con los valores que aparecen en algn rengln de otra tabla. Se dice que esto mantiene la integridad referencial entre dos tablas relacionadas. Por ejemplo: CREATE TABLE products ( product_no integer PRIMARY KEY, name text, price numeric ); Vamos a suponer que tenemos una tabla que almacena ordenes de esos productos. Queremos asegurarnos que la tabla ordenes solo contenga ordenes de productos que realmente existan. As que definimos una restriccin de llave fornea que haga referencia a la tabla de productos: CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products (product_no), quantity integer ); A partir de ahora ser imposible crear ordenes con entradas en product_no que no aparezcan en la tabla products. Se dice que la tabla orders es la tabla que necesita la referencia a y la tabla products es la tabla referenciada por. Se puede abreviar el script anterior como: CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products, quantity integer ); porque en ausencia de una lista de columnas, la llave primaria de la tabla referenciada se usa como la columna o columnas referenciadas. Una llave fornea puede restringir y referenciar un grupo de columnas. Como es usual, entonces necesita escribirse en la forma de una restriccin de tabla. Por ejemplo: CREATE TABLE t1 ( a integer PRIMARY KEY, b integer, c integer, FOREIGN KEY (b, c) REFERENCES other_table (c1, c2) ); Por supuesto, el nmero y tipo de las columnas restringidas deber coincidir con el nmero y tipo de las columnas referenciadas. Se puede asignar un nombre personalizado a una restriccin de llave fornea, en la forma usual. Una tabla puede contener ms de una restriccin de llave fornea. Esto se usa para implementar las relaciones muchos a muchos entre las tablas. Digamos que se tienen las tablas products y orders, solo que ahora se quiere permitir que una orden contenga posiblemente muchos productos (la estructura previa no lo permite). El script quedara como:

Pagina 26

PRACTICA # 5. USO DE LA INTEGRIDADCREATE TABLE products ( product_no integer PRIMARY KEY, name text, price numeric ); CREATE TABLE orders ( order_id integer PRIMARY KEY, shipping_address text, ... ); CREATE TABLE order_items ( product_no integer REFERENCES products, order_id integer REFERENCES orders, quantity integer, PRIMARY KEY (product_no, order_id) ); Note que la llave primaria se encima con las llaves forneas en la ltima tabla. Sabemos que las llaves forneas no permiten la creacin de ordenes que no se relacionen con algn producto existente. Pero que pasa si se elimina un producto despus de haber creado una orden que lo referenca? SQL permite manejar esto tambin. Intuitivamente, tenemos algunas opciones: No permitir eliminar un producto referenciado Borrar las ordenes tambin Alguna otra?

Para ilustrar esto, vamos a implementar la siguiente poltica en la relacin muchos a muchos del ejemplo previo: cuando alguien desee elminar un producto que est siendo referenciado por una orden (va order_items), lo desactivamos. Si alguien elimina una orden, los elementos de la orden se eliminarn tambin: CREATE TABLE products ( product_no integer PRIMARY KEY, name text, price numeric ); CREATE TABLE orders ( order_id integer PRIMARY KEY, shipping_address text, ... ); CREATE TABLE order_items ( product_no integer REFERENCES products ON DELETE RESTRICT, order_id integer REFERENCES orders ON DELETE CASCADE, quantity integer, PRIMARY KEY (product_no, order_id) );

Pagina 27

PRACTICA # 5. USO DE LA INTEGRIDADEl borrado restrictivo y en cascada son las dos opciones ms comunes. RESTRICT previene la eliminacin de un rengln referenciado. NO ACTION significa que si existe algn rengln que est siendo referenciado cuando se checa la restriccin, se genera un error; siendo ste el comportamiento por default si no se especifica alguna otra cosa. CASCADE especifica que cuando un rengln referenciado se elimina, los renglones de referencia debern ser eliminados automticamente tambin. Hay otras dos opciones ms SET NULL y SET DEFAULT. Esto causa que las columnas de referencia se llenen con null o con valores por default especificados, respectivamente, cuando el rengln referenciado es borrado. Note que esto no excluye la observancia de las restricciones. Por ejemplo, si se especifica una accin SET DEFAULT y el valor no satisface la llave fornea, la operacin fallar. Anlogamente a ON DELETE hay un ON UPDATE que se invoca cuando el valor de una columna referenciada es cambiado. Las acciones posibles son las mismas. Finalmente, se debe mencionar que una llave fornea debe referenciar a columnas que sean o llave primaria o formen parte de una restriccin unique. Agregar nuevas restricciones Para agregar una restriccin, se agrega como restriccin de tabla, la sintaxis es por ejemplo: ALTER TABLE products ADD CHECK (name ); ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no); ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups; Para agregar una restriccin not null, que es una restriccin de tipo columna, se hace: ALTER TABLE products ALTER COLUMN product_no SET NOT NULL; Como la restriccin se checar inmediatamente, los datos de la tabla debern satisfacer la restriccin antes de que pueda agregarse. Esto trabaja de la misma manera para todos los tipos de restricciones excepto para las not null. Para eliminar una restriccin not null, usar: ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL; Recuerde que las restricciones not null no tienen nombre. Cambiar el valor por default de una columna Para cambiar el valor por default de una columna, se usa una instruccin como: ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77; Aqu, el cambio no afecta a los renglones existentes en la tabla, solo cambia el default para futuros INSERT. Para eliminar un valor por default, se usa: ALTER TABLE products ALTER COLUMN price DROP DEFAULT; Esto tiene el mismo efecto que poner el valor por default a null. Como consecuencia, no es un error eliminar un valor por default donde uno no haya sido definido, porque implcitamente es null.

Pagina 28

PRACTICA # 5. USO DE LA INTEGRIDADrestriccin Eliminar una restriccin

Para eliminar una restriccin se necesita conocer su nombre. Si se le dio un nombre en la definicin de la tabla, esto es muy sencillo. De otra manera, el sistema le asign un nombre aleatorio, el cual necesitamos encontrar en la definicin de los objetos de la BD. La instruccin psql \d tablename puede ayudarnos. La instruccin es: ALTER TABLE products DROP CONSTRAINT some_name; Si se est tratando con una restriccin generada con el nombre $2 por ejemplo, hay que escribirlo entre comillas. Agregar CASCADE si se desea eliminar una restriccin que dependa de alguna otra cosa. Por ejemplo, una llave fornea qie depende de una restriccin unique o de llave primaria. Especificar en cada prctica la correlacin con l o los temas y subtemas del programa de estudio vigente: Tema 2: Subtema 2.2: Subsubtema 2.2.1 Administracin de bases de datos. Definicin del esquema de integridad. Validar y verificar integridad de entidad e integridad referencial.

Material y equipo usado: Equipo de cmputo personal o Laptop con sistema operativo Windows XP o Vista. SGBD PostgreSQL instalado. CD de soporte con los scripts a ejecutar. Metodologa: Creacin de la base de datos Integridad: 1. 2. 3. 4. 5. Ejecutar el pgAdmin. Seleccionar el servidor Advanced Server 8.3R2 (localhost:5432). Entrar con el password masterkey. En el rbol, expandir y seleccionar la entrada Databases. Dar click derecho y seleccionar New Database o ir al men Edit | New Object | New Database. 6. En el cuadro de propiedades escribir: a. Name Integridad b. Comment Implementacin de diferentes tipos de integridad 7. Las otras propiedades dejarlas como sugiere PostgreSQL (Owner, Limit Conexions, ,,,) 8. En el cuadro de privilegios, agregar todos los privilegios a este usuario: ALL y agregar. 9. Cerrar el cuadro de dilogo y listo, la base de datos ha sido creada en el servidor seleccionado. 10. Abrir Query Tools (los scripts se encuentran en la carpeta Scripts del CD de soporte). 11. Leer el script P0501 Integridad.sql. 12. Ejecutar el script y observar los mensajes que emite el SGBD. 13. Leer el script P0502 Datos Integridad.sql. 14. Ejecutar el script y anotar los mensajes que emite el SGBD.

Pagina 29

PRACTICA # 5. USO DE LA INTEGRIDADSugerencias didcticas: Usando pgAdmin, agregar la siguiente tabla: Base de datos: Integridad Tabla: Role IDRole rowid Llave primaria Descripcion text FechaInicio date IDOC integer Llave fornea con Org Crim Usando Query Tool, elaborar el script para agregar la siguiente tabla: Base de datos: Integridad Tabla: OrganizacionCriminal IDOC rowid Llave primaria Nombre text EstadoLegal text [Legal,En juicio,Desconocido] Estabilidad text [Alta,Moderada,Inestable] PrioridadInvestigacion text [Intensa,En curso,En pausa] EstadoProsecucion text [Historia,Activa,Sin progreso]

-

(resultados): Reporte del alumno (resultados): 1. Creacin de las tablas.

Pagina 30

PRACTICA # 5. USO DE LA INTEGRIDAD2. Listado de mensajes que emite el SGBD al violar reglas de integridad. Con xito: Query returned successfully: 1 row affected, 10 ms execution time. Con error: ERROR: new row for relation "products04" violates check constraint "positive_price" 3. Listado de acciones correctivas. El error se origin al ejecutar el query: Corrigiendo, quedara:INSERT INTO products04 VALUES (200,'PINZAS DE PUNTA',-10.00); INSERT INTO products04 VALUES (200,'PINZAS DE PUNTA',10.00);

De esta forma el alumno redactar los dems resultados que se obtengan al ejecutar el script. 4. Reporte de la creacin de las tablas Role y OrganizacionCriminal, comentarios personales. Bibliografa preliminar: 1. Muller, Robert J. Database Design for Smarties : using UML for data modeling Morgan Kaufmann Publishers ISBN 1-55860-515-0 2. Elmasri, Ramez., Navathe, Shamkant B. Sistemas de Bases de datos. Conceptos fundamentales Addison Wesley Iberoamericana, S.A. ISBN 968-444-399-4 3. Documento 04 1 postgresql-8.4.3-US, manual.pdf que se encuentra en el CD de soporte.

Pagina 31

PRACTICA # 6. CREACION DE TABLASNo. de prctica: 06 Nombre: Objetivo: Creacin de tablas. Insertar datos en las tablas de una BD para posteriormente manipularlos mediante instrucciones SQL.

Cuando se crea una tabla, solo se crea su esquema; es decir, no contiene Introduccin: datos. As que la siguiente accin es insertar tantos datos como necesitemos. Conceptualmente los datos se insertan un rengln a la vez. Claro que se pueden insertar tantos renglones como deseemos, tomando en consideracin que no puede insertarse menos de un rengln. An si solo se conocen los valores de algunas de las columnas se debe crear un rengln completo. Para crear un nuevo rengln, se usa la instruccin INSERT. Se requiere del nombre de la tabla y los valores de las columnas. Por ejemplo, considere la tabla products: CREATE TABLE products ( product_no integer, name text, price numeric ); El ejemplo de una instruccin para insertar un rengln, ser: INSERT INTO products VALUES (1, Cheese, 9.99); Los valores de los datos se escriben en el orden en el cual aparecen las columnas en la tabla, separados por comas. Usualmente, estos valores sern literales (constantes), pero tambien se permiten expresiones escalares. La sintaxis previa tiene el inconveniente de que se necesita saber el orden de las columnas en la tabla. Para evitar esto se pueden escribir las columnas explcitamente. Por ejemplo, las siguientes instrucciones tienen el mismo efecto:INSERT INTO products (product_no, name, price) VALUES (1, Cheese, 9.99); INSERT INTO products (name, price, product_no) VALUES (Cheese, 9.99, 1);

Muchos usuarios consideran como una buena prctica escribir siempre los nombres de las columnas. Si no se tienen valores para todas las columnas, se pueden omitir algunas de ellas. En este caso, las columnas se llenarn con sus valores por default. Por ejemplo: INSERT INTO products (product_no, name) VALUES (1, Cheese); INSERT INTO products VALUES (1, Cheese); La segunda forma es una extensin de PostgreSQL. Llena las columnas desde la izquierda con tantos valores como se den y el resto lo llena con valores por default. Por claridad, se pueden aceptar valores por default explcitamente, para columnas individuales o para el rengln completo:INSERT INTO products (product_no, name, price) VALUES (1, Cheese, DEFAULT);

INSERT INTO products DEFAULT VALUES;

Pagina 32

PRACTICA # 6. CREACION DE TABLASSe pueden insertar varios renglones en una sola instruccin: INSERT INTO products (product_no, name, price) VALUES (1, Cheese, 9.99), (2, Bread, 1.99), (3, Milk, 2.99); Por default, se encuentra activado el autocommit a on. Esto quiere decir que cada vez que ejecutemos una instruccin INSERT, se aplica un commit para que los datos queden persistentes en la BD. Asi que imaginemos la tremenda sobrecarga que se genera al insertar montones de renglones a una tabla usando INSERT. Tip: Tip Cuando se inserte un lote de datos al mismo tiempo, considere usar la instruccin COPY. No es tan flexible como la orden INSERT, pero es ms eficiente. La siguiente instruccin insertar muchos renglones invocando un solo commit, eliminando la sobrecarga que genera ejecutar cada INSERT. COPY products FROM Ec:\\Productos.txt WITH DELIMITER AS ,; Toma como entrada el archivo Productos.txt, colocado en la raz del disco C:, cada rengln de datos est formado por los valores a insertar colocados de izquierda a derecha segn las columnas y separados por comas. El trmino de un rengn se especifica con la tecla enter. El contenido del archivo Productos.txt se ve de la siguiente manera: 101,AAA,10.00 102,AAB,24.50 103,AAC,14.75 104,AAD,22.00 105,AAE,45.35 El nombre del archivo va entre apstrofos. En Windows se requiere usar el carcter de escape E para que PostgreSQL reconozca el carcter apstrofo. Se debe usar doble slash (\\) para formar el pathname correcto del archivo a leer. En entornos de produccin, los datos se toman del mundo real de acuerdo a las reglas de negocios implantadas. En entornos de programacin y acadmicos, lo conveniente es trabajar con una copia de la BD y generar camas de prueba, lo ms extensas posible tanto en extensin como en variedad de posibles valores que concuerden con los tipos de datos de las columnas creadas. ----------------------------------En esta prctica crearemos dos bases de datos, Personas y Mariposas. Para la BD Personas codificaremos un programa en Java que nos genere 3,375 nombres de personas diferentes, tomando 15 nombres propios, 15 apellidos maternos y 15 apellidos paternos, estos datos generados se pueden procesar posteriormente en una hoja de clculo para afinar su contenido. La generacin de direcciones donde residen las personas y su correlacin con ellas, se la dejamos al alumno. El diagrama UML que muestra el diseo de la BD Personas es:

Pagina 33

PRACTICA # 6. CREACION DE TABLAS

El Script para crear la tabla Persona es P0603 Persona_Crear tabla.sql:CREATE TABLE Persona ( Nombre text Not Null, Sexo text not null check (sexo in ('F','M')), FechaDeNacimiento date not null, FechaDeDefuncion date, Estatura integer not null, Peso integer not null, EstadoCivil text not null check (EstadoCivil in ('S','C','V','D')), Comentario text, CONSTRAINT per_pk PRIMARY KEY (Nombre) );

El siguiente cdigo en Java crea una cama de prueba para la tabla Persona de 3,375 renglones.import java.io.*; import java.util.*; public class P06NombresAleatorios { static String file = "NombresAleatorios.txt"; public static void main (String[] args) throws IOException { PrintWriter out = new PrintWriter(file); int elem = 15; String[] a = {"Artemio", "Albino", "Ausencio","Benito","Bonifacio", "Constantino", "Cirilo", "Celso", "Cutberto", "Danilo", "Donato", "Heriberto", "Ignacio", "Joel", "Leoncio"}; String[] b = {"Arango", "Benitez", "Chavez", "Dolores", "Enriquez", "Hernandez", "Jimenez", "Lopez", "Luria", "Mendez", "Minguer", "Montes", "Nocedal", "Sanchez", "Duarte"}; String[] c = {"Alavez", "Bueno", "Carmona", "Diaz", "Elorza", "Heras","Jacome", "Juarez", "Barrera", "Cervantes", "Miramontes", "Moreno", "Narro", "Zurita", "Garcia"}; String[] ec = {"S", "C", "D", "V"}; String s String fn = ""; = "";

Pagina 34

PRACTICA # 6. CREACION DE TABLASRandom r int eciv int dia, mes, int estat int peso = new Random(); = 0; ao; = 0; // estatura en cm 100 .. 190 = 0; // peso en kg 50 .. 120

for (int i = 0; i fdt.c1)

fdt es la tabla derivada o resultante de la clusula FROM. Los renglones que no cumplan con la condicin de bsqueda se eliminarn de fdt. ----------------------------------Despus de pasar el filtro WHERE, la tabla derivada podria ser sujeta de un agrupamiento usando la clusula GROUP BY y de eliminacin de renglones de grupo usando la clsula HAVING. Por ejemplo, la siguiente instruccin obtiene sumas de renglones agrupados por nombre:=> SELECT x, sum(y) FROM test1 GROUP BY x;

x | sum ---+----a | 4 b | 5 c | 2 (3 rows)

Si queremos filtrar los renglones agrupados, agregamos un filtro con la clusula HAVING, como:=> SELECT x, sum(y) FROM test1 GROUP BY x HAVING sum(y) > 3;

x | sum ---+----a | 4 b | 5 (2 rows)=> SELECT x, sum(y) FROM test1 GROUP BY x HAVING x < c;

x | sum ---+----a | 4 b | 5 (2 rows)

-----------------------------------

Pagina 42

PRACTICA # 7. ACCESO A LA BASE DE DATOSLa expresin de tabla en la orden SELECT construye una tabla virtual intermedia formada posiblemente con tablas combinadas, vistas, renglones eliminados, agrupamiento, etc. Finalmente esta tabla se pasa al procesamiento de lista de seleccin. sta determina que columnas de la tabla intermedia formarn la tabla resultante. El tipo ms simple de una lista de seleccin es * que emite todas las columnas que la expresin de tabla produce. Por ejemplo SELECT a, b, c FROM ... Los nombres de columnas a, b y c son nombres actuales o alias. Si ms de una tabla referenciada tiene una columna con el mismo nombre, debe darse tambin el nombre de la tabla correspondiente: SELECT tbl1.a, tbl2.a, tbl1.b FROM ... Si se usa una expresin de valores arbitraria en la lista de seleccin, conceptualmente se agrega una columna virtual nueva a la tabla resultante. sta expresin se evala una vez por cada rengln. Se pueden asignar etiquetas a los nombres de las columnas o funciones usadas en la lista de seleccin. Por ejemplo: SELECT a AS value, b + c AS sum FROM ... La palabra AS es opcional. Ahora, si se usa una palabra reservada, sta deber escribirse entre comillas. Por ejemplo, VALUE es una palabra reservada, as que la siguiente instruccin no trabajar:SELECT a value, b + c AS sum FROM ...

Pero sta si:

SELECT a "value", b + c AS sum FROM ...

Una vez que la lista de seleccin ha sido evaluada, la tabla resultante puede opcionalmente sujetarse a la eliminacin de renglones duplicados. Para hacerlo se hace: SELECT DISTINCTselect_list ...

Con esta forma, solo el primer rengln de los duplicados se tomar en cuenta. Para determinar el rengln correcto, deber agregarse al query un ordenamiento (ORDER BY ) sobre un nmero suficiente de columnas. El procesamiento de DISTINCT ocurre despus de ORDER BY Los resultados de dos queries se pueden combinar usando las operaciones de conjunto (set) union, intersection y difference. La sintaxis es:query1 UNION [ALL] query2 query1 INTERSECT [ALL] query2 query1 EXCEPT [ALL] query2

las operaciones de conjunto se pueden anidar y encadenar, por ejemplo:query1 UNION query2 UNION query3

la cual se ejecuta como:(query1 UNION query2) UNION query3

UNION agrega el resultado de query2 al resultado de query1. Elimina renglones duplicados a menos que se especifique UNION ALL. INTERSECT regresa todos los renglones coincidentes que resulten de query1 y query2. Se eliminan duplicados a menos que se especifique INTERSECT ALL. EXCEPT regresa todos los renglones que estn en el resultado de query1 pero que no estn en el resultado de query2 (es en realidad una diferencia entre conjuntos de datos). -----------------------------------

Pagina 43

PRACTICA # 7. ACCESO A LA BASE DE DATOSDespus que un query ha producido la tabla de salida, puede ser ordenada (sort). Si no se especifica un ordenamiento, los renglones sern entregados en un orden no especificado. La clusula ORDER BY especifica el ordenamiento que se desea dar a la tabla de salida:SELECT select_list FROM table_expression ORDER BY sort_expression1 [ASC | DESC] [NULLS { FIRST | LAST }] [, sort_expression2 [ASC | DESC] [NULLS { FIRST | LAST }] ...]

NULLS FIRST o LAST sirve para especificar si los renglones con valores null se colocan al principio o al final de la tabla resultante. ASC y DESC son orden ascendente y descendente respectivamente. Son independientes y se aplican a una sola columna a ordenar. As: ORDER BY x, y DESC significa ORDER BY x ASC, y DESC, que no es lo mismo que ORDER BY x DESC, y DESC. Una expresin sort puede tambin ser la etiqueta de la columna o el nmero de la columna de salida:SELECT a + b AS suma, c FROM tabla1 ORDER BY suma; SELECT a, max(b) FROM tabla1 GROUP BY a ORDER BY 1;

----------------------------------LIMIT y OFFSET permiten recuperar solo una porcin de los renglones que son generados por el resto del query:SELECT lista_de_seleccion FROM expresion_de_tabla [ ORDER BY ... ] [ LIMIT { number | ALL } ] [ OFFSET number ]

Limit limita el nmero mximo de renglones de salida al nmero especificado. Offset brinca el nmero de renglones al principio de la tabla de salida al nmero especificado. Se pueden usar ambos en un mismo query. ----------------------------------VALUES proporciona una manera para generar una tabla de constantes que puede usarse en un query sin tener que crear y llenar una tabla en el disco: la sintaxis esVALUES ( expression [, ...] ) [, ...]

Cada lista entre parntesis de expresiones genera un rengln en la tabla. sta deber tener el mismo nmero de elementos del mismo tipo de datos. Por ejemplo:VALUES (1, uno), (2, dos), (3, tres);

Regresar una tabla de dos columnas y tres renglones, equivale a:SELECT 1 AS column1, one AS column2 UNION ALL SELECT 2, two UNION ALL SELECT 3, three;

Por default, PostgreSQL asigna los nombres column1, column2, etc. a las columnas de una tabla VALUES.

Pagina 44

PRACTICA # 7. ACCESO A LA BASE DE DATOSPostgreSQL proporciona en su Query Tool, un Graphical Query Builder (constructor grfico de consultas), el cual puede usarse para generar consultas de manera intuitiva. Si queremos obtener una lista de mariposas, listando los nombres de sus especies y gneros, el procedimiento es: 1. Abrir Query Tool. 2. Ir a la solapa Graphical Query Builder. 3. Abrir el Schema donde se encuentre la BD a consultar (en este caso ser public). 4. Seleccionar con doble click las tablas a usar, en la ventana grfica, arrastrar los iconos de las tablas para colocarlas a gusto. 5. En las tablas, seleccionar las columnas a listar. 6. En la solapa Columns se puede modificar el orden de aparicin de las columnas en la lista de seleccin. 7. Seleccionar la columna de llave fornea de una tabla y arrastrarla sobre el nombre de la columna de la llave primaria de su tabla referenciada para programar el join.

8. Programar un criterio de seleccin si se desea en la solapa Criteria.

9. Programar una secuencia de ordenamiento si se desea en la solapa Ordering.

10. En la solapa Joins se puede modificar el operador de join.

Pagina 45

PRACTICA # 7. ACCESO A LA BASE DE DATOSDe esta manera nuestra consulta quedara as:

Especificar en cada prctica la correlacin con l o los temas y subtemas del programa de estudio vigente: Tema 2: Subtema 2.2: Subsubtema 2.2.1 Administracin de bases de datos. Definicin del esquema de integridad. Validar y verificar integridad de entidad e integridad referencial.

Material y equipo usado: Equipo de cmputo personal o Laptop con sistema operativo Windows XP o Vista. SGBD PostgreSQL instalado. CD de soporte. Metodologa: Preparacin de la base de datos Mariposas: 1. 2. 3. 4. 5. 6. Ejecutar el pgAdmin. Seleccionar el servidor Advanced Server 8.3R2 (localhost:5432). Entrar con el password masterkey. En el rbol, expandir y seleccionar la entrada Databases. Seleccionar la BD Mariposas para conectarla y dejarla lista para su uso. Obtener una lista de todas las mariposas mostrando los nombres de las familias, gneros, especies y mariposas, ordenadas de esa manera.SELECT fnombre, gnombre, enombre, mnombre FROM familia f NATURAL JOIN genero g NATURAL JOIN especie e NATURAL JOIN mariposa m ORDER BY f.fnombre, g.gnombre, e.enombre, m.mnombre;

Pagina 46

PRACTICA # 7. ACCESO A LA BASE DE DATOS7. Acotar la lista previa con mariposas cuyo nombre inicia con la letra E.SELECT fnombre, gnombre, enombre, mnombre FROM familia f NATURAL JOIN genero g NATURAL JOIN especie e NATURAL JOIN mariposa m WHERE m.mnombre LIKE 'E%' ORDER BY f.fnombre, g.gnombre, e.enombre, m.mnombre;

8. Acotar an ms la lista previa con mariposas cuyo nombre de familia tenga una letra P.SELECT fnombre, gnombre, enombre, mnombre FROM familia f NATURAL JOIN genero g NATURAL JOIN especie e NATURAL JOIN mariposa m WHERE m.mnombre LIKE 'E%' AND f.fnombre LIKE '%P%' ORDER BY f.fnombre, g.gnombre, e.enombre, m.mnombre;

9. Obtener el nmero de mariposas cuyo nombre de familia tenga una letra P.SELECT COUNT(*) "Num Mariposas" FROM familia f NATURAL JOIN genero g NATURAL JOIN especie e NATURAL JOIN mariposa m WHERE m.mnombre LIKE 'E%' AND f.fnombre LIKE '%P%';

El anlisis grfico de esta consulta es:

10. Agregar las siguientes mariposas:FAMILIA GNERO ESPECIE MARIPOSA SEXO

PIERIDAE

PHOEBIS PHIERINAE

PHILEA CHIRICAHUA PINE W FLORIDA WHITE SPRING WHITE CHECKED WHITE CABBAGE WHITE GREAT SOUTHERN W HOWARDS WHITE

ORANGE-BARRED SULPHUR NEOPHASIA TERLOOTII APPIAS DRUSILLA POEYI PIERIS SISYMBRII PIERIS PROTODICE PIERIS RAPHAE ASCIA MONUSTE MONUSTE ASCIA HOWARTHI

M M M M M M M M

Insertar los renglones en las tablas correspondientes. 11. Codificar una instruccin SELECT que muestre los renglones insertados.SELECT fnombre, gnombre, enombre, mnombre FROM familia f NATURAL JOIN genero g NATURAL JOIN especie e NATURAL JOIN mariposa m WHERE f.fnombre = 'PIERIDAE' AND g.gnombre LIKE 'PH%' ORDER BY f.fnombre, g.gnombre, e.enombre, m.mnombre;

Pagina 47

PRACTICA # 7. ACCESO A LA BASE DE DATOS12. Modificar el sexo de estos renglones insertados.UPDATE mariposa m SET m.sexo = 'F' WHERE m.enombre IN ( SELECT e.enombre FROM familia f, genero g, especie e WHERE f.fnombre = 'PIERIDAE' AND g.gnombre LIKE 'PH%' AND g.gnombre = e.gnombre);

13. Ejecute de nuevo la consulta del pasoo 11 para verificar que la actualizacin se hizo correctamente. 14. Elimine el gnero PHOEBIS de la familia PIERIDAE. Puesto que las tablas relacionadas se crearon con la clusula ON DELETE CASCADE, no debe presentarse ningn error. 15. Ejecute de nuevo la consulta del paso 11 para verificar que la eliminacin se hizo correctamente. Sugerencias Sugerencias didcticas: Revisar la pgina: http://www.asturnatura.com/familia/pieridae.html para recuperar ms registros de mariposas, los cuales se insertarn en las tablas correspondientes. Codificar una consulta que presente la lista de mariposas recin insertadas.

(resultados): Reporte del alumno (resultados): 1. Listas de resultados de las consultas. Bibliografa preliminar: 1. Muller, Robert J. Database Design for Smarties : using UML for data modeling Morgan Kaufmann Publishers ISBN 1-55860-515-0 2. Elmasri, Ramez., Navathe, Shamkant B. Sistemas de Bases de datos. Conceptos fundamentales Addison Wesley Iberoamericana, S.A. ISBN 968-444-399-4 3. Documento 04 1 postgresql-8.4.3-US, manual.pdf que se encuentra en el CD de soporte.

Pagina 48

PRACTICA # 8. MONITOREO DE BASES DE DATOSNo. de prctica: 08 Nombre: Objetivo: Monitoreo de bases de datos. Revisar las facilidades que presta PostgreSQL para mejorar el comportamiento y mantener un buen performance de la base de datos.

El rendimiento (performance) de un query puede ser afectado por muchas Introduccin: cosas. Algunas de ellas las puede controlar el usuario, mientras que otras estn ligadas al diseo del sistema. PostgreSQL establece un plan de ejecucin para cada query que recibe. Selecciona el plan correcto para hacer coincidir la estructura del query con las propiedades de los datos, lo que es absolutamente crtico para un buen rendimiento; es decir, el DBMS incluye un complejo planeador que intenta todas las veces escoger buenos planes de ejecucin. Para ver el plan que PostgreSQL crea para un query dado, se usa la instruccin EXPLAIN. La estructura de un plan para la ejecucin de un query es un rbol de nodos planos. Los nodos del nivel inferior regresan renglones bsicos de la tabla consultada. Los tipos de nodos de rastreo dependen del mtodo de acceso utilizado, en este sentido entonces, hay rastreos secuenciales, indizados, de bitmaps. Si el query regresa un join, agregacin, ordenamiento u otras operaciones sobre los renglones bsicos, se usarn nodos a un nivel superior para realizar estas operaciones. El resultado que entrega EXPLAIN tiene una lnea para cada nodo en el rbol, mostrando el tipo de nodo bsico ms el costo estimado que hace el planeador para la ejecucin de ese plan. La primer lnea (el nodo superior) tiene el costo total estimado de ejecucin, es el nmero que el planeador busca minimizar. Por ejemplo: EXPLAIN SELECT * FROM mariposa;QUERY PLAN Seq Scan on mariposa (cost=0.00..3.62 rows=162 width=34)

Los nmeros mostrados de izquierda a derecha significan lo siguiente: Costo estimado de arranque (es el tiempo gastado antes de poder iniciar el rastreo de salida, por ejemplo, el tiempo necesario para preparar la ordenacin de los datos). Costo estimado total (en el caso de que se recuperen todos los renglones (aunque podra no ser as, por ejemplo, si se usa una clusula LIMIT, este costo tender a ser menor). Nmero estimado de renglones de salida para este nodo o plan. Ancho promedio estimado en bytes de los renglones de salida para este plan.

Los costos se miden en unidades arbitrarias determinadas por los parmetros de costo del planeador. Hay que notar que el costo de un nodo de nivel superior toma en cuenta los costos de sus subnodos. Los costos solo reflejan cosas que el planeador puede controlar; es decir, el tiempo que se lleva en transmitir los datos a las salidas del usuario son descartadas porque dependen de otros factores. El queryEXPLAIN SELECT f.fnombre, g.gnombre, e.enombre, m.mnombre FROM familia f, genero g, especie e, mariposa m WHERE m.enombre = e.enombre AND e.gnombre = g.gnombre AND g.fnombre = f.fnombre;

Pagina 49

PRACTICA # 8. MONITOREO DE BASES DE DATOSnos entrega los siguiente valores:QUERY PLAN Hash Join (cost=9.76..15.61 rows=162 width=54) Hash Cond: ((m.enombre)::text = (e.enombre)::text) -> Seq Scan on mariposa m (cost=0.00..3.62 rows=162 width=32) -> Hash (cost=8.27..8.27 rows=119 width=31) -> Hash Join (cost=4.44..8.27 rows=119 width=31) Hash Cond: ((e.gnombre)::text = (g.gnombre)::text) -> Seq Scan on especie e (cost=0.00..2.19 rows=119 width=20) -> Hash (cost=3.76..3.76 rows=55 width=21) -> Hash Join (cost=1.45..3.76 rows=55 width=21) Hash Cond: ((g.fnombre)::text = (f.fnombre)::text) -> Seq Scan on genero g (cost=0.00..1.55 rows=55 width=21) -> Hash (cost=1.20..1.20 rows=20 width=11) -> Seq Scan on familia f (cost=0.00..1.20 rows=20 width=11)

y el queryEXPLAIN SELECT f.fnombre, g.gnombre, e.enombre, m.mnombre FROM familia f NATURAL JOIN genero g NATURAL JOIN especie e NATURAL JOIN mariposa m;

nos entregaQUERY PLAN Hash Join (cost=9.76..15.61 rows=162 width=54) Hash Cond: ((m.enombre)::text = (e.enombre)::text) -> Seq Scan on mariposa m (cost=0.00..3.62 rows=162 width=32) -> Hash (cost=8.27..8.27 rows=119 width=31) -> Hash Join (cost=4.44..8.27 rows=119 width=31) Hash Cond: ((e.gnombre)::text = (g.gnombre)::text) -> Seq Scan on especie e (cost=0.00..2.19 rows=119 width=20) -> Hash (cost=3.76..3.76 rows=55 width=21) -> Hash Join (cost=1.45..3.76 rows=55 width=21) Hash Cond: ((g.fnombre)::text = (f.fnombre)::text) -> Seq Scan on genero g (cost=0.00..1.55 rows=55 width=21) -> Hash (cost=1.20..1.20 rows=20 width=11) -> Seq Scan on familia f (cost=0.00..1.20 rows=20 width=11)

que en trminos absolutos son equivalentes, lo que nos lleva a concluir que para sta muestra de datos ambas consultas cuestan lo mismo y no puede mejorarse el rendimiento. Ahora, si le agregamos ORDER BY f.fnombre, g.gnombre, e.enombre, m.mnombre; el costo aumenta a:QUERY PLAN Sort (cost=21.55..21.96 rows=162 width=54) Sort Key: f.fnombre, g.gnombre, e.enombre, m.mnombre -> Hash Join (cost=9.76..15.61 rows=162 width=54)

Usar la instruccin EXPLAIN nos permitir seleccionar el query con menor costro de una serie de queries programados para obtener el mismo resultado.

Pagina 50

PRACTICA # 8. MONITOREO DE BASES DE DATOSEs posible checar la precisin de los costos estimados del planeador usando EXPLAIN ANALYZE. Esta instruccin ejecuta el query y despliega el tiempo real de corrida acumulado dentro de cada plan junto con los mismos costos estimados que muestra un EXPLAIN plano. Por ejemplo:EXPLAIN ANALYZE SELECT f.fnombre, g.gnombre, e.enombre, m.mnombre FROM familia f NATURAL JOIN genero g NATURAL JOIN especie e NATURAL JOIN mariposa m;

Mostrar lo siguiente:QUERY PLAN Hash Join (cost=9.76..15.61 rows=162 width=54) (actual time=1.704..2.661 rows=153 loops=1) Hash Cond: ((m.enombre)::text = (e.enombre)::text) -> Seq Scan on mariposa m (cost=0.00..3.62 rows=162 width=32) (actual time=0.021..0.291 rows=153 loops=1) -> Hash (cost=8.27..8.27 rows=119 width=31) (actual time=1.644..1.644 rows=111 loops=1) -> Hash Join (cost=4.44..8.27 rows=119 width=31) (actual time=0.647..1.343 rows=111 loops=1) Hash Cond: ((e.gnombre)::text = (g.gnombre)::text) -> Seq Scan on especie e (cost=0.00..2.19 rows=119 width=20) (actual time=0.011..0.205 rows=111 loops=1) -> Hash (cost=3.76..3.76 rows=55 width=21) (actual time=0.606..0.606 rows=51 loops=1) -> Hash Join (cost=1.45..3.76 rows=55 width=21) (actual time=0.148..0.468 rows=51 loops=1) Hash Cond: ((g.fnombre)::text = (f.fnombre)::text) -> Seq Scan on genero g (cost=0.00..1.55 rows=55 width=21) (actual time=0.008..0.095 rows=51 loops=1) -> Hash (cost=1.20..1.20 rows=20 width=11) (actual time=0.107..0.107 rows=19 loops=1) -> Seq Scan on familia f (cost=0.00..1.20 rows=20 width=11) (actual time=0.006..0.042 rows=19 loops=1) Total runtime: 3.091 ms

El tiempo de corrida total mostrado por EXPLAIN ANALYZE incluye los tiempos de arranque y terminacin, as como el tiempo gastado al procesar los renglones de resultados. No incluye los tiempos de parsing, reescritura ni planeacin. Para un query SELECT, el tiempo de corrida total normalmente ser ligeramente mayor que el tiempo total reportado por el nodo de ms alto nivel. Para INSERT, UPDATE y DELETE, el tiempo total de corrida ser considerablemente mayor porque incluye el tiempo gastado al procesar los renglones de resultados. Para estas instrucciones, el tiempo para el nodo superior es esencialmente el tiempo gastado al localizar los renglones viejos y/o calcular los nuevos, pero no incluye el tiempo gastado en la aplicacin de los cambios. Si hubiera triggers, el tiempo gastado en ellos se mostrar en forma independiente para cada uno de ellos. El planeador necesita estimar el nmero de renglones recuperados por un query para poder hacer buenos planes. Un componente de estas estadsticas es el nmero total de entradas en cada tabla e ndice, as como tambin el nmero de bloques de disco ocupados por ellos. Esta informacin se mantiene en la tabla pg_class, en las columnas retuples y relpages. Por ejemplo:Pagina 51

PRACTICA # 8. MONITOREO DE BASES DE DATOSSELECT relname, relfilenode, relkind, reltuples, relpages FROM pg_class WHERE relname LIKE 'mariposa%';

Que nos entregara la siguiente informacin:relname mariposa relfilenode 24933 relkind r reltuples 162 relpages 2

Cada pgina en disco mide 8 kilobytes. Este valor llega a ser de gran utilidad para prevenir el costoso error de disco lleno. Una de las tcnicas que nos permitiran mejorar el rendimiento de un query, es usar JOINs explcitos. De las tres instrucciones siguientes, el planeador ejecutar con menor costo las dos ltimas:SELECT * FROM a, b, c WHERE a.id = b.id AND b.ref = c.id; SELECT * FROM a CROSS JOIN b CROSS JOIN c WHERE a.id = b.id AND b.ref = c.id; SELECT * FROM a JOIN (b JOIN c ON (b.ref = c.id)) ON (a.id = b.id);

Aunque como en todo, la prctica intensa nos dar la habilidad para escribir los mejores queries. ----------------------------------Con respecto a la insercin de grandes conjuntos de renglones, la mejor forma es usar la orden COPY, pues ejecuta un solo COMMIT al final del ltimo rengln a insertar. La instruccin INSERT ejecuta un commit por cada rengln agregado, lo cual provoca una enorme sobrecarga en el servidor. Se puede aliviar un poco poniento la variable AUTOCOMMIT en false. Sin embargo no es la mejor forma. Ahora bien, en el caso de que se esten usando ndices, es ms eficiente borrarlos y re-crearlos despus de una insercin masiva de renglones. Es decir, si dejemos que el DBMS actualice los ndices cada vez que se inserta un nuevo rengln, lo estaremos haciendo trabajar en demasa. De igual forma debe hacerse con las restricciones de llaves forneas, lo conveniente es desactivarlas, insertar el montn de renglones nuevos y volver a cargar las llaves forneas para que se re-creen. Para eliminar una restriccin se necesita conocer su nombre. Por eso se recomienda agregar restricciones con un nombre dado por el usuario. La instruccin es:ALTER TABLE miTabla DROP CONSTRAINT nombre_restriccion;

(Si el nombre lo gener el DBMS y se llama $2, no hay que olvidar escribir el nombre entre comillas). Si la restriccion est en una tabla de la que dependen otras, agregar CASCADE; es decir,ALTER TABLE miTabla DROP CONSTRAINT nombre_restriccion CASCADE;

Esta sintaxis trabaja para todos los tipos de restricciones excepto para las not-null. Para este caso usar:ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;

Para agregar una restriccin, la sintaxis es:ALTER TABLE miTabla ADD CHECK (nombre ); ALTER TABLE mi