Академический Документы
Профессиональный Документы
Культура Документы
TRABAJO DE AO SABATICO REPORTE INTERMEDIO DEL 18 DE ENERO D EL 2010 17 DE JULIO DEL 2010
INDICE
CONTENIDO 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
INTRODUCCION
La 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
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
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
(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
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
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
(resultados): Reporte del alumno (resultados): 1. Al iniciar la instalacin de PostgreSQL Plus Advanced Server, se obtiene el aviso:
Pagina 7
Bibliografa preliminar:
1. http://wiki.postgresql.org/wiki/Instalacin_interactiva_en_Windows
Pagina 8
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
Pagina 10
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
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/
Pagina 12
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 Datos
Alias 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
float8
Pagina 13
decimal [ (p, s) ]
timetz timestamptz
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
Pagina 15
Pagina 16
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
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
Llave primaria
2. De la misma manera presentar las pantallas correspondientes a las tablas Direccion, Role y OrganizacionCriminal.
Pagina 19
Pagina 20
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
Pagina 22
Pagina 23
Pagina 24
Pagina 25
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
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
Pagina 28
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
Pagina 30
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
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);
Pagina 32
Pagina 33
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
for (int i = 0; i <= (elem - 1); i++) for (int j = 0; j <= (elem - 1); j++) for (int k = 0; k <= (elem - 1); k++) { dia = r.nextInt(28) + 1; mes = r.nextInt(12) + 1; ao = r.nextInt(31) + 1950; fn = dia + "/" + mes + "/" + ao + ","; estat = r.nextInt(91) + 100; peso = r.nextInt(71) + 50; eciv = r.nextInt(4); s += a[i] + " " + b[j] + " " + c[k] + ",M," + fn + "01/01/1900," + estat + "," + peso + "," + ec[eciv] + ",null"; out.println(s); s = ""; } out.close(); System.out.println("Proceso terminado, " + (elem nombres generados"); } }
* elem
* elem)
"
El archivo de datos creado se copia a la raz del disco C:, para facilitar su bsqueda. Un extracto de este archivo se ve como sigue:
Artemio Artemio Artemio Artemio Artemio Artemio Artemio Artemio Arango Alavez,M,23/10/1977,01/01/1900,127,112,S,null Arango Bueno,M,16/5/1973,01/01/1900,108,105,C,null Arango Carmona,M,20/7/1968,01/01/1900,135,96,S,null Benitez Alavez,M,13/8/1963,01/01/1900,120,50,D,null Benitez Bueno,M,26/6/1966,01/01/1900,148,56,C,null Chavez Garcia,M,12/6/1977,01/01/1900,161,77,S,null Dolores Alavez,M,10/8/1964,01/01/1900,146,65,C,null Dolores Bueno,M,11/3/1976,01/01/1900,106,75,D,null
----------------------------------Para la BD Mariposas, los datos fueron tomados del mundo real usando una muestra de 20 familias. Se tienen los nombres de las familias, gneros, especies y mariposas existentes en todo el mundo. El diagrama UML que muestra el diseo de la BD Mariposas es:
Pagina 35
Los scripts con los datos a insertar no se listan en este espacio por ser muy extensos. 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.
Pagina 36
Pagina 37
(resultados): Reporte del alumno (resultados): 1. Creacin de las tablas. 2. Creacin de las camas de prueba. 3. Un resumen de las actividades realizadas para generar las camas de prueba. 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 38
Actualizacin de datos. La modificacin de los datos existentes en la BD se Introduccin: conoce como actualizacin (updating). Se pueden actualizar renglones individuales, todos los renglones de la BD o un subconjunto de ellos. Cada columna puede ser actualizada separadamente, las restantes no se ven afectadas. Para actualizar los datos se usa la orden UPDATE, que requiere tres piezas de informacin: 1. El nombre de la tabla y columna a actualizar. 2. El nuevo valor de la columna. 3. El rengln o renglones a actualizar. Puesto que SQL en general, no proporciona un identificador nico para los renglones. Por lo tanto no siempre es posible especificar directamente que rengln actualizar. En vez de esto, se deber especificar la condicin que el rengln a actualizar debe cumplir. Solamente si se tiene una llave primaria se pueden direccionar renglones individuales escogiendo una condicin que coincida con esa llave. Por ejemplo, para actualizar todos los productos que tiene un precio de 5 a un nuevo precio de 10, la instruccin es:
UPDATE productos SET precio = 10 WHERE precio = 5;
Esto podra actualizar cero, uno o muchos renglones. No es un error intentar una actualizacin que no tenga renglones coincidentes con la condicin. Como puede verse, la palabra UPDATE es seguida por el nombre de la tabla. Este nombre puede tener el nombre del esquema especfico donde se encuentra, o de otra manera, se buscar en la lista de esquemas. Luego va la palabra SET seguida por el nombre de la columna, un signo igual y el nuevo valor. Este valor puede ser una expresin escalar, no solo una constante. Por ejemplo, si se quiere elevar el precio un diez porciento, se escribira:
UPDATE productos SET precio = precio * 1.10;
Al no utilizar la clusula WHERE, estaremos actualizando todos los renglones de la tabla. Se pueden actualizar ms de una columna en una misma instruccin UPDATE escribiendo ms de una asignacin en la clusula SET. Por ejemplo:
UPDATE tabla SET a = 5, b = 3, c = 1 WHERE a > 0;
----------------------------------Eliminacin (deleting) de datos. De la misma manera en que insertamos renglones completos, as mismo eliminamos renglones completos desde una tabla. La nica forma de eliminar renglones es a travs de la especificacin de condiciones que los renglones a eliminar deben cumplir. Si no se especifica una condicin, se eliminan todos los renglones de esa tabla. Se usa la instruccin DELETE para eliminar renglones; la sintaxis es:
DELETE FROM tabla [WHERE condicion];
Pagina 39
Y la instruccin:
DELETE FROM productos;
Dejara totalmente vaca la tabla! As que cuidado con lo que se escribe. ----------------------------------El proceso o instruccin para recuperar datos desde una BD se llama query (consulta). En SQL la orden SELECT se usa para especificar queries. Su sintaxis general es:
WITH with_queries] SELECT lista_seleccion FROM expresion_tabla [especificacion_sort]
La clase ms simple de un query es: SELECT * FROM tabla1; Suponiendo que existe tabla1, esta instruccin debera recuperar todos los renglones y columnas de ella. El * significa recuperar todas las columnas. Aunque la lista de seleccin puede ser un subconjunto de las columnas vlidas o clculos con ellas. Por ejemplo: SELECT a, b + c FROM tabla1; FROM tabla1 es una simple clase de expresin de tabla: lee solo una tabla. En general, la expresin de tabla puede contener constructores complejos de tablas base, reuniones (joins) y subqueries. Sin embargo, omitiendo la expresin de tabla por completo, se puede usar la instruccin SELECT como una calculadora: SELECT 3 * 4; aumentando su utilidad si la lista de seleccin regresa resultados variables. Por ejemplo: SELECT random(); Las expresiones de tabla calculan una tabla. Contiene una clsula FROM que es seguida opcionalmente por WHERE, GROUP BY y HAVING. Las expresiones triviales simplemente se refieren a una tabla en el disco llamada tabla base, pero se pueden usar expresiones ms complejas para modificar o combinar las tablas base de varias maneras. Las clusulas opcionales WHERE, GROUP BY y HAVING especifican una serie de transformaciones sucesivas ejecutadas sobre las tablas derivadas de la clusula FROM. Todas estas transformaciones producen una tabla virtual que proporciona los renglones que son pasados a la lista de seleccin para calcular los renglones de salida del query. La clusula FROM obtiene una nueva tabla a partir de una o ms tablas dadas en una lista de referencia de tablas separada por comas.
FROM referencia_tabla [,referencia_tabla [, ...]]
Una referencia de tabla puede ser un nombre de tabla (posiblemente calificado con el nombre del esquema) o una tabla derivada tal como una subconsulta, una reunin de tablas o combinaciones complejas de estas. Si se incluye ms de una tabla en la clusula FROM, se obtiene el producto cartesiano o join_cruzado para formar la tabla virtual intermedia que puede entonces ser sujeta a transformaciones por las clusulas WHERE, GROUP BY y HAVING. Reunin de tablas. Una tabla reunida (joined table) es producto de dos tablas (virtuales o reales) de acuerdo a las reglas del tipo particular de reunin: Inner, outer y cross-join.
T1 CROSS JOIN T2
Para cada combinacin posible de renglones de T1 y T2 (producto cartesiano), la tabla reunida contendr un rengln consistente de todas las columnas enT1 seguida por todas las columnas en
Pagina 40
La condicin del join se especifica en las clusulas ON o USING o implcitamente por la palabra NATURAL. ON es la clase de condicin de join ms general. Toma un valor booleano de la misma clase que WHERE. Un par de renglones de T1 y T2 coinciden si la expresin ON se evala a true para ellos. USING es una abreviatura, toma una lista de nombres de columnas separadas por comas, las cuales deben ser comunes a ambas tablas a reunir y forma una condicin de join que especifica igualdad en cada uno de esos pares de columnas. USING (a, b, c) equivale a (t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c). NATURAL es una forma abreviada de USING: forma una lista USING consistente en todos los nombres de columnas que aparecen en ambas tablas de entrada. Como con USING, estas columnas apararecern solamente una sola vez en la tabla resultante. Los tipos posibles de joins calificados son: INNER JOIN Para cada rengln R1 de T1, la tabla reunida tiene un rengln para cada rengln en T2 que satisface la condificin de reunin. LEFT OUTER JOIN Primero se ejecuta un inner join, luego, para cada rengln en T1 que no satisface la condicin de reunin con algn rengln en T2, un rengln es aadido con valores nulos en las columnas T2. De esta forma, la tabla resultante tiene siempre al menos un rengln para cada rengln en T1. RIGHT OUTER JOIN Al contrario del left outer join, la tabla resultante siempre tendr al menos un rengln para cada rengln en T2. FULL OUTER JOIN Combina todos los renglones de ambas tablas, llenando con valores nulos las columnas de los renglones provenientes de T1 y T2 que no satisfagan la condicin de reunin. Se pueden encadenar joins de todos los tipos permitidos o anidarlos, incluso T1 y T2 pueden ser tablas reunidas. Se pueden usar parentsis encerrando las clusulas JOIN para controlar el orden de ejecucin. Si no los hay, la reunin se ejecuta de izquierda a derecha. ----------------------------------Se puede dar un nombre temporal a las tablas y referencias de tablas complejas para ser usado por referencias a la tabla resultante en el resto del query. A este nombre se le llama alias y puede ser cualquier identificador. Para crear un alias se escribe:
FROM referencia_de_tabla AS alias o FROM referencia_de_tabla alias
Una vez asignado un alias, no se puede utilizar posteriormente el nombre original de la tabla. Los parntesis se usan para resolver ambigedades. -----------------------------------
Pagina 41
Este ejemplo es equivalente a FROM tabla1 AS alias. Una subconsulta tambin puede ser una lista de valores (values).
FROM (VALUES (ana, sanchez), (memo, juarez), (jose, blanco)) AS nombres(pila, apellido)
----------------------------------La sintaxis de la clusula WHERE es: WHERE condicion_de_bsqueda La condicin de bsqueda es cualquier expresin que regresa un valor de tipo boolean. Una vez procesada la clusula FROM, cada rengln de la tabla virtual derivada se checa contra la condicin de bsqueda. Si el resultado es true, el rengln se mantiene en la tabla resultante, de otra manera, si el resultado es false o null, el rengln se descarta. La condicin de bsqueda tpicamente hace referencia al menos a una columna de la tabla generada. Algunos ejemplos de WHERE son:
SELECT SELECT SELECT SELECT SELECT SELECT ... ... ... ... ... ... FROM FROM FROM FROM FROM FROM fdt fdt fdt fdt fdt fdt WHERE WHERE WHERE WHERE WHERE WHERE c1 > 5 c1 IN (1, 2, 3) c1 IN (SELECT c1 FROM t2) c1 IN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10) c1 BETWEEN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10) AND 100 EXISTS (SELECT c1 FROM t2 WHERE c2 > 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;
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;
-----------------------------------
Pagina 42
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 DISTINCT
select_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
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
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 es
VALUES ( 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);
Por default, PostgreSQL asigna los nombres column1, column2, etc. a las columnas de una tabla VALUES.
Pagina 44
Pagina 45
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
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;
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
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
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 query
EXPLAIN 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
y el query
EXPLAIN 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 entrega
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)
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
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
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;
Pagina 52
La restriccin se checar inmediamente despus de agregada, as que los datos debern satisfacerla a priori. ----------------------------------Incrementar temporalmente la variable de configuracin checkpoint_segments puede acelerar la carga de grandes volmenes de datos. Al ocurrir esto, PostgreSQL har ms checkpoints que lo normal. En un checkpoint, todas las pginas con ruido (que tengan basura) fluyeh hacia el disco. Incrementar el nmero de segmentos de checpoints disminuir el nmero de los chequeos. Despus de alterar significativamente (constantes inserts, updates o deletes) la distribucin de los datos dentro de una tabla, correr ANALYZE o VACUUM ANALYZE es vital. Esto asegurar que el planeador actualice las estadsticas de la tabla que se est analizando. Sin estas estadsticas o con estadsticas obsoletas, el planeador podra tomar decisiones pobres durante la planeacin de un query, conduciendonos a un psimo rendimiento. Si el demonio autovacuum est activo, la actualizacin de estadsticas ser automtica. programa Especificar en cada prctica la correlacin con l o los temas y subtemas del pro grama 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. En el Query Tool ejecutar los queries descritos en la seccin de introduccin de esta prctica. 7. Re-crear la llave fornea de la tabla mariposa (eliminar la restriccin y volverla a crear).
Creacin de la tabla Temporal: 1. En el rbol, expandir y seleccionar la entrada Databases. 2. Crear la BD Temporal para conectarla y dejarla lista para su uso, el esquema de la BD es:
CREATE TABLE a (id integer primary key); CREATE TABLE b (id integer primary key, ref integer); CREATE TABLE c (id integer primary key);
3. Crear una cama de pruebas con al menos 5,000 renglones por tabla. 4. En el Query Tool escribir el query para insertar los datos mediante la orden COPY.
Pagina 53
6. Calcular los costos y el tiempo de ejecucin de esos queries. Completar la instruccin con EXPLAIN ANALYZE. 7. Comparar los resultados e indicar cual o cuales de los tres queries es o son ms eficiente(s). Sugerencias didcticas: Revisar exhaustivamente los captulos 26 Monitoring Database Activity y 55 How the Planner Uses Statistics del manual de PostgreSQL para incrementar su conocimiento en el manejo de los valores estadsticos que maneja PostgreSQL. Revisar el video Importancia de las Estadisticas en PostgreSQL, que viene en el CD de soporte.
(resultados): Reporte del alumno (resultados): 1. Reporte de las estadisticas generadas. 2. Resumen de su interpretacin personal con sugerencias para incrementar el rendimiento de los queries. 3. Descripcin del procedimiento para la creacin de la cama de pruebas. 4. Scripts de SQL para realizar las actividades solicitadas. 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
Pagina 54
Un trigger es un manejador de eventos. Es decir, es un cdigo que se ejecuta Introduccin: cuando ocurre un cierto evento en el servidor de la BD. El std. ANSI SQL-92 no dice nada acerca de los triggers o los ventos que los sealan. Muchos productos DBMS manejan triggers de una u otra forma, pero no hay un formato std. para ellos. El conjunto ms comn de triggers son eventos before y after que se disparan para los tres eventos de manipulacin de datos relacionales: insert, update y delete. En otras palabras, ocurre un evento en los siguientes puntos en el procesamiento de BD:
Before Insert, Before Update, Before Delete After Insert, After Update, After Delete
Estos triggers orientados a renglones realizan chequeos de las reglas de negocios y otras funciones de implementacin. Por ejemplo, un uso es implementar restricciones de integridad referencial (restricciones de llave fornea) a travs de las BD. Como cuando se inserta un rengln en una tabla, el trigger Before Insert checa para asegurarse que exista la llave fornea en una referencia foreign key a una tabla en otra BD. Esto se necesita en un ambiente de mltiples BD porque el mecanismo de restriccin de integridad de SQL requiere que todas las tablas estn dentro de la misma BD, lo cual en nuestros dias, ya no resulta muy til. ----------------------------------PL/pgSQL y Triggers Las funciones que usan los triggers se pueden crear con PL/pgSQL y ser referenciadas dentro de la definicin del trigger PostgreSQL. El trmino funcin de trigger es una simple manera de hacer referencia a una funcin que ser invocada por un trigger. La definicin de un trigger y la definicin de su funcin asociada son dos cosas diferentes. Un trigger se define con la instruccin CREATE TRIGGER, mientras que la funcin referenciada por l se hace con CREATE FUNCTION. Una funcin de trigger se define sin argumentos y regresan un valor del tipo de dato especial trigger. La sintaxis para definir un trigger en PostgreSQL es:
CREATE TRIGGER nombre { BEFORE | AFTER } { INSERT | UPDATE | DELETE ON tabla [ FOR [ EACH ] { ROW | STATEMENT } ] EXECUTE PROCEDURE nombre_funcion (argumentos) [ OR ] }
Cada funcin de trigger creada tiene acceso a un nmero de variables especiales que existen para proporcionar informacin acerca del trigger llamador y permitirle manipular datos de las tablas.
Pagina 55
El siguiente cdigo ilustra la definicin en PL/pgSQL de una funcin de trigger, usando variables de la lista previa. La funcin de trigger checar_embarque se llama despus de una operacin INSERT o UPDATE a la tabla embarques. Se asegura que cada embarque agregado a la tabla contenga un nmero ID de cliente y un ISBN del libro especificado vlidos. Si es as, resta uno del total de la cantidad de libros en la tabla stock para ese libro si la operacin que llama es un INSERT (pero no un UPDATE).
CREATE OR REPLACE FUNCTION checar_embarque () RETURNS trigger AS ' DECLARE -- Declara una variable para contener el ID del cliente. id_number INTEGER; -- Declara una variable para contener el ISBN. book_isbn TEXT; BEGIN -- Si hay un nmero ID que coincida con el ID del cliente en -- la nueva tabla, lo recupera de la tabla de clientes (customers). SELECT INTO id_number id FROM customers WHERE id = NEW.customer_id; -- Si no hay coincidencia, genera una excepcin. IF NOT FOUND THEN RAISE EXCEPTION 'Nmero ID de cliente invalido.'; END IF;
Pagina 56
-- Si hay un ISBN que coincida con el ISBN especificado en la -- nueva tabla, recuperelo de la tabla de ediciones (editions). SELECT INTO book_isbn isbn FROM editions WHERE isbn = NEW.isbn; -- Si no hay coincidencia, genera una excepcion. IF NOT FOUND THEN RAISE EXCEPTION 'ISBN Invalido.'; END IF; -- Si el chequeo previo tuvo exito, actualiza la cantidad en existencia -- para la instruccin INSERT. IF TG_OP = 'INSERT' THEN UPDATE stock SET stock = stock - 1 WHERE isbn = NEW.isbn; END IF; RETURN NEW; END; ' LANGUAGE 'plpgsql';
Una vez creada la funcin checar_embarque(), se puede definir para la tabla embarques (shipments) un trigger que la invoque. El siguiente cdigo muestra la sintaxis para crear el trigger checar_embarque en la BD booktown usando psql.
CREATE TRIGGER checar_embarque BEFORE INSERT OR UPDATE ON shipments FOR EACH ROW EXECUTE PROCEDURE checar_embarque();
Hay que notar que la funcin del trigger checar_embarque() deber estar definida dentro de la BD booktown antes de que su trigger asociado sea definido. ----------------------------------Dentro del rbol de pgadmin III, los triggers y sus funciones asociadas se guardan dentro de la tabla correspondiente; por ejemplo, si se tiene el trigger mariposa_may y su funcion asociada mariposa_may(), para la tabla mariposa de la BD mariposas, el rbol se vera de la siguiente forma:
Pagina 57
Nuestra tabla item tiene la capacidad de almacenar la informacin mas actual e importante para la tienda de computadoras, pero hay otro tipo de informacin que no es capaz de almacenar (por lo menos por ahora), la informacin del cambio de datos.
Pagina 58
Antes de empezar a denir el trigger es necesario conocer una cuantas variables por defecto que nos provee PostgreSQL:
current_user current_date current_time el nombre del usuario que esta actualmente conectado a la base de datos y que ejecuta las instrucciones. La fecha actual (del servidor, no del cliente). La hora actual.
PostgreSQL tambin maneja unas cuantas variables al momento de ejecutar un trigger, estas son:
NEW OLD TG_OP TG_ARGV Variable compuesta que almacena los nuevos valores de la tupla que se esta modicando Variable compuesta que almacena los valores antiguos de la tupla que se esta modicando Variable tipo string que indica que tipo de evento est ocurriendo (INSERT, UPDATE, DELETE). Variable tipo arreglo que almacena los parametros de la funcin del trigger, podemos accederlos de la forma TG_ARGV[0], TG_ARGV[1], etc.
Como ltimo paso antes de empezar a denir el trigger, debemos crear una tabla que vaya a almacenar los cambios de precio en nuestra tabla item, la llamaremos item_actualizado:
CREATE TABLE item_actualizado ( item_id integer NOT NULL, nombre text NOT NULL, precio_anterior real NOT NULL, precio_actualizado real NOT NULL, autor text NOT NULL, fecha_cambio date NOT NULL, CONSTRAINT item_id_fk FOREIGN KEY (item_id) REFERENCES item(item_id) );
Una vez definidas nuestras tablas, definimos la funcin del trigger: item_actualizado_tri():
CREATE FUNCTION item_actualizado_tri() RETURNS trigger AS ' BEGIN IF (TG_OP = 'UPDATE') THEN INSERT INTO item_actualizado VALUES ( OLD.item_id, OLD.nombre, OLD.precio_venta NEW.precio_venta, current_user, current_date); END IF; RETURN NULL; END; '
LANGUAGE 'plpgsql';
Pagina 59
Listo, cada vez que se actualice una tupla en la tabla item, se reejar el cambio en la tabla item_actualizado. Pero era eso lo que queriamos? No totalmente, volvamos a la funcin del trigger.
CREATE FUNCTION item_actualizado_tri() RETURNS trigger AS ' BEGIN IF (TG_OP = 'UPDATE') THEN IF (OLD.precio_venta != NEW.precio_venta) THEN INSERT INTO item_actualizado VALUES ( OLD.item_id, OLD.nombre, OLD.precio_venta, NEW.precio_venta, current_user, current_date); END IF; END IF; RETURN NULL; END; ' Language 'plpgsql';
Ahora si, solo se insertarn tuplas en la tabla item_actualizado cuando se cambie el valor de precio_venta. Modiquemos algn item_actualizado. Ejercicios: A la tabla item_actualizado aadir un atributo hora_cambio que almacene la hora de la modicacin. Hacer otro trigger que haga el mismo tratamiento pero con los items eliminados de la tabla item. precio_venta de la tabla item y luego veamos la tabla
Modicamos la tabla:
CREATE TABLE item_actualizado ( item_id integer NOT NULL, nombre text NOT NULL, precio_anterior real NOT NULL, precio_actualizado real NOT NULL, autor text NOT NULL, fecha_cambio date NOT NULL, hora_cambio time NOT NULL, CONSTRAINT item_id_fk FOREIGN KEY (item_id) REFERENCES item(item_id) );
Pagina 60
Gracias a nuestra nueva tabla item_actualizado ahora podemos obtener mas informacin acerca de nuestra tienda de computadoras. Podemos saber: Que precio tenia cierto tem en cierta temporada. Cuanto tiempo se ha mantenido el precio estable. En que temporadas del ao los precio caen o se disparan. Quienes han modicado los precios de los items.
Ahora hagamos el trigger que haga el seguimiento de los items que han sido eliminados de nuestra tabla item: Primero creamos la tabla item_eliminado:
CREATE TABLE item_eliminado ( item_id integer NOT NULL, nombre text NOT NULL, precio_compra real NOT NULL, precio_venta real NOT NULL, autor text NOT NULL, fecha_eliminacion date NOT NULL, hora_eliminacion time NOT NULL, );
Pagina 61
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. En el Query Tool ejecutar los queries descritos en la seccin de introduccin de esta prctica en la pg. 58.
Creacin y preparacin de la base de datos Tienda de computadoras: 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. Crear y conectar la BD Tienda de computadoras y dejarla lista para su uso. En el Query Tool ejecutar los queries descritos en la seccin de introduccin de esta prctica en la pg. 58 a 61. 7. En el nterim, crear una cama de pruebas. Revisar exhaustivamente la seccin 9.25 Trigger Functions y el captulo 35 Triggers del manual de PostgreSQL para incrementar su conocimiento en el manejo de los disparadores. Revisar el documento 09 01 Disparadores (triggers), que viene en el CD de soporte. Crear la base de datos Embarque, descrita en la seccin de introduccin de esta prctica, en las pgs. 56 y 57.
Sugerencias didcticas: -
(resultados): Reporte del alumno (resultados): 1. Reporte de los resultados obtenidos al ejecutar los triggers. 2. Scripts de SQL para realizar las actividades solicitadas. 3. Reporte de mensajes de advertencia al ejecutar los queries. Bibliografa preliminar: 1. Muller, Robert J. Database Design for Smarties : using UML for data modeling Morgan Kaufmann Publishers ISBN 1-55860-515-0
Pagina 62
Pagina 63