Está en la página 1de 468

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE INGENIERA ESCUELA DE INGENIERA DE SISTEMAS ADMINISTRACIN DE BASES DE DATOS (IS - 421)

Ing. Hubner Janampa Patilla

INTRODUCCIN

Introduccin al diseo de bases de datos

Todo el mundo guarda los datos. Las grandes organizaciones gastan millones para cuidar de su nmina de cliente, y los datos de la transaccin. Las sanciones para conseguir que mal son graves: las empresas pueden colapsar, los accionistas y los clientes pierden dinero, y esto sucede para muchas organizaciones (compaas areas, las juntas de salud, empresas de energa), no es exagerado decir que incluso la seguridad personal puede ser puesto en situacin de riesgo. Sin embargo, muchas pequeas bases de datos pueden encontrarse dentro de estas grandes organizaciones y tambin en las pequeas empresas, clubes privados. Cuando estos salen mal, no tiene la portada de los peridicos, pero los costes a menudo son muy graves.
Dnde encontramos estas pequeas bases de datos electrnicas?, en casa, podramos seguir en las libretas de direcciones y catlogos de CD; los clubes deportivos tendrn informacin sobre los miembros; las pequeas empresas podran mantener sus propios datos de los clientes.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 2

Dentro de las grandes organizaciones, tambin habr una serie de pequeos proyectos para mantener los datos que no es fcilmente o convenientemente administrado por el gran nivel de todo el sistema de bases de datos. Los investigadores pueden mantener su propia experimentacin y los resultados de la encuesta; grupos desean administrar sus propias listas o llevar un registro de equipo; los departamentos podrn mantener sus propias cuentas detalladas y de presentar un resumen de la organizacin financiera del software. La mayora de estas pequeas bases de datos son creados por los usuarios finales. Se trata de personas cuyo principal trabajo es algo ms que un ordenador profesional. Ellos suelen ser los cientficos, administradores, tcnicos, contadores, o maestros, y muchos de ellos tienen slo modestos habilidades en hoja de clculo o base de datos de software. Las bases de datos resultantes no suelen estar a la altura de las expectativas. El tiempo y la energa es gastados para crear unos cuadros en una base de datos de productos, como Microsoft Access, o en la creacin de una hoja de clculo en un producto, tales como Excel.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 3

Cmo se equivoc
Una base de datos que no cumple las expectativas se convierte en un costoso ejercicio de manipulacin de datos. Es evidente que tienen el costo del tiempo y esfuerzo gastado en la creacin de un insatisfactorio solicitud. Sin embargo, un problema mucho ms grave es la incapacidad para usar los datos valiosos. Esto es especialmente cierto para los datos de la investigacin. Por desgracia, algunos bastante simples errores en el diseo puede significar que gran parte del potencial de la informacin se pierda.

Otro costo oculto viene de inexactitudes en los datos. Pobre diseo de bases de datos permite que lo que debe evitarse las incoherencias a estar presentes en los datos. La mala manipulacin de las categoras de los datos pueden producir resmenes e informes para inducir a error o, para ser burdo, mal.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

Problemas con una base de datos no son necesariamente causados por la falta de conocimiento sobre la base de datos de un producto en s (aunque esto eventualmente convertirse en una limitacin), pero son a menudo el resultado de haber escogido mala agrupacin de los datos, o en una hoja de clculo. Esto se produce por dos razones principales: No tener una idea clara de qu tipo de informacin tiene la base de datos o una hoja de clculo. No tener un modelo claro de las distintas clases de datos y sus relaciones el uno al otro

Este curso describe las tcnicas para obtener una comprensin precisa de cmo desarrollar un modelo conceptual de los datos implicados, y cmo traducir ese modelo en un diseo de bases de datos. Usted aprender a disear mejores bases de datos. Podrs evitar el costo de "hacer mal".

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

Tcnicas de anlisis Mucho anlisis y diseo de metodologas se han desarrollado con gran desarrollo de proyectos en mente. Estas metodologas tienen que abordar las cuestiones de los costos y los contratos, mantenimiento y seguridad, normas e interfaces, y el documentacin necesaria para un proyecto que es demasiado grande para cualquier persona o equipo de comprender en total.
El calendario puede significar la participan de mas equipos de proyecto que podra a su vez cargar ms la totalidad de su personal durante el desarrollo, a fin de que la documentacin se convierte en un crtico factor en el xito del proyecto.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

Determinar el uso Lo que en cualquier proyecto se requiere es un entendimiento claro de exactamente lo que la base de datos lograra. A veces, los clientes pueden tomar delito cuando usted pregunta qu uso le dar a su bases de datos.

Se necesita de cierta disciplina para hacer los preparativos necesarios, especialmente cuando la necesidad de obtener los datos introducidos soy muy importantes. Una manera conveniente de capturar los posibles usos para datos es construir casos de uso o historias de usuario.
Usted puede estar familiarizado con estas ideas, que proceden del Lenguaje Unificado de Modelado (UML) y la Extrema Programming. Los casos de uso son de libre formato de texto, que esencialmente describen las cosas desde el punto de vista de un posible usuario. Por ejemplo, en un caso de uso podra registrar un estadstico los datos de su trabajo sobre la investigacin experimental que depende de la meteorologa.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

Crear un modelo de datos El abismo entre tener una idea bsica de lo que su base de datos debe ser capaz de hacer, y el diseo de las tablas correspondientes, es salvarse por tener un claro modelo de datos. El modelado de datos implica reflexionar muy detenidamente sobre los diferentes conjuntos o clases de datos que necesitamos para una problema particular.

Aqu est un ejemplo simple : una pequea empresa pueda tener clientes,
productos y pedidos. Tenemos que grabar el nombre del cliente. Que pertenece claramente a nuestros conjunto de datos de clientes. Y con respecto a la direccin? Ahora, significa la direccin del cliente de contacto (en cuyo caso pertenece a los datos de los clientes), o cuando nos enva la orden (en cuyo caso pertenece la informacin a la orden)? Qu pasa con el descuento ? Que le pertenece al cliente (algunos de ellos son clientes de tarjetas de oro), o el producto, o la orden (20% de descuento para pedidos superiores a $ 4000)?

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

Obtener las respuestas correctas a estas preguntas es, evidentemente, vital si va a proporcionar una base de datos til para usted mismo o su cliente. No es una buena partida hacer una columna en su hoja de clculo "Descuento" antes de tener una comprensin muy precisa de exactamente lo que significa un descuento en el contexto del problema actual.
Los diagramas de modelado de los datos proporcionan en forma precisa y fcil interpretar la documentacin para obtener respuestas a preguntas tales como usted se plantea. An ms importante, el proceso de construccin de un modelo de datos le lleva a preguntarse las preguntas, en primer lugar. Es esto, ms que cualquier otra cosa, que hace este tipo de modelado de datos. Los modelos de datos que va ver en este curso son medianos. Ellos pueden representar una pequeo problema en su totalidad, pero lo ms probable es que ser una pequea parte de un problema ms amplio.
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

24/09/2009

Los modelos de datos suelen estar representadas visualmente utilizando algn tipo de diagrama. Diagramas le permiten tener a una gran cantidad de informacin de un vistazo, dndole la capacidad de captar rpidamente la esencia de un diseo de bases de datos sin tener que leer un montn de texto.
Vamos a utilizar el diagrama de clase de notacin UML para representar a nuestros modelos de datos, pero muchas otras notaciones son igualmente tiles.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

10

Implementacin de base de datos Una vez que usted tiene un modelo de datos que apoye a sus casos de uso (y todos los dems detalles que se han descubierto en el camino), usted sabe cun grande es su problema y el tipo de detalle que implica. Ahora tiene una buena base para el diseo de una adecuada aplicacin y la realizacin de la aplicacin.

Conceptualmente, la traduccin del modelo de datos para el diseo de una base de datos o una hoja de clculo es simple. En las prximas lecciones , vamos a ver la forma de disear tablas y relaciones en una base de datos relacional (como Microsoft Access), que representan la informacin en el modelo de datos. Adems tambin veremos cmo esto podra hacerse en uno base de datos orientado a objetos, y por problemas con no demasiadas clases de datos, cmo puede capturar parte de la informacin en un producto de hoja de clculo como Microsoft Excel.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

11

La traduccin del modelo de datos al diseo de bases de datos es bastante sencillo, sin embargo, la aplicacin real no es tan simple. Una gran cantidad de trabajo es necesario para asegurar que la base de datos sea til al usuario final. Esto significar disear una interfaz de usuario con una clara lgica, la buena entrada de los datos, la capacidad de encontrar rpidamente los datos de editar o borrar, adaptable y preciso para consultar e informar las caractersticas, la capacidad de importacin y exportacin de datos, y las buenas instalaciones de mantenimiento, tales como copia de seguridad y archivo.
No subestime el tiempo y la experiencia necesario para completar una aplicacin til incluso para las ms pequeas base de datos. Consideraciones tales como la interfaz de usuario, mantenimiento, archivo, estn fuera del alcance de este curso, pero estarn bien cubiertas en el aspecto practico del curso.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

12

CAPTULO 1 Qu puede salir mal Palabras claves, mala gestin y las categoras Informacin repetida El diseo de un nico informe Resumen

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

13

Qu puede salir mal El problema con una serie de pequeas bases de datos (y muy probablemente con muchos grandes queridos) es que la idea inicial de cmo registrar los datos no es necesariamente la correcta. A menudo, una tabla o una hoja de clculo est diseado para imitar una posible entrada de datos. Esta prctica puede ser adecuada para resolver el problema inmediato (por ejemplo, almacenar los datos en alguna parte), sin embargo, simulando una pantalla de entrada de datos o un informe en su diseo de bases de datos a menudo causa problemas ms adelante. Se puede hacer que sea difcil o imposible para obtener informacin para los distintos informes o resmenes, no obstante, deben estar disponibles teniendo en cuenta los datos recogidos. En este captulo se presentan ejemplos extrados de la vida real para ilustrar algunos tipos bsicos de los problemas surgidos cuando los datos se almacenan en las hojas de clculo mal diseados o tablas.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

14

Estos son ejemplos reales que he encontrado en mi propio trabajo de diseo. No proceden de un libro de texto o de un examen de papel. Algunos de los datos ha sido suprimida o modificadas para proteger la identidad de los culpables. Mala gestin de palabras claves y categoras Un problema comn en el diseo de bases de datos es el fracaso para tratar adecuadamente con palabras clave y categoras. Muchas aplicaciones de bases de datos implica que los datos se clasifican de alguna manera: productos o acontecimientos pueden ser de inters para determinadas categoras de personas, los clientes pueden ser clasificados por edad o los intereses o los ingresos (o los tres). Al introducir datos, por lo general, pensar en un tema con su particular lista de categoras o palabras clave. Sin embargo, cuando usted llegado a la preparacin de informes o hacer algunos anlisis, puede que tenga que ver las cosas al revs.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

15

A menudo quieren ver una categora con una lista de todos sus elementos, o un ttulo con el nmero de artculos. Por ejemplo, usted podra preguntar "Cul es el porcentaje de clientes que son buenos pagadores? "Si las palabras clave y categoras no son almacenados correctamente inicialmente, estos informes pueden llegar a ser muy difcil de producir. Ejemplo 1 describe un caso sobre la informacin de cmo se utilizan las plantas, y se registra de una manera que parece razonable a primera vista, pero que en ltima instancia no se puede manipular y se le hace muy difcil crear reportes especficos para cada planta en cuanto a su uso, etc.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

16

La Figura 1 muestra una pequea porcin de una tabla de base de datos registro de los datos sobre las plantas. Junto con el genero, especie y nombre comn de cada planta, el promotor botnico decide que sera conveniente hacer a la informacin mostrada para mantener la informacin mas precisa de una planta. Esto es para ayudar a los futuros cultivadores de decidir si una planta es apropiada para sus necesidades. Figura No 1

Vivienda (SHELTER) Maderas (TIMBER) Para alimentacin de aves (BIRD FOOD) Estabilidad del suelo (SOIL STABILITY)

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

17

En el Ejemplo 1, la verdadera vergenza es que todos los datos han sido recogidos cuidadosamente y entr, pero el diseo del cuadro que hace que sea imposible dar respuesta a las preguntas obvias convenientemente. El problema es que el desarrollador no tiene tiempo de dar un paso atrs y examinar los probables usos de los datos.
El diseo de la base de datos principalmente debe satisfacer su problema inmediato, que es "necesario para almacenar toda la informacin que tenemos sobre cada planta." Antes de embarcarse en la puesta en prctica, habra sido til tener en cuenta otros puntos de punto de vista y posibles usos de los datos. La ms obvia de ellas es "Quiero encontrar todas las plantas que cuentan con este uso en particular.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

18

En el Ejemplo 1, realmente tenemos dos tipos o clases de datos, las plantas y sus usos, y estamos interesados en las conexiones entre ellos. Las tcnicas de modelado de datos se describe en el resto del curso, que es una forma prctica de aclarar exactamente qu es lo que usted esperar de sus datos y ayudar a decidir cul es el mejor diseo de bases de datos para apoyar eso. Saltando un poco por delante para ver una solucin para la base de datos planta del problema, puede configurar rpidamente una til base de datos relacional mediante la creacin de los dos tablas como se muestra en la Figura 1-2.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

19

Figura 1-2. La mejora del diseo de bases de datos para representar las plantas y los usos

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

20

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

21

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

22

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

23

Una breve historia de las bases de datos La Base de datos moderno surgi en el decenio de 1960 gracias a la investigacin en IBM, entre otras empresas. La investigacin centrada principalmente en torno a la automatizacin de oficinas, en particular la automatizacin de almacenamiento de datos y indexacin de las tareas que anteriormente requera una gran cantidad de mano de obra. La potencia de las computadoras y almacenamiento se ha convertido en mucho ms barato, con lo que el uso de computadoras para los datos de indexacin y almacenamiento era una solucin viable. Un pionero en la base de datos de campo fue Charles W. Bachman, que recibi el Premio Turing en 1973 por una labor pionera en la tecnologa de base de datos. En 1970, un investigador de IBM llamado Ted Codd public el primer artculo sobre las bases de datos relacionales. A principios del decenio de 1980, los primeros sistemas de bases de datos basado en el estndar SQL apareci en las empresas tales como Oracle, con Oracle, versin 2, y, posteriormente, SQL / DS de IBM, as como una serie de otros los sistemas de otras empresas.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 24

Lenguaje estructurado de consultas (SQL) La primera pregunta que hacer es lo que es SQL y cmo utilizarlo con bases de datos. SQL tiene tres funciones principales: Creacin de una base de datos y la definicin de su estructura. Consultar a la base de datos para obtener los datos necesarios para responder a las preguntas. Seguridad de control de las base de datos. La definicin de estructura de base de datos incluye la creacin de nueva base de datos tablas y campos, el establecimiento de normas de datos entrada, y as sucesivamente, que se expresa por un sub lenguaje SQL llamado lenguaje de control de datos (DCL).

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

25

La introduccin a las consultas SQL Las consultas SQL son las ms comunes en el uso del SQL. Un sub lenguaje SQL llamado lenguaje de manipulacin de datos (DML) se refiere a las consultas y manipulacin de datos. Por ejemplo, con un base de datos que almacena detalles de los vendedores, las ventas de automviles, el tipo vendido, y as sucesivamente, es posible que se desee conocer el nmero de coches vendidos por cada vendedor en cada mes y la cantidad de dinero que hizo la empresa. Usted puede escribir una consulta SQL a esa pregunta y obtener la respuesta. Una consulta SQL consiste en diversas declaraciones, clusulas y condiciones. Una declaracin es una instruccin o un comando. Una clusula especifica los lmites a una declaracin, los lmites que se especifican mediante condiciones.
SELECT CarModel FROM CarSales WHERE CarSoldDate BETWEEN May 1 2005 AND May 31 2005;
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 26

La comparacin de SQL a otros lenguajes de programacin Ahora que sabes para que puedes utilizar SQL, puedes compararlo con otros lenguajes de programacin. Para ser honestos, SQL es bastante diferente de los lenguas de procedimiento, tales como C + +, Visual Basic, Pascal, y otra tercera generacin de lenguajes de programacin, que permiten a los programadores escribir paso a paso instrucciones dicindole al ordenador exactamente qu hacer para lograr un determinado objetivo. Tomando la venta de automviles de ejemplo, su objetivo podra ser la de seleccionar toda la informacin sobre las ventas realizadas en julio en la sala de exposicin de Nueva York. Muy aproximadamente en su lengua de procedimiento podra hacer lo siguiente: 1. Las carga de ventas de los datos en la memoria del ordenador. 2. Extracto de los elementos individuales de datos a partir de los datos de ventas. 3. Revisar para ver si cada uno de los elementos de datos es a partir del mes de julio y de la sala de exposicin de Nueva York. 4. Si es as, entonces hacer una nota de los datos.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 27

5. Volver a la orden del da de los datos y seguir hacia adelante hasta que todos los temas han sido verificados. 6. Loop a travs de los datos y mostrar los resultados de cada uno de ellos. SQL, sin embargo, es un lenguaje declarativo. En las ventas de automviles de ejemplo, si estas usando SQL, usted podra escribir lo siguiente:

SELECT * FROM SalesMade WHERE SaleDate = July 2005 AND SalesOffice = NewYork

Comprender las normas SQL Al igual que ocurre con las bases de datos, IBM hizo una gran parte del trabajo original de SQL. Sin embargo, un montn de otros proveedores de IBM se ocupa de la norma y desarrollado sus propias versiones del mismo. Habiendo tantos dialectos diferentes causando bastante dolor de cabeza para el desarrollador, en 1986 fue aprobado por el organismo de normalizacin del Instituto Nacional Estadounidense de Estndares (ANSI) y en 1987 por la Organizacin Internacional de Normalizacin (ISO), que cre un estndar para SQL. Aunque esto ha ayudado a minimizar las diferencias entre los diversos dialectos SQL, todava hay diferencias entre ellos.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

29

El siguiente cuadro ofrece un breve resumen de las diversas normas y actualizaciones de dichas normas.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

30

Este curso se concentra en SQL-92, SQL-99, y SQL-2003 debido a que la mayora de sus caractersticas han sido aplicado a la mayora de base de datos relacionales de gestin de sistemas (RDBMS). Aunque las normas son importantes para ayudar a traer algn tipo de coincidencia entre los distintos RDBMS, al final del da lo que funciona en la prctica es lo que realmente cuenta. En lugar de debatir interminablemente las normas, este curso le proporcionara informacin para ayudarle en el mundo real de las bases de datos.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

31

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

32

Dicho esto, la siguiente seccin le muestra cmo crear tu propia base de datos SQL.

CREATE DATABASE myFirstDatabase;

CREATE TABLE name_of_table ( name_of_column column_datatype )

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

33

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

34

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

35

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

36

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

37

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

38

La creacin de la base de datos de ejemplo


Usted necesidad de crear un base de datos para almacenar las tablas. Usted puede llamar a su base de datos algo as como Club de Cine , aunque el nombre de la BD no es importante. En el apndice que se dar al final de esta presentacin, tiene todas las caractersticas necesarias para la creacin de un ejemplo de base de datos en blanco, ya sea en Access, SQL Server, DB2, MySQL, y Oracle . Una vez que hayas creado la BD Club Cine, es hora de empezar a poblar con tablas. La premisa bsica es que usted est ejecutando un club de pelcula, y que desea una base de datos que almacena los siguientes informacin: Detalles de los miembro del Club, tales como nombre, direccin, fecha de nacimiento, fecha de su adhesin, y la direccin de correo electrnico. Detalle de asistencia a las reuniones. Ficha de la pelcula. Preferencias categora para los miembros. Ya ha establecido los detalles de la BD del club, pero ahora anunciare los campos adicionales para las tablas:
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 39

CREATE TABLE Films ( FilmId integer, FilmName varchar(100), YearReleased integer, PlotSummary varchar(2000), AvailableOnDVD char(1), Rating integer, CategoryId integer ); CREATE TABLE Category ( CategoryId integer, Category varchar(100) );

CREATE TABLE MemberDetails ( MemberId integer, FirstName nvarchar(50), LastName nvarchar(50), DateOfBirth datetime, Street varchar(100), City varchar(75), State varchar(75), ZipCode varchar(12), Email varchar(200), DateOfJoining datetime ); CREATE TABLE Attendance ( MeetingDate datetime, Location varchar(200), MemberAttended char(1), MemberId integer );

CREATE TABLE FavCategory ( CategoryId integer, MemberId integer );

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

40

Modelo relacional de la BD
Explicando?

Advanced Database Design

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

41

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

42

ALTER TABLE Attendance DROP COLUMN Location;

ALTER TABLE Attendance ADD LocationId integer;


CREATE TABLE Location ( LocationId integer, Street varchar(100), City varchar(75), State varchar(75) );

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

43

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

44

Entering Information
Ya se examin la creacin de una base de datos y la adicin de tablas, por lo que ahora usted est listo para empezar agregando los datos. La mayora de RDBMS proporcionar herramientas de gestin que permiten ver las tablas y los registros que poseen, as como tambin le permite aadir, modificar y borrar los datos. Estas herramientas son muy conveniente cuando se tiene pequeas cantidades de datos o cuando usted est haciendo una prueba de la base de datos. Sin embargo, usted no suelen introducir datos utilizando las herramientas de gestin. Mucho ms comn es algn tipo de programa o una pgina Web que acta como una interfaz agradable en el que el usuario introduce los datos. Este captulo se centra en cmo utilizar comandos SQL para insertar, actualizar o borrar datos contenida en una base de datos. Este captulo abarca los tres sentencias SQL que se ocupan de alterar los datos. El primero es la declaracin INSERT, que introduce nuevos datos. El UPDATE actualiza los datos existentes en la base de datos. Por ltimo, este captulo se refiere a la declaracin DELETE, que (sorpresa, sorpresa) suprime registros.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 45

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

46

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

47

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

48

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

49

Tenga en cuenta que las fechas en la tabla anterior se especifican en el formulario de ao-mes-da, por lo que 23 de febrero de 2004, se introduce como 2004-02-23. El formato exacto aceptable para cada sistema de base de datos vara no slo con el sistema de bases de datos, sino tambin con la forma en que la base de datos fue creado e instalado, as como el formato fecha / hora especificado por el propio ordenador. Sin embargo, el formato ao-mes-da no funciona por defecto en la instalacin de Oracle. Para Oracle, utiliza el formato de day-month_name-year. Por lo tanto, usted deber escribir 9 de enero de 1977. Las ventajas de no nombrar a las columnas de su sentencia INSERT, es que se salva de escribir y se le hace ms corto la sentencia SQL.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 50

Updating Data
No slo es necesario aadir nuevos registros, pero en algn momento usted tambin tiene la necesidad de cambiar los registros. Para actualizar los registros, usted utilizara el comando UPDATE. Especificar los registros a cambiar es la principal diferencia entre la insercin de nuevos datos y actualizar los datos existentes. Usted especifica que para actualizar los registros utiliza la clusula WHERE, que le permite especificar que slo los registros de actualizacin son aquellos en los que una determinada condicin es verdadera.
El comando UPDATE permite la configuracin para actualizar los campos. La sintaxis bsica para la actualizacin es la declaracin siguiente:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

51

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

52

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

53

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

54

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

55

Deleting Data Hasta ahora, en este captulo, usted ha aprendido la manera de aadir nuevos datos y actualizar los datos existentes, por lo que todo lo que queda a aprender es cmo borrar los datos. La buena noticia es que la supresin de los datos es muy fcil, y si es necesario, aadir una clusula WHERE para especificar que los registros para borrar.
Si desea borrar todos los registros de una tabla, simplemente dejar de lado la clusula WHERE, como se muestra en la siguiente declaracin:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

56

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

57

Extracting Information Hasta el momento usted ha aprendido a crear una base de datos y la forma de insertar datos en ella, por lo que ahora puede aprender la manera de extraer los datos de su base de datos. Probablemente, su caracterstica mas potente de SQL es su capacidad para extraer los datos, y la extraccin de datos puede ser tan simple o complejo como usted requiere. Usted puede simplemente extraer datos de la misma forma en que fue introducido en la base de datos, o se puede consultar la base de datos y obtener respuestas a las preguntas a partir de los datos bsicos. La clave para obtener los datos, es la sentencia SELECT, que en su forma bsica es muy simple y fcil de usar. Sin embargo, a medida que veremos los captulos, usted vera los lotes de opciones adicionales que hacen de la sentencia SELECT muy potente.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

58

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

59

Ejecute

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

60

Returning Only Distinct Rows

Si desea conocer todos los valores nicos en un registro, cmo ir sobre la recuperacin de ellos?, la respuesta es mediante el uso de la palabra clave DISTINCT. La palabra clave DISTINCT se aadir a la declaracin del SELECT, directamente despus de la palabra clave SELECT. Por ejemplo, si alguien le pide de que ciudades proceden los miembros, usted podra intentar una consulta similar a lo siguiente:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

61

Ejecute

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

62

Ejecute

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

63

Using Aliases

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

64

Filtering Results with the WHERE Clause

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

65

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

66

Trabajo Practico Cinco nuevos miembros se han unido al club, por lo que sus datos deben incluirse en la base de datos. Lo siguiente detalla cmo se deber aadir los nuevos miembros para la de base de datos:

1. Introduzca el cdigo SQL en su base de datos, a continuacin ejectelo. Se


incluyen los nuevos miembros y sus categoras preferidas de las pelculas con la sentencia INSERT. Tenga en cuenta que si est utilizando Oracle, los formatos de fecha se debe cambiar de su actual formato de ao-mes-da a da-mes-ao.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

67

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

68

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

69

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

70

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

71

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

72

Pruebe las siguientes consultas...

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

73

Introducing Operator Precedence


La Declaracin Americana de la independencia establece que todos los hombres son creados iguales, pero no menciona nada sobre los operadores. Si lo hiciera, tendra que decir que todos los operadores son definitivamente no iguales. Una jerarqua de los operadores determina qu operador se evala en primer lugar. Si todos los operadores tendran igual precedencia, entonces todas las condiciones se interpretan de izquierda a derecha.
Si los operadores son diferentes, entonces los ms altos son evaluados primero, luego el siguiente ms alto, y as sucesivamente. En el siguiente cuadro se detallan todos los operadores lgicos. Su orden en el cuadro detalla la jerarqua de mayor a menor. Los operadores que figuran en la misma fila tienen el mismo orden de precedencia, por ejemplo, o si tiene la misma prioridad como TODOS.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

74

Recordar que el operador AND tiene precedencia sobre el operador OR, se puede adivinar la forma en que la siguiente sentencia SQL seria evaluado.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

75

Mas ejemplos prcticos sobre la precedencia de operadores

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

76

BETWEEN Operator

El operador BETWEEN le permite especificar un rango, donde el rango es de entre uno y otro valor. Hasta ahora, cuando usted necesita para comprobar si hay un valor dentro de un cierto rango, que utiliz el operador "mayor o igual al (> =) o el" menor o igual que "(<=). Las siguientes sentencias SQL utilizan el operador BETWEEN para seleccionar las pelculas con una calificacin crediticia entre 3 y 5:

Si utiliza el operador BETWEEN, se puede ver que ofrece exactamente los mismos resultados que los operadores "mayor o igual a "(> =) y" menor o igual que "(<=). Es sumamente importante recordar que el operador BETWEEN es inclusivo, lo que significa que en el anterior cdigo, 3 y 5 tambin se incluyen en el rango.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

77

Puede utilizar BETWEEN con tipos de datos distintos, como texto y las fechas. Tambin puede utilizar el operador BETWEEN en conjuncin con el operador NOT, en cuyo caso SQL selecciona un valor que no est en el intervalo de valores especificados, como puede ver en las siguientes sentencias.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

78

Between en accin
Explique

Explique

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

79

LIKE Operator El operador LIKE le permite utilizar caracteres comodn cuando se busca un personaje sobre el terreno. Un comodn es un carcter que no coincide con un carcter especfico, sino que coincide con cualquier carcter o de cualquier uno o ms caracteres. Un ejemplo de su uso sera averiguar los detalles de todos los miembros del Club de Pelcula cuyo apellido comienza con J. En el siguiente cuadro se detallan los dos caracteres disponibles.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

80

Like en accin

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

81

Nota: En algunos sistemas de bases de datos, el operador LIKE se distingue entre maysculas y minsculas; en otros no lo es. Oracle, por ejemplo, es distingue entre maysculas y minsculas, por lo LIKE 'J%' slo coincide con una J mayscula seguida de uno o ms caracteres. En el servidor SQL, como 'J%' coincide con una letra en maysculas o minsculas J seguido de uno o ms caracteres.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

82

Recuerde que en algunos sistemas de bases de datos, el operador LIKE se distingue entre maysculas y minsculas, de modo SIMILAR D___s comienza con un capital D. En otros sistemas coincide con maysculas y minsculas Ds. Oracle y DB2 distinguen entre maysculas y minsculas; MS SQL Server, MySQL, y MS Access no lo distinguen. Asimismo, recuerda que en MS Access es necesario que usted utilice un signo de interrogacin (?) en lugar del subrayado.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

83

Desarrolle el siguiente ejercicio prctico

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

84

Pruebe esta consulta

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

85

Ordering Results with ORDER BY

Hasta el momento, los resultados de una consulta han llegado, cualquiera que sea su fin la base de datos decide, que suele basarse en la orden en que se introdujeron los datos, a menos que la base de datos est diseado de otra manera (como pueden ver en los captulos posteriores).
Sin embargo, los resultados de una consulta lista en un orden determinado (una lista de nombres en orden alfabtico o una lista de aos en orden numrico), a menudo viene muy bien. SQL le permite especificar el orden de los resultados con la Clusula ORDER BY. La clusula ORDER BY va justo al final de la sentencia SELECT. Le permite especificar la columna o columnas que determinar el orden de los resultados y si la orden es ascendente (el ms pequeo a mayor) o descendente (mayor a menor).

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

86

Por ejemplo, la siguiente sentencia SQL muestra una lista de aos de lanzamiento de pelculas al cine.

Salida:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

87

Ejecute esta sentencia SQL:

Salida:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

88

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

89

Joining ColumnsConcatenation No slo SQL le permite consultar diversas columnas, sino que tambin le permite combinar una o ms columnas y dar como resultado la columna con un alias. Tenga en cuenta que el uso de un alias no tiene ningn efecto sobre la tabla en s; usted no crea realmente una nueva columna en la tabla, slo uno de los resultados establecidos. Por ejemplo, si usted tiene los datos de ABC y concatenar a DEF, se obtiene ABCDEF. Slo se tratara de concatenar literales de texto o columnas que tienen el tipo de dato char o varchar. Por lo tanto, cmo se van concatenando sobre el texto? Por desgracia, concatenar texto vara en funcin de la sistema de bases de datos que est utilizando. Usted simplemente necesita a leer la seccin de inters para el sistema de base de datos que est utilizando.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

90

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

91

Ejecute lo siguiente:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

92

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

93

Cul es la salida?

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

94

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

95

Selecting Data from More Than One Table Usando el SQL que has aprendido hasta el momento, se puede extraer datos de una sola tabla en la base de datos, que es muy a menudo debido a la limitacin de respuestas que requieren los datos de una o ms tablas. Los desarrolladores de SQL asumen esta limitacin y ponen en prctica una forma de unir datos de ms de una tabla en un conjunto de resultados. El uso de la palabra une no es accidental, en SQL esta palabra clave es JOIN y hace referencia a la unin de una o ms tablas. Posteriormente se examinaran todos los diferentes tipos de uniones, pero en esta parte se refiere a la ms comnmente utilizada (y tambin lo ms fcil de usar).

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

96

La sintaxis es :

Salida:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

97

Otra manera :

Salida :

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

98

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

99

Algo de ms complejidad? Interprete

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

100

Salida:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

101

Explique?

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

102

Salida:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

103

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

104

Advanced Database Design

Este captulo tiene que ver con mejorar el diseo de una base de datos en trminos de facilidad de gestin, la eficiencia, y limitar los riesgos de introduccin de datos no vlidos. El captulo comienza con un poco de teora y se refiere a la prctica, en particular la base de datos del Club de Cine. Se trata de mejorar la eficiencia en trminos de almacenamiento de datos y reduccin al mnimo del espacio perdido.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

105

Normalizacin Al inicio del curso se discuti la forma de disear la estructura de base de datos utilizando tablas y campos, a fin de evitar problemas como la duplicacin innecesaria de datos y la imposibilidad de identificar de forma exclusiva los registros.
Aunque no se pidi la normalizacin en aquel entonces, que fue el concepto utilizado. En esta seccin se explica la normalizacin con ms detalle y cmo utilizarlo para crear bien una estructura de bases de datos. La normalizacin consiste en una serie de directrices que ayuden a orientar en la creacin de una buena estructura de base de datos. Tenga en cuenta que son directrices y no reglas a seguir ciegamente. El diseo de bases de datos es, probablemente, tanto el arte como es la ciencia, y su propio sentido comn es importante, tambin.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

106

Las directrices de la normalizacin se dividen en formas normales; pensar de forma que el formato o la forma en que un estructura de base de datos est establecido. Examinaremos slo las tres primeras formas, para ir a la normalizacin de una base de datos. El objetivo de las formas normales es organizar la estructura de base de datos a fin de que cumpla con las normas de la primera forma normal, la segundo forma normal y, por ltimo, tercera forma normal.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

107

Primera forma normal Al inicio del curso camin a travs de algunos pasos bsicos para crear una buena organizacin de la estructura de la base de datos. En particular, se dijo que usted debe hacer lo siguiente: Definir los datos necesarios, porque se convierten en las columnas de una tabla. Asegrese de que no hay repeticin de grupos de datos. Asegrese de que hay una clave primaria. Estas normas son aquellas de la primera forma normal, por lo que has cubierto primera forma normal sin siquiera saberlo. En la base de datos del club cine, ya cumple con la primera forma normal, pero para refrescar la memoria, aqu se da un resumen breve de la primera forma normal. En primer lugar, debe definir los elementos de informacin. Esto significa mirar a los datos que deben almacenarse, la organizacin de los datos en columnas, definir qu tipo de dato cada columna contiene, y por ltimo, poner en columnas relacionadas con los de su propia tabla.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 108

El siguiente paso es asegurarse de que no hay repeticin de grupos de los datos. Un ejemplo de cmo los registros tienen el aspecto siguiente en la tabla para la 1FN, se muestra a continuacin:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

109

Segunda forma normal Primera forma normal requiere que todas las tablas deben tener una clave primaria. Esta clave primaria puede constar de uno o ms columnas. La clave principal es el identificador nico de ese registro, y la segunda forma normal establece que no debe haber dependencias parciales de cualquiera de las columnas de la clave primaria. Por ejemplo se puede crear una tabla llamada ActorFilms con las siguientes columnas:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

110

Solucin para que la tabla cumpla la 2FN.

I. Primero creamos una tabla que almacene las pelculas.

II. Segundo creamos una tabla que almacene los detalles de los autores.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

111

III . Finalmente creamos una tercera tabla que almacene los FilmIds Y ActorIds , para saber que actores protagonizaron que pelcula.

Ahora las tablas estn en segunda forma normal. Puedes buscar en cada tabla y se puede ver que todas las columnas son vinculado a la clave principal, salvo que las dos columnas en la tercera tabla componen la clave primaria.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

112

Tercera forma normal Tercera forma normal es un poco ms opcional, y su uso depende de las circunstancias. Una tabla est en tercera forma normal cuando se cumplan las siguientes condiciones: Es en la segunda forma normal. Todos los campos no primarios son dependientes de la clave primaria. La dependencia de campos no primarios se sita entre los datos.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

113

La dependencia de campos no primarios se sita entre los datos. Por ejemplo, nombre de calle, ciudad, estado son vinculados al cdigo postal. Por ejemplo, la calle, ciudad, y estado, tienen asignada un nico cdigo postal. La dependencia del cdigo postal y la direccin se llama una dependencia transitiva. Eche un vistazo a la base de datos del Cine Club. Puedes ver que esta tabla no esta en la tercera forma normal? Echa un vistazo a la tabla MemberDetails:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

114

La Calle, Ciudad, Estado y todos los campos tienen una dependencia transitiva en el campo de Cdigo postal. Para cumplir con tercera forma normal, todo lo que necesita hacer es mover la calle, Ciudad y Estado en sus mbitos propios de otra tabla, que usted puede llamar a la tabla de Cdigo Postal: Tabla: Cdigo Postal

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

115

A continuacin, modificar la tabla MemberDetails y eliminar los campos Calle, Ciudad, Estado, lo que deja el campo Cdigo como una manera de hacer coincidir la direccin que figura en el cuadro Cdigo postal: Tabla MemberDetails :

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

116

Las ventajas de eliminar las dependencias libres son principalmente de dos tipos. En primer lugar, la cantidad de datos se reduce y la duplicacin, y por tanto, se convierte la base de datos ms pequea. Dos o ms personas que viven en la misma calle en la misma ciudad en la misma ciudad tienen el mismo cdigo postal. En lugar de almacenar todos los datos en mas de una vez, almacenar slo una vez en la tabla Cdigo postal para que el Cdigo postal se almacene solo una vez. La segunda ventaja es la integridad de los datos. Cuando los datos duplicados cambian hay un gran riesgo de actualizacin de slo algunos de los datos, especialmente si se extiende en una serie de lugares diferentes en la base de datos. Si la direccin y cdigo postal de los datos se almacenan en tres o cuatro tablas diferentes, entonces cualquier cambio de los cdigos postales tendra que recorrer todos los registros en las tres o cuatro tablas. Sin embargo, si se almacenan todos en una sola tabla, entonces usted necesita cambiar en un solo lugar. Hay un aspecto negativo sin embargo, el cual aade complejidad y una menor eficiencia.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 117

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

118

Los operadores matemticos bsicos No es ninguna gran sorpresa al enterarse de que los cuatro operadores matemticos bsicos son multiplicacin, divisin, resta, y adems, que se enumeran en la tabla siguiente, junto con los operadores que SQL utiliza para ellos representan:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

119

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

120

Funciones matemticas comunes El estndar SQL (y casi todos las aplicaciones SQL) contiene cuatro funciones bsicas de matemticas. Sin embargo, una serie de otras funciones matemticas existen, que, aunque no en el estndar ANSI SQL, se encuentran en suficientes implementaciones de bases de datos que vale la pena listar aqu.
The ABS() Function :

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

121

The POWER() Function

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

122

The SQRT() Function

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

123

The RAND() Function

El RAND(), que es la abreviatura de azar, genera un nmero aleatorio fraccionada entre 0 y 1. Tenga en cuenta que en MS Access la funcin se llama RND(). Oracle, sin embargo, no es compatible con la funcin RAND (), pero s una funcin de apoyo RANDOM adicionales dentro de un paquete llamado DBMS_RANDOM.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

124

The CEILING() Function


El lmite mximo elimina todos los nmeros despus del punto decimal y redondea hasta el prximo nmero entero ms alto. Por ejemplo, 3,35 se redondeara por exceso al 4; 5,99 redondeado a 6, y -3,35 redondearn por exceso al -3. Si el redondeo de los nmeros negativos parece extrao (-4 por qu no en lugar de -3?), Slo recordar que el lmite mximo ronda hasta el nmero entero inmediatamente superior; los nmeros negativos que son ms cerca al 0 es superior en valor, por lo que -3 es superior a -4. En Oracle, el lmite mximo se llama CEIL(), pero funciona de la misma forma, slo el nombre es diferente. Tenga en cuenta tambin que el lmite mximo no est soportada en MS Access.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

125

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

126

The FLOOR() Function

La funcin FLOOR() trabaja en el sentido contrario como lmite mximo en el sentido de que los redondeos se realizan al siguiente ms bajo valor entero. Por ejemplo, 3,35 se redondear hacia abajo a 3; 5,99 redondear hacia abajo a 5, y -3,35 redondear hacia abajo a -4; -4 es inferior a -3. Una vez ms FLOOR() no es compatible con MS Access.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

127

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

128

The ROUND() Function En lugar de redondear siempre como lmite mximo o hacia abajo como lo hace FLOOR(), la funcin ROUND() redondea basado en los dgitos despus del punto decimal. Si el dgito despus del punto decimal es de 4 o menos, entonces es simplemente eliminado. Si el dgito despus del punto decimal es de 5 o ms, entonces el nmero se redondea al nmero mayor entero y el dgito es eliminado. Por ejemplo, 3.55 redondeado a un nmero entero utilizando ROUND() sera 4, mientras que 3.42 redondeado a un nmero entero que no deber exceder de 3.

Por lo tanto, -4,6 redondeado al prximo entero es ms alto -5. A diferencia de CEILING() y FLOOR(), la funcin ROUND() cuenta con el apoyo de MS Access.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

129

Sintaxis:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

130

Introducing String Functions En esta seccin usted camina a travs de una serie de funciones muy tiles que le permiten manipular cadenas y bsqueda basados en los datos. Cadena de datos es un nombre colectivo para un grupo de caracteres, como el nombre de una persona o un grupo de nmeros. A pesar de que cada carcter se almacena en su propia ubicacin de memoria, la base de datos le permite manipular una columna de caracteres al mismo tiempo.
The SUBSTRING() Function

El SUBSTRING () le permite obtener slo una parte de una cadena de uno o ms caracteres de la toda la cadena de caracteres. Cuando se utiliza esta funcin, es importante recordar que una cadena no es ms que un cadena de caracteres individuales. Por ejemplo, Wrox Press es una cadena, y cada uno de los personajes son de la siguiente manera:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

131

The SUBSTRING() Function

El SUBSTRING () trabaja en el carcter. La funcin toma tres parmetros: la cadena de la cual se obtiene la subcadena, el primer carcter que debe obtenerse, y el nmero de caracteres en total. Considere la siguiente sintaxis:

MS Access no utiliza el SUBSTRING(). En lugar de ello, emplea el MID(), que tiene exactamente la misma sintaxis y obra de la misma manera como lo hace el SUBSTRING(). As que si ests usando MS Access, dondequiera que vea SUBSTRING(), basta con sustituirla por MID(). Oracle y DB2 de IBM apoyan a la funcin SUBSTRING(), pero ellos lo llaman SUBSTR(). Si est utilizando Oracle o DB2, dondequiera que vea SUBSTRING(), sustituirla por SUBSTR ().

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

132

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

133

Case Conversion Functions

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

134

The REVERSE() Function

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

135

Funciones TRIM()
Recorte implica la eliminacin de caracteres no deseados desde el principio al final de una cadena. En la mayora de implementaciones de bases de datos, el nico personaje que se puede recortar es el espacio. Si quieres regresar los caracteres que se insertaron y sin espacios, puedes recortar los espacios con una de las dos funciones de acabado: LTRIM () o RTRIM(). LTRIM() elimina los espacios a la izquierda de los caracteres, mientras que RTRIM() elimina los espacios a la derecha de los caracteres. Por lo tanto, si desea eliminar los espacios del ejemplo en la tabla definida anteriormente, usted utilizara RTRIM ():

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

136

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

137

The LENGTH() Function

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

138

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

139

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

140

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

141

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

142

The CAST() function

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

143

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

144

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

145

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

146

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

147

The COALESCE() Function La funcin COALESCE() devuelve el primer valor NOT NULL de la lista de valores que le pasa como argumentos. Si todos los argumentos son NULL, entonces la funcin devuelve NULL. Tenga en cuenta que MS Access soporta esta funcin. Tenga en cuenta que cada argumento pasado a la funcin COALESCE() debe ser del mismo tipo de datos (una cadena o un nmero) o uno que pueda convertirse. Si obtiene un error al pasar diferentes tipos de datos como argumentos, entonces utilizar el CAST().

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

148

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

149

Veamos como utilizamos COALESCE() con MS SQL SERVER

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

150

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

151

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

152

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

153

Grouping Results En esta seccin se examina la clusula GROUP BY, que se utiliza en conjuncin con el comando SELECT. Permite que usted agrupe datos idnticos en un subconjunto. La Clusula GROUP BY es mas poderoso cuando se utiliza con SQL y con el resumen de funciones de agregacin. GROUP BY es tambin muy til con subconsultas, un concepto examinado en el Captulo 7. Example:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

154

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

155

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

156

Resumiendo y agregar los datos Hasta ahora, los resultados obtenidos de la base de datos han consistido en un conjunto de registros individuales en lugar de registros que se han resumido ,digamos, incluyendo un promedio de los registros o contando los mismos. Counting Results Puede utilizar el COUNT() para contar el nmero de registros en los resultados. Dentro de los parntesis de la funcin COUNT() inserte el nombre de la columna que desea contar. El valor devuelto en los resultados es el nmero de valores NO NULL en la columna. Alternativamente, usted puede insertar un asterisco (*), en cuyo caso todas las columnas de todos los registros de los resultados se cuentan con independencia de si el valor es NULL o no. La funcin COUNT() tambin puede aceptar las expresiones, por ejemplo COUNT(MemberID +CategoryID ).

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

157

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

158

Ejemplo de estudio

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

159

Sin embargo el uso de un alias para el COUNT(FavCategory.CategoryId) en la sentencia SELECT no es esencial. Usted podra haber logrado los mismos resultados con este SQL, que es, de hecho, el nico que MS Access acepta:

Sin embargo, dar un nombre significativo a la funcin agregada de los resultados hace que el cdigo ms legible.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

160

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

161

Adding Results La funcin SUM() aade todos los valores de la expresin que le pasan como argumento, ya sea de una columna o el resultado de un clculo. La sintaxis bsica es la siguiente: SUM(expression_to_be_added_together)

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

162

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

163

Averaging Results Si desea averiguar la media de una columna o de una expresin en los resultados, usted necesita utilizar la funcin AVG(). Esto funciona de la misma manera que la funcin SUM (), con la diferencia obvia de que obtiene un valor medio.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

164

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

165

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

166

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

167

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

168

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

169

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

170

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

171

En un ejemplo anterior, el presidente del club quiso saber cuntos miembros de su lista tienen como favorito la categora de la pelcula. El presidente tambin quera saber la lista ordenada de los ms populares a los menos populares de eleccin de la categora . Sin embargo, ahora el presidente quiere la lista para incluir slo aquellas categoras donde cuatro o ms de sus miembros figuran en sus categoras favoritas. Ejecutar el siguiente SQL para responder a la pregunta del presidente:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

172

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

173

Joins Revisited
Recuerde, un inner join se compone de la palabra clave INNER JOIN, que especifica que dos tablas se van a unir. Despus de la palabra clave INNER JOIN, se especifique una clusula, que identifica la condicin que debe cumplir cada tabla. La sintaxis bsica de un inner join es la siguiente: name_of_table_on_left INNER JOIN name_of_table_on_right ON condition

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

174

Equijoins and Non-equijoins

Usted podra utilizar un non-equijoin, por ejemplo, si usted desea una lista de las pelculas puesto en libertad despus del ao de nacimiento de cada uno de los miembros que viven en Golden State. El SQL necesario para este ejemplo es el siguiente (tenga en cuenta que la ejemplo no trabaja en Oracle, como Oracle no es compatible con el funcin YEAR().

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

175

Multiple Joins and Multiple Conditions


Usted puede tener ms de una tabla que se sumen a una consulta, lo cual es esencial cuando usted tiene la necesidad de unir ms de dos tablas a la vez. Por ejemplo, si desea una lista de los nombres de los miembros y los nombres de sus pelculas favoritas por categoras, usted necesita unir las tablas MemberDetails, Category, y FavCategory en la siguiente consulta:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

176

Tenga en cuenta que MS Access insiste que se coloque entre parntesis, por lo que usted necesita reescribir el anterior SQL de la siguiente manera:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

177

Vale la pena mencionar que un INNER JOIN en su declaracin no se limita a una sola condicin, que puede contener dos o ms. Por ejemplo, el siguiente SQL tiene dos condiciones en la posicin de la clausula ON.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

178

Cross Joins Una unin cruzada suma todas las filas de todas las tablas que figuran en la unin y se incluyen en los resultados. Puede definirse una unin cruzada de dos maneras. La primera manera de crear una unin cruzada es como se muestra en el siguiente cdigo, donde las tablas Category y Location estn unidas mediante CROSS JOIN:
Primera Forma:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

179

La anterior sintaxis es apoyada por Oracle, MySQL y MS SQL Server, pero no por IBM DB2 o MS Access. Una alternativa para la sintaxis de una unin cruzada no es ms que unirse a la lista todas los tablas, tal y como se muestra aqu:
Segunda Forma:

Prcticamente todas las bases de datos apoyan la segunda forma, por lo que es probablemente la mejor manera para llevar a cabo una unin cruzada. Ambas formas presentan el mismo resultado :

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

180

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

181

En este captulo se examina cmo puede anidar una consulta dentro de otra. SQL permite que las peticiones en consultas, o subconsultas, que estn dentro del SELECT. Esto puede sonar un poco extrao, pero las subconsultas pueden ser muy tiles. El inconveniente, sin embargo, es que pueden consumir una gran cantidad de procesamiento, disco, memoria y recursos.

A lo largo de este captulo, vers que hay referencias al exterior e interior de las subconsultas. Se muestra a continuacin es un estndar de consulta:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

182

Ejemplo 1 :

Subqueries in a SELECT List

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

183

Ejemplo 2 :

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

184

Ejemplo 3 :

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

185

Ejemplo 4 :

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

186

Ejemplo 5 :

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

187

Ejemplo 6 :

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

188

Subqueries in the WHERE Clause

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

189

Operators in Subqueries
Revisiting the IN Operator

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

190

Revisiting the IN Operator

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

191

Revisiting the IN Operator

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

192

Revisiting the YEAR( ) Function

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

193

Using the ANY, SOME, and ALL Operators

Continuara

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

194

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

195

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

196

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

197

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

198

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

199

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

200

Implementacin de procedimientos almacenados


Objetivos Describir cmo se procesa un procedimiento almacenado. Crear, ejecutar, modificar y eliminar un procedimiento almacenado. Crear procedimientos almacenados que acepten parmetros. Ejecutar procedimientos almacenados extendidos. Crear mensajes personalizados de error.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

201

Un procedimiento almacenado es una coleccin con nombre de instrucciones de Transact-SQL que se almacena en el servidor. Los procedimientos almacenados son un mtodo para encapsular tareas repetitivas. Admiten variables declaradas por el usuario, ejecucin condicional y otras caractersticas de programacin muy eficaces. SQL Server admite cinco tipos de procedimientos almacenados: Procedimientos almacenados del sistema (sp_) Almacenados en la base de datos master e identificados mediante el prefijo sp_, los procedimientos almacenados del sistema proporcionan un mtodo efectivo de recuperar informacin de las tablas del sistema. Permiten a los administradores del sistema realizar tareas de administracin de la base de datos que actualizan las tablas del sistema aunque stos no tengan permiso para actualizar las tablas subyacentes directamente. Los procedimientos almacenados del sistema se pueden ejecutar en cualquier base de datos.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 202

Procedimientos almacenados locales Los procedimientos almacenados locales se crean en las bases de datos de los usuarios individuales. Procedimientos almacenados temporales Los procedimientos almacenados temporales pueden ser locales, con nombres que comienzan por un signo de almohadilla (#), o globales, con nombres que comienzan por un signo de almohadilla doble (##). Los procedimientos almacenados temporales locales estn disponibles en la sesin de un nico usuario, mientras que los procedimientos almacenados temporales globales estn disponibles para las sesiones de todos los usuarios. Procedimientos almacenados remotos Los procedimientos almacenados remotos son una caracterstica anterior de SQL Server. Las consultas distribuidas admiten ahora esta funcionalidad.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

203

Procedimientos almacenados extendidos (xp_) Los procedimientos almacenados extendidos se implementan como bibliotecas de vnculos dinmicos (DLL, Dynamic-Link Libraries) que se ejecutan fuera del entorno de SQL Server. Normalmente, se identifican mediante el prefijo xp_. Se ejecutan de forma similar a los procedimientos almacenados. Los procedimientos almacenados en SQL Server son similares a los procedimientos de otros lenguajes de programacin ya que pueden: Contener instrucciones que realizan operaciones en la base de datos; incluso tienen la capacidad de llamar a otros procedimientos almacenados. Aceptar parmetros de entrada. Devolver un valor de estado a un procedimiento almacenado o a un proceso por lotes que realiza la llamada para indicar que se ha ejecutado correctamente o que se ha producido algn error, y la razn del mismo. Devolver varios valores al procedimiento almacenado o al proceso por lotes que realiza la llamada en forma de parmetros de salida.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 204

El procesamiento de un procedimiento almacenado conlleva crearlo y ejecutarlo la primera vez, lo que coloca su plan de consultas en la cach de procedimientos. La cach de procedimientos es un bloque de memoria que contiene los planes de ejecucin de todas las instrucciones de Transact-SQL que se estn ejecutando actualmente. El tamao de la cach de procedimientos flucta dinmicamente de acuerdo con los grados de actividad. La cach de procedimientos se encuentra en el bloque de memoria que es la unidad principal de memoria de SQL Server. Contiene la mayor parte de las estructuras de datos que usan memoria en SQL Server.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

205

Los procedimientos almacenados ofrecen varias ventajas. Pueden: Compartir la lgica de la aplicacin con las restantes aplicaciones, lo que asegura que el acceso y la modificacin de los datos se hace de una forma coherente. Los procedimientos almacenados pueden encapsular la funcionalidad del negocio. Las reglas o directivas empresariales encapsuladas en los procedimientos almacenados se pueden cambiar en una sola ubicacin. Todos los clientes pueden usar los mismos procedimientos almacenados para asegurar que el acceso y modificacin de los datos es coherente. Apartar a los usuarios de la exposicin de los detalles de las tablas de la base de datos. Si un conjunto de procedimientos almacenados permite llevar a cabo todas las funciones de negocio que los usuarios necesitan, los usuarios no tienen que tener acceso a las tablas directamente. Proporcionar mecanismos de seguridad. Los usuarios pueden obtener permiso para ejecutar un procedimiento almacenado incluso si no tienen permiso de acceso a las tablas o vistas a las que hace referencia.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 206

Mejorar el rendimiento. Los procedimientos almacenados implementan muchas tareas como una serie de instrucciones de Transact-SQL. Se puede aplicar lgica condicional a los resultados de las primeras instrucciones de Transact-SQL para determinar cules son las siguientes que deben ejecutarse.
Todas estas instrucciones de Transact-SQL y la lgica condicional pasa a ser parte de un nico plan de ejecucin del servidor.

Reducir el trfico de red. En lugar de enviar cientos de instrucciones de Transact-SQL por la red, los usuarios pueden realizar una operacin compleja mediante el envo de una nica instruccin, lo que reduce el nmero de solicitudes que se pasan entre el cliente y el servidor.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

207

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

208

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

209

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

210

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

211

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

212

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

213

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

214

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

215

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

216

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

217

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

218

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

219

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

220

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

221

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

222

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

223

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

224

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

225

Continuara .. Ejercicio Realice un formulario (VB.Net , C#.Net o Java) y utilice procedimientos almacenados para grabar, modificar, y eliminar.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

226

Transact SQL 2005

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

227

Microsoft Sql Server 2005 es un producto con muchas novedades comparndolo con su antecesor SQL 2000. Sin duda que uno de sus mayores cambios ha sido la inclusin del CLR dentro del motor de base de datos. Nos concentraremos en algunas de las tantas novedades que nos trae Microsoft SQL 2005 en lo que respecta a Transact-SQL, las cuales sern de mucha utilidad para los desarrolladores de aplicaciones como as tambin para los DBA. Transact SQL (TSQL) es el lenguaje que usamos para escribir : Store Procedures Triggers Querys Etc. Sin dudas que TSQL no dispone de las mismas habilidades y potencia que puede tener un lenguaje como C# o VB.NET. En Sql2005 veremos un cambio significativo en TSQL el cual nos ayudara en nuestro trabajo diario.
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

24/09/2009

228

Numerando Registros (RowId) En muchas ocasiones es necesario poder obtener una columna con el nmero de registro o tambin poder generar un ranking. Hasta SQL2000 este tipo de operaciones no eran tan simples de realizar y no disponamos de instrucciones directas. En TSQL 2005 disponemos de una serie de instrucciones las cuales nos hacen el trabajo mucho mas simple y eficiente. Veamos de qu se trata ello. Row_Number: Esta nueva funcin de TSQL nos permitir numerar los resultados de una query.

El siguiente ejemplo muestra el uso de esta funcin:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

229

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

230

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

231

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

232

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

233

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

234

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

235

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

236

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

237

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

238

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

239

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

240

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

241

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

242

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

243

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

244

Introduccin a Oracle 11g..

Continuara

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

245

Aplicaciones Java con JDBC

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

246

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

247

PERSISTENCIA EN JAVA

ENCUENTRO 1

SISTEMAS UNSCH

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

248

Hablar con las bases de datos

Ahora veremos la forma en que los programas Java puede interactuar con otras bases de datos o cualquier base de datos que se puede acceder usando el Lenguaje de Consulta Estructurado (SQL). En primer lugar voy a presentar las ideas bsicas detrs de bases de datos y la forma en que almacenar datos.
Esto lleva naturalmente en una discusin sobre SQL, el lenguaje que se utiliza con muchas bases de datos relacionales para definir consultas de datos y que es un requisito previo para el acceso a bases de datos en Java.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

249

Entonces usted ver en la Conectividad de bases de datos Java (JDBC), una biblioteca de clases, lo que proporciona una forma estndar para la creacin y el mantenimiento de un programa en Java para la conexin de una base de datos. Una vez que haya una conexin con un base de datos, puede utilizar SQL para acceder y procesar el contenido.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

250

En este primer encuentro, usted tomar un breve recorrido por los conceptos de bases de datos, SQL y JDBC. En lo siguiente entraremos en ms profundidad en las capacidades proporcionadas por JDBC y desarrollar una base de datos de navegacin de solicitud. En este encuentro usted aprender:
Que son las bases de datos La razn de ser del JDBC Cmo escribir un simple programa JDBC Cuales son los elementos clave de la API de JDBC

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

251

JDBC conceptos y la terminologa


Para asegurarnos de que tenemos un comn entendimiento de la jerga, primero voy a echar un vistazo a la terminologa de la base de datos. En primer lugar, en general, el acceso a los datos es el proceso de recuperacin o manipular los datos que se toma en local o remoto de un origen de datos. Las fuentes de los datos no tienen que ser relacional, pueden venir en una variedad de diferentes formas. Algunos ejemplos de fuentes de datos que usted puede realizar el acceso son los siguientes:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

252

1.
2.

3.

Acceso a distancia de una base de datos relacional en un servidor, por ejemplo, SQL Server Una base de datos local relacional en su ordenador, por ejemplo, Microsoft Access. Un archivo de texto en su ordenador. Una hoja de clculo.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

253

JDBC es, por definicin, una interfaz a las fuentes de datos relacionales. Si bien es concebible que fuentes no relacional pueden ser accesibles a travs de JDBC, se le concentra en las bases de datos relacionales. Si no ha trabajado antes con bases de datos relacionales, debe todava ser capaz de seguir debatiendo frente a esto. La estructura de una base de datos relacional es bastante lgico y fcil de aprender, y aunque no pueda proporcionarle una completa informacin sobre l, aqu voy a cubrir una cantidad suficiente de los elementos bsicos para hacerlo comprensible, incluso si nunca has trabajado con bases de datos antes.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

254

La base de datos de Java Connectivity (JDBC), provee una biblioteca que proporciona los medios para que pueda ejecutar sentencias SQL dentro de un programa Java, para acceder y operar sobre una base de datos relacional. JDBC esta basada en la interfaz de programacin de aplicaciones (API) para acceso a bases de datos y est destinado a ser un estndar para que los desarrolladores de Java y base de datos de los proveedores pueden adherirse. La biblioteca esta en el paquete java.sql. Se trata de un conjunto de clases e interfaces que proporciona un API uniforme para el acceso a una amplia gama de bases de datos.

Las operaciones que desee realizar sobre una base de datos relacional se expresan en un idioma que esta diseado especficamente para este fin, ms comnmente conocida como SQL.
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

24/09/2009

255

SQL no es como un lenguaje de programacin convencional, como Java. SQL es un lenguaje declarativo, lo que significa que SQL le dice al servidor de base de datos lo que quieres hacer, pero no cmo debe ser el hecho hasta el servidor. Cada comando SQL es analizada por el servidor de bases de datos, y la operacin que describe es llevada a cabo por una pieza de software que se suele hacer referencia como el motor base de datos .

Un motor de base de datos se asocia con una particular puesta en marcha de una base de datos relacional, aunque no necesariamente es nica. Diferentes implementaciones de bases de datos comerciales podrn utilizar un motor comn de base de datos.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

256

Tablas

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

257

Tablas

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

258

Tablas

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

259

Introduccin de SQL
Es un Lenguaje de consulta estructurado (SQL), aceptada internacionalmente como la norma oficial para el acceso a bases de datos. Una de las principales razones para la aceptacin de SQL como el lenguaje de consultas relacionales es la arquitectura cliente / servidor que se inici a finales del decenio de 1980.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

260

SQL es diferente de otros lenguajes de programacin que usted puede estar familiarizado con todo en el sentido de que es declarativo, no de procedimiento. En otras palabras, usted no usa SQL para definir procesos complejos, sino usa SQL para cuestin de comandos que definen y manipulan los datos. La primera cosa que usted vera de SQL es que es muy legible. La forma en que cada consulta se ha estructurado se lee como una oracin en Ingls. La sintaxis es fcil de aprender, y las construcciones y los conceptos son muy fcil de entender. Veamos el ejemplo de una base de datos que has visto anteriormente la base de datos technical_library

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

261

Sentencias SQL
La mayora de sentencias SQL y, desde luego, los que usted va a utilizar, caen claramente en dos grupos: Lenguaje de definicin de datos (DDL), declaraciones que se utilizan para describir las tablas y los datos que contienen.

Lenguaje de manipulacin de datos (DML), declaraciones que se utilizan para operar sobre los datos de la base de datos.
DML puede dividirse en dos grupos: SELECT-Las declaraciones que devuelven un conjunto de resultados. Todo lo dems-Las declaraciones que no devuelven un conjunto de resultados.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 262

Para crear las tablas en el ejemplo, usted podra utilizar DDL, que define una sintaxis de comandos tales como CREATE TABLE y ALTER TABLE. Usted podra utilizar las declaraciones DDL para definir la estructura de la base de datos. Para llevar a cabo operaciones en la base de datos de aadir filas a una tabla o la consulta de los datos, por ejemplo, usted podra utilizar las declaraciones DML.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

263

He aqu un ejemplo tpico de una declaracin DDL

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

264

El paquete JDBC La biblioteca JDBC fue diseado como una interfaz para ejecutar sentencias SQL, y no como un compromiso de alto nivel capa de abstraccin para el acceso a los datos. Adems permite en gran escala escribir aplicaciones para la interfaz JDBC sin preocuparse demasiado sobre la base de datos que se desplegar con la solicitud. Una aplicacin JDBC est bien aislado de las caractersticas particulares del sistema de base de datos que utiliza y, por tanto, no tiene que ser reingeniera de bases de datos especficas.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

265

Desde el punto de vista del usuario, una aplicacin Java que trabaja con una base de datos se muestra conceptualmente como:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

266

Conexin con la Base de Datos y consultas elementales

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

267

URL y JDBC
Una hace referencia a un URL de recursos electrnicos, tales como una de la pagina de la World Wide Web o un archivo en un servidor de FTP, que identifica de forma exclusiva ese recurso. URL desempear un papel central en el desarrollo de aplicaciones de red en Java. JDBC utiliza URLs para identificar los lugares de ambos conductores y fuentes de datos. URL JDBC tienen el siguiente formato: JDBC: Subprotocolo: data_source_identifier

El rgimen JDBC indica que la URL se refiere a una fuente de datos JDBC. El sub-protocolo identifica el Driver JDBC para su uso. Por ejemplo, el puente JDBC-ODBC, utiliza el conductor identificador ODBC. El driver JDBC dicta el formato de la fuente de datos de identificacin. En el ejemplo anterior, el puente JDBC-ODBC simplemente utiliza el nombre de la fuente de datos ODBC . Para utilizar el controlador ODBC con la fuente de datos ODBC technical_library, usted podra crear una URL con el siguiente formato: JDBC: ODBC: technical_library

En relacin a JDBC ODBC


Existe un vnculo muy estrecho entre la cartografa de la arquitectura JDBC y la Open DataBase Connectivity (ODBC), fundamentalmente porque se basan en la mismo nivel, el SQL X / Open CLI; JDBC es mucho ms fcil de usar. Debido a su ascendencia comn, comparten algunos importantes componentes conceptuales:
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 268

Componentes Conceptuales

Carga el driver de la base de datos y gestiona las conexiones entre la aplicacin y el conductor Traduce llamadas a la API, en las operaciones de una determinada fuente de datos Una sesin entre una aplicacin y una base de datos

La informacin sobre los datos devueltos, la base de datos, y el conductor


Conjunto Lgico de columnas y filas de los datos devueltos por la ejecucin de una declaracin Una sentencia SQL para realizar una consulta o actualizacin de operacin
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

24/09/2009

269

JDBC Bsico Asumiendo que han seguido las instrucciones dadas al comienzo de la presentacin, y tienen la necesaria base de datos de ejemplo y el controlador de la base de datos instalado en su mquina, usted est listo para ver una base JDBC ,programa que involucra los siguientes pasos: 1.Importar las clases necesarias. 2. Cargar el driver JDBC. 3. Identificar el origen de datos. 4. Asignar un objeto de conexin. 5. Asignar una declaracin objeto. 6. Ejecuta una consulta mediante la declaracin de objeto. 7. Recuperar datos de la devolucin del objeto ResultSet. 8. Cerrar el ResultSet. 9. Cerrar la Declaracin objeto. 10. Cerrar el objeto Connection. A lo largo de esta presentacin usted acumulara suficiente comprensin de JDBC para aplicar los elementos esenciales de dicho programa.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 270

La arquitectura de JDBC est basado en una coleccin de interfaces Java y las clases que juntos le permiten conectarse a fuentes de datos, para crear y ejecutar sentencias SQL, y para recuperar y modificar datos en un base de datos. Estas operaciones se ilustra en la Figura.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

271

En todos los ejemplos que usted observara en la presentacin, utilizara el puente JDBC-ODBC , sun.jdbc.odbc.JdbcOdbcDriver- conductor -para acceder al MS Access technical_library.mdb base de datos que he asumido ha sido creado con un Microsoft Access controlador ODBC como se describe en la seccin anterior.

Veamos como podemos conectar a una base de datos Ms Access con JDBC-ODBC

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

272

package jdbc_odbc;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class MakingTheConnection { public static void main(String[] args) { // Load the driver try { // Load the driver class Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // Define the data source for the driver

String sourceURL = "jdbc:odbc:HJP"; // Create a connection through the DriverManager Connection databaseConnection = DriverManager.getConnection(sourceURL); System.out.println("Connection is: "+databaseConnection); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe); } catch(SQLException sqle) { System.err.println(sqle); } } }
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 273

Usando el ResultSet de referencia, se puede recuperar el valor de cualquier columna para la fila actual (tal como se especifica por el cursor) por su nombre o por posicin. Tambin puede determinar la informacin sobre las columnas, por ejemplo como el nmero de columnas devueltas o los tipos de datos de las columnas. La interfaz ResultSet declara los siguientes mtodos bsicos para recuperar una columna de datos para la fila actual, los tipos utilizados en Java son:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

274

Tenga en cuenta que esta lista no es completa, pero no es probable que necesite saber acerca de los dems. Para una lista completa de los mtodos disponibles, eche un vistazo a la documentacin para la interfaz ResultSet. All estn sobrecargadas versiones de cada uno de los mtodos se muestra en el cuadro anterior que ofrecen dos formas de identificacin de la columna que contiene los datos. La columna se puede seleccionar con el nombre de la columna SQL, como una cadena o pasando un argumento ndice de tipo int, donde la primera columna tiene el valor ndice 1. Tenga en cuenta que los nombres de columna no se distingue entre maysculas y minsculas para que "FirstName" es el mismo como firstName".

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

275

La mayora de los mtodos bsicos de acceso a datos son muy flexibles en la conversin de tipos de datos SQL para tipos de datos Java. Por ejemplo, si usa getInt() en un campo de tipo CHAR, el mtodo se tratar de analizar los personajes suponiendo que se especifico un nmero entero. Del mismo modo, se puede leer tipos numricos de SQL usando la getString().

Con todos estos mtodos, la ausencia de un valor, lo cual es un NULL SQL, se devuelve, ya sea como el equivalente de cero, o como nulo, segn el objeto de referencia devuelto. As, un campo booleano NULL devolver falso, y una campo numrico NULL devolver 0. Si accede a una base de datos y se produce error cuando ejecuta un getXXX() para un resultset, una excepcin de tipo SQLException se lanzar.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

276

La API de JDBC proporciona el acceso a los metadatos, no slo para la conexin de objeto, sino tambin para la ResultSet objeto. La API de JDBC proporciona un objeto ResultSetMetaData que le permite mirar los datos detrs del objeto ResultSet. Si piensa en la prestacin de servicios de navegacin interactiva en su aplicaciones JDBC, usted encontrar esta especialmente til.
En conjunto de estas clases e interfaces constituyen la mayor parte de los componentes JDBC. Vamos a poner ahora en prctica con un ejemplo sencillo.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

277

package JDBC_CONEXION; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.sql.ResultSet; public class MakingAStatement { public static void main(String[] args) { // Load the driver try { // Load the driver class Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // This defines the data source for the driver String sourceURL = new String("jdbc:odbc:HJP"); //Crear conexin a travs de la DriverManager Connection databaseConnection =DriverManager.getConnection(sourceURL); Statement statement = databaseConnection.createStatement(); ResultSet authorNames = statement.executeQuery("SELECT lastname, firstname FROM authors"); // Salida de datos del resultset while(authorNames.next()) { System.out.println(authorNames.getString("lastname")+" "+ authorNames.getString("firstname")); } }catch(ClassNotFoundException cnfe) { System.err.println(cnfe); }catch(SQLException sqle) { System.err.println(sqle); } } } Hubner Janampa Patilla - Administracin

24/09/2009

de Bases de Datos - 2009

278

Configurar el tiempo de inicio de sesin


La clase DriverManager proporciona un par de mtodos de acceso para el perodo de tiempo de inicio de sesin. Estos permiten que usted especifique un perodo de tiempo (en segundos) que limita el tiempo que un driver est dispuesto a esperar para que inicie la conexin a la base de datos. Los dos mtodos de acceso son los siguientes:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

279

Se especifica que el periodo de tiempo no predeterminado puede ser til para aplicaciones de que estn teniendo dificultades para la conexin a un servidor de bases de datos remotas. Por ejemplo, si su aplicacin est intentando conectarse con un servidor muy ocupado, la solicitud podra parecer que han colgado. Puede decirle al DriverManager el fracaso del intento de conexin cuando especificamos un perodo de tiempo. El fragmento de cdigo a continuacin le dice al DriverManager a fracasar el intento de acceso despus de 60 segundos:
package jdbc_expire; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class jdbc_expire { public static void main(String[] args) { String driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; String sourceURL = "jdbc:odbc:technical_library"; try { Class.forName(driverName); DriverManager.setLoginTimeout(60); // fail after 60 seconds Connection databaseConnection = DriverManager.getConnection(sourceURL); } catch(ClassNotFoundException cnfe) { System.err.println("Error loading " + driverName); } catch(SQLException sqle) { System.err.println(sqle); } }}
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 280

Cmo funciona? Una vez que la conexin ha sido establecida por la llamada del mtodo getConnection(), el siguiente paso es crear la declaracin de un objeto que le permite ejecutar una sentencia SQL y recuperar los resultados. Para crear una declaracin de objeto, simplemente llame al mtodo createStatement() del objeto de conexin. Una vez que haya creado la declaracin de un objeto para ejecutar una consulta SQL contra la base de datos conectada, pase un objeto String como argumento para el mtodo executeQuery(). El executeQuery() devuelve un objeto que implementa la interfaz ResultSet. Como su nombre implica, la interfaz ResultSet le permite obtener la informacin de que fue recuperado por la consulta. T puedes pensar en la interfaz ResultSet como un proporcionador de filas, o como una tabla virtual de resultados. El ResultSet proporciona interiormente un cursor o puntero lgico para hacer un seguimiento de su fila actual. En un ResultSet lo primero que regresa es el cursor que se coloca justo antes de la primera fila de datos. Este mecanismo se ilustra en la Figura.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 281

Mecanismo de funcionamiento acceso a datos con JDBC-ODBC

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

282

Obtener los metadatos de un Resultset El mtodo getMetaData() para un objeto ResultSet devuelve una referencia a un objeto de tipo java.sql.ResultSetMetaData que encapsula los metadatos para el resultset. La interfaz ResultSetMetaData declara mtodos que le permiten obtener los elementos de los metadatos para el resultset. El getColumnCount() devuelve el nmero de columnas en el resultset como un valor de tipo int. Para cada columna, se puede obtener el nombre de la columna y el tipo de columna llamando a los mtodos getColumnName() y getColumnType() respectivamente. En ambos casos, especificar la columna por su valor ndice. El nombre de la columna se devuelve como un objeto String, y el tipo de columna se devuelve como un valor de tipo int que identifica el tipo SQL. Los tipos de clase en el paquete publico java.sql define los campos de tipo int que identifica los tipos SQL, y los nombres de esos miembros de la clase de datos son los mismos que los tipos que SQL representa como CHAR, VARCHAR, DOBLE, INT, TIME, y as sucesivamente.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 283

De este modo, se puede enumerar los nombres de las columnas en un resultset que eran de tipo CHAR con el siguiente cdigo:

Usted podra ver el contenido del valor de los datos de cada fila de un objeto ResultSet que son del tipo SQL CHAR con el siguiente cdigo:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

284

Tambin puede obtener el nombre del tipo de una columna como una cadena llamando a la getColumnTypeName(). Otro mtodo muy til es getColumnDisplaySize(), que devuelve el importe mximo del nmero de caracteres necesarios para visualizar los datos almacenados en la columna. Pasar el nmero de ndice de la columna que usted est interesado en como argumento. El regreso el valor es de tipo INT. Usted puede utilizar este formato para ayudar a la salida de la columna de datos. Toda una gama de otros mtodos de metadatos suministrados por un resultset encontrar en la documentacin para la interfaz ResultSetMetaData.

Aqu hay una lista de unos mtodos ms que a usted le puede resultar muy til-que todos ellos requieren un argumento que es el numero de columna de tipo int:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

285

Lista de mtodos

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

286

EJEMPLO PRACTICO

SISTEMAS

DISEO DE LA BASE DE DATOS

UNSCH

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

287

Diseo de tablas de la base de datos


El primer paso en el diseo de las tablas que usted necesita en su base de datos es decidir qu informacin desea capturar. Entonces usted puede disear tablas en torno a esa informacin. Con la base de datos technical_library, se desea hacer un seguimiento de los siguientes tipos de cosas: Libros (Books) artculos (Articles) Autores (Authors) Editores (Publishers) Para cada una de estas categoras de informacin, llamados entidades en la jerga de bases de datos, usted desea grabar un conjunto especfico de datos, como sigue:
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 288

Ejemplo de acceso a la Base de Datos

Tres formas de recorrer desde Java contra la base de datos mediante el objeto ResulSet y ResultSetMetaData

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

289

package javaapplication26;
import java.sql.Connection; import java.sql.Statement; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class EssentialJDBC { Connection connection; Statement statement; String sourceURL = "jdbc:odbc:technical_library"; String queryIDAndName = "SELECT authid, lastname, firstname FROM authors"; String queryWildcard = "SELECT * FROM authors"; // Select all columns

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

290

public static void main (String[] args) { EssentialJDBC SQLExample = new EssentialJDBC(); // Create application object SQLExample.getResultsByColumnName(); SQLExample.getResultsByColumnPosition(); SQLExample.getAllColumns(); SQLExample.closeConnection(); } public EssentialJDBC() { // Constructor to establish the connection and create a Statement object... try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); connection = DriverManager.getConnection(sourceURL); statement = connection.createStatement(); } catch(SQLException sqle) { System.err.println("Error creating connection"); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe.toString()); } }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

291

void getResultsByColumnName() { // Execute wildcard query and output selected columns... try { ResultSet authorResults = statement.executeQuery(queryWildcard); int row = 0; while(authorResults.next()) { System.out.println("Row" + (++row) + ") "+ authorResults.getString("authid")+ " " + authorResults.getString("lastname")+ " , "+ authorResults.getString("firstname")); } authorResults.close(); } catch (SQLException sqle) { System.err.println ("\nSQLException-------------------\n"); System.err.println ("SQLState: "+ sqle.getSQLState()); System.err.println ("Message : " + sqle.getMessage()); } }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

292

void getResultsByColumnPosition() { // Execute ID and name query and output results... try { ResultSet authorResults = statement.executeQuery(queryIDAndName); int row = 0; while (authorResults.next()) { System.out.print("\nRow " + (++row) + ") "); for(int i = 1 ; i<=3 ; i++) { System.out.print((i>1?", ":" ")+authorResults.getString(i)); } } authorResults.close(); // Close the resultset } catch (SQLException ex) { System.err.println("\nSQLException-------------------\n" ); System.err.println("SQLState: " + ex.getSQLState()); System.err.println("Message : " + ex.getMessage()); } }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

293

void getAllColumns() { // Execute wildcard query and output all columns... try { ResultSet authorResults = statement.executeQuery(queryWildcard); ResultSetMetaData metadata = authorResults.getMetaData(); int columns = metadata.getColumnCount(); // Column count int row = 0; while (authorResults.next()) { System.out.print("\nRow " + (++row) + ") "); for(int i = 1 ; i<=columns ; i++) { System.out.print((i>1?", ":" ")+authorResults.getString(i)); } } authorResults.close(); // Close the resultset } catch (SQLException ex) { System.err.println("\nSQLException-------------------\n"); System.err.println("SQLState: " + ex.getSQLState()); System.err.println("Message : " + ex.getMessage()); } }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

294

// Close the connection void closeConnection() { if(connection != null) { try { connection.close(); connection = null; } catch (SQLException ex) { System.out.println("\nSQLException-------------------\n"); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("Message : "+ ex.getMessage()); } } }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

295

El uso de un objeto PreparedStatement


Vamos a poner una declaracin preparada en accin. Esto lo veremos en profundidad en lo que queda del curso. Use el cdigo de ejemplo que ejecuta el mismo SQL SELECT utilizando tanto el estado y los objetos PreparedStatement. Para cada uno de estos, los resultados se mostrarn junto con los metadatos.

En primer lugar se definir un esquema de la clase StatementTest y sus estados de sus miembros. En el mtodo main () se ejemplifica el objeto StatementTest y luego llamar a los mtodos doStatement () y doPreparedStatement () para ese objeto:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

296

package javaapplication27;
import java.sql.Connection; import java.sql.Statement; import java.sql.PreparedStatement; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class StatementTest { Connection databaseConnection; // Connection to the database String driverName; // Database driver name String sourceURL; // Database location public static void main(String[] args) { try { StatementTest SQLExample = new StatementTest(); SQLExample.doStatement(); SQLExample.doPreparedStatement(); } catch(SQLException sqle) { System.err.println("SQL Exception: " + sqle); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe.toString()); } }
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 297

public StatementTest() throws SQLException, ClassNotFoundException { driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; sourceURL = "jdbc:odbc:technical_library"; Class.forName (driverName); databaseConnection = DriverManager.getConnection(sourceURL); } public void doStatement() throws SQLException { Statement myStatement = databaseConnection.createStatement(); ResultSet myResults = myStatement.executeQuery( "SELECT authid, lastname, firstname FROM authors ORDER BY authid"); showResults(myResults); } public void doPreparedStatement() throws SQLException { PreparedStatement myStatement = databaseConnection.prepareStatement( "SELECT authid, lastname, firstname FROM authors ORDER BY authid"); ResultSet myResults = myStatement.executeQuery(); showResults(myResults); }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

298

public void showResults(ResultSet myResults) throws SQLException { // Retrieve ResultSetMetaData object from ResultSet ResultSetMetaData myResultMetadata = myResults.getMetaData(); // How many columns were returned? (Cuntas columnas fueron devueltos) int numColumns = myResultMetadata.getColumnCount(); System.out.println(" ---------------------Query Results-------------------------"); // Loop through the ResultSet and get data (Bucle a travs del ResultSet y obtener datos) while(myResults.next()) { System.out.printf("%-5d", myResults.getInt(1)); // 1st Column only for(int column = 2; column <= numColumns; column++) { System.out.print(myResults.getString(column)+" "); } System.out.print("\n"); } System.out.println("\n\n-----------Query Metadata----------------"); System.out.println("ResultSet contains " + numColumns + " columns"); for (int column = 1; column <= numColumns; column++) { System.out.println("\nColumn "+ column); System.out.println("column : " + myResultMetadata.getColumnName(column)); // Print the column name System.out.println(" label : " + myResultMetadata.getColumnLabel(column)); // Print the label name System.out.println(" display width : " + myResultMetadata.getColumnDisplaySize(column) +"characters"); // Print the columns display size System.out.println(" data type : " + myResultMetadata.getColumnTypeName(column)); // Print the column type }}}
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 299

Proyecto de Aplicacin

Software Interactivo Java/Sql

Persistencia en Java Jdk 1.6

1. Construccin a puro cdigo

2. Construccin con IDE de Netbeans (matisse)


24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 300

package jdbc_interactivo;
import java.awt.BorderLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JTextArea; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JScrollPane; import javax.swing.JTable; import java.sql.DriverManager; import java.sql.Connection; import java.sql.Statement; import java.sql.SQLException;

Desarrollo del Sw a puro cdigo

public class InteractiveSQL extends JFrame implements ActionListener { public static void main(String[] args) { // Set default values for the command line args String user = "guest"; String password = "guest"; String url = "jdbc:odbc:technical_library"; String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; // Up to 4 arguments in the sequence database url,driver url, user ID, password switch(args.length) { case 4: // Start here for four arguments password = args[3]; // Fall through to the next case case 3: // Start here for three arguments user = args[2]; // Fall through to the next case case 2: // Start here for two arguments driver = args[1]; // Fall through to the next case case 1: // Start here for one argument url = args[0]; } InteractiveSQL theApp = new InteractiveSQL(driver, url, user, password); }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

301

public InteractiveSQL(String driver, String url, String user , String password) { super("InteractiveSQL"); // Call base constructor setBounds(0, 0, 400, 300); // Set window bounds setDefaultCloseOperation(DISPOSE_ON_CLOSE); // Close window operation addWindowListener(new WindowAdapter() { // Listener for window close // Handler for window closing event public void windowClosing(WindowEvent e) { dispose(); // Release the window resources -Suelte la ventana de recursos System.exit(0); // End the application } } ); // Add the input for SQL statements at the top command.setToolTipText("Key SQL commmand and press Enter"); getContentPane().add(command, BorderLayout.NORTH); // Add the status reporting area at the bottom status.setLineWrap(true); status.setWrapStyleWord(true); getContentPane().add(status, BorderLayout.SOUTH); // Create the menubar from the menu items JMenu fileMenu = new JMenu("File"); // Create File menu fileMenu.setMnemonic('F'); // Create shortcut fileMenu.add(clearQueryItem); // Add clear query item fileMenu.add(exitItem); // Add exit item menuBar.add(fileMenu); // Add menu to the menubar setJMenuBar(menuBar); // Add menubar to the window // Add listeners for text field and menu items command.addActionListener(this); clearQueryItem.addActionListener(this); exitItem.addActionListener(this);

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

302

// Establish a database connection and set up the table try { Class.forName(driver); // Load the driver connection = DriverManager.getConnection(url, user, password); statement = connection.createStatement(); model = new ResultsModel(); // Create a table model JTable table = new JTable(model); // Create a table from the model table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // Use scrollbars resultsPane = new JScrollPane(table); // Create scrollpane for table getContentPane().add(resultsPane, BorderLayout.CENTER); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe); // Driver not found } catch(SQLException sqle) { System.err.println(sqle); // error connection to database } pack(); setVisible(true); } // Handles action events for menu items and the text field //Tiradores de accin para eventos de los elementos del men y el campo de texto public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if(source == command) { // Enter key for text field input executeSQL(); } else if(source == clearQueryItem) { // Clear query menu item command.setText(""); // Clear SQL entry } else if(source == exitItem) { // Exit menu item dispose(); // Release the window resources System.exit(0); // End the application } }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

303

// Executes an SQL command entered in the text field public void executeSQL() { String query = command.getText(); // Get the SQL statement if(query == null||query.length() == 0) { // If there's nothing we are done return; } try { model.setResultSet(statement.executeQuery(query)); status.setText("Resultset has " + model.getRowCount() + " rows."); } catch (SQLException sqle) { status.setText(sqle.getMessage()); // Display error message } } JTextField command = new JTextField(); // Input area for SQL JTextArea status = new JTextArea(3,1); // Output area for status and errors JScrollPane resultsPane; JMenuBar menuBar = new JMenuBar(); // The menu bar JMenuItem clearQueryItem = new JMenuItem("Clear query"); // Clear SQL item JMenuItem exitItem = new JMenuItem("Exit"); // Exit item Connection connection; Statement statement; ResultsModel model; } // Connection to the database // Statement object for queries // Table model for resultset

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

304

package jdbc_interactivo; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import javax.swing.table.AbstractTableModel; import java.util.Vector; class ResultsModel extends AbstractTableModel { public void setResultSet(ResultSet results) { try { ResultSetMetaData metadata = results.getMetaData();

int columns = metadata.getColumnCount(); // Get number of columns columnNames = new String[columns]; // Array to hold names // Get the column names for(int i = 0; i < columns; i++) { columnNames[i] = metadata.getColumnLabel(i+1); } // Get all rows dataRows.clear(); // Empty vector to store the data String[] rowData; // Stores one row while(results.next()) { // For each row... rowData = new String[columns]; // create array to hold the data for(int i = 0; i < columns; i++) { // For each column rowData[i] = results.getString(i+1); // retrieve the data item } dataRows.addElement(rowData); // Store the row in the vector } fireTableChanged(null); // Signal the table there is new model data
} catch (SQLException sqle) { System.err.println(sqle); } } Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

24/09/2009

305

public int getColumnCount() { return columnNames.length; }

public int getRowCount() { return dataRows == null ? 0 : dataRows.size(); }


public String getValueAt(int row, int column) { return dataRows.elementAt(row)[column]; } public String getColumnName(int column) { return columnNames[column] == null ? "No Name" : columnNames[column]; } private String[] columnNames = new String[0]; // Empty array of names private Vector<String[]> dataRows = new Vector<String[]>(); // Vector of rows }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

306

Salida del software InteractiveSQL a puro cdigo

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

307

Matisse - Nuevo constructor de GUI para Netbeans El proyecto Netbeans anunci hace poco la prxima integracin de un nuevo creador de GUI en su plataforma. Este siempre ha sido un punto destacado en el IDE Netbeans frente a otros IDEs como Eclipse. Con este nuevo mdulo se simplifica todava ms la tarea de construccin del GUI de una aplicacin. En lugar de estar basado en la seleccin y ajuste por parte del desarrollador de un layout manager Swing, Matisse permite la creacin en un modo libre de la interface y el propio entorno infiere el layout manager y el resto de caractersticas del mismo, como reglas de redimensionado, espaciado, etc. Ahora est disponible una versin preview funcional de Matisse para su evaluacin. Ms informacin: Pgina de Matisse (http://www.netbeans.org/files/documents/4/475/matisse.html) Demo (Flash)
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 308

El JDBC en accin

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

309

El JDBC en accin
En esta clase voy a extender sobre la base de datos de Java Connectivity (JDBC) y la interfaz de programa de aplicacin (API). En esta presentacin usted va a obtener ms informacin acerca de: Mapeo relacional de datos a objetos Java. El mapeo entre SQL y tipos de datos Java. Cmo limitar los datos creada en un resultset Cmo limitar el tiempo dedicado a la ejecucin de una consulta

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

310

Cmo utilizar un objeto PreparedStatement para crear una sentencia SQL parametrizada. Cmo se puede ejecutar la actualizacin de bases de datos y borrar sus operaciones en programas Java Cmo puede obtener ms informacin de los objetos SQLException. Qu es un objeto SQLWarning y lo que puedes hacer con ellos?

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

311

Tipos de datos y JDBC ResultSet proporciona una serie de mtodos para la recuperacin de diferentes tipos de datos.

Para usar estos de manera eficaz, usted necesita ver a los tipos de datos SQL y comprender la forma en que java mapea los datos de los distintos tipos en su programa.
Mapeo entre Java y tipos de datos SQL El estndar SQL-92 define un conjunto de tipos de datos que no coinciden uno por uno con los que estn en Java. Ya que al escribir aplicaciones que se mueven los datos de SQL para Java y viceversa , tendr que tener en cuenta cmo JDBC realiza la cartografa. Es decir, lo que necesita saber es el tipo de dato Java que usted necesita para representar un determinado tipo de dato de SQL, y viceversa.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 312

Mapeo entre Java y tipos de datos SQL

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

313

Mapeo entre Java y tipos de datos SQL

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

314

Mapeo entre Java y tipos de datos SQL

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

315

Declaracin de Interfaces y ResultSet


La forma en que la informacin se maneja a nivel del objeto suele ser diferente de la forma en que los datos son almacenada en una base de datos relacional. En el mundo de los objetos, el principio subyacente es que esos objetos exhiben las mismas caractersticas (informacin y comportamiento), como su mundo real de sus homlogos en otros. Es decir, los objetos en funcin del nivel del modelo conceptual.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

316

Las Bases de datos relacionales, por otra parte, trabaja en el modelo de datos. Como has visto, las bases de datos relacionales almacenar informacin utilizando formularios normalizados, donde los objetos conceptuales como las facturas y los clientes pueden ser descompuestos en una serie de cuadros. Por lo tanto,
cmo hacer frente al problema de mapeo de objetos a los modelos de datos relacionales?

A veces hay una relacin directa entre las columnas en una tabla y las variables miembro en un objeto. En ese caso, la cartografa consiste simplemente de hacer coincidir los tipos de datos de la base de datos con los de Java.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

317

Figura 1 : Muestra el mapeo de la aplicacin a nivel de SQL a tipos de datos Java.


24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 318

Una simple cartografa de los tipos SQL a objetos Java de la tabla authors, de la base de datos de ejemplo es un buen ejemplo de una simple cartografa. Para recapitular, este tabla tiene la siguiente definicin:

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

319

Vamos a definir una clase Java para encapsular un autor. Tome una mirada hacia atrs en la tabla que se muestro cmo un Mapa de los tipos SQL a los tipos de datos Java. Sobre la base de esas asignaciones, se puede definir las variables miembro de una clase authors, y aadir un constructor, mtodos miembros de acceso, y un toString ():

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

320

Cmo funciona? En todo este ejemplo usted debe estar muy familiarizado, pero hay un par de cosas nuevas que necesito cubrir. Tenga en cuenta en primer lugar, que hay un paso adicional despus de los datos se lee que crea el autor objeto de llamar su constructor con esos datos. Asimismo, en el bucle while, ya que cada fila se lee desde el ResultSet, la aplicacin usa los apropiados metodos getXXX() del ResultSet, cuyo objetivo es realizar la cartografa de SQL a Tipos de datos Java. En cada una de estas llamadas al mtodo, el argumento es el valor del ndice para seleccionar la columna. Dado que la consulta selecciona las columnas por su nombre, las columnas en el resultset ser en la misma secuencia como los nombres de columna en la consulta SQL. Para mostrar los datos de cada objeto Autor, simplemente llame a System.out.println() y pasar la referencia del objeto Autor a la misma. As, se invocan los mtodos toString() para el objeto.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 321

package jdbc_accion;
public class Author { public Author(int authid, String lastname, String firstname, String address[], String city, String state, String postcode, String country, String phone, String fax, String email) { this.authid = authid; this.lastname = lastname; this.firstname = firstname; this.address = address; this.city = city; this.state = state; this.postcode = postcode; this.country = country; this.phone = phone; this.fax = fax; this.email = email; }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

322

public int getId() { return authid; } public String getLastName() { return lastname; } public String getFirstName() { return firstname; } public String[] getAddress() { return address; } public String getCity() { return city; } public String getState() { return state; } public String getCountry() { return country; }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

323

public String getPostCode() { return postcode; } public String getPhone() { return phone; } public String getFax() { return fax; } public String getEmail() { return email; } public String toString() { return new String("author ID: " + Integer.toString(authid) + "\nname : " + lastname + "," + firstname +"\naddress : " + address[0] + "\n : " + address[1] +" \n : " + city + " " + state + "\n : " + postcode + " " + country +"\nphone : " + phone + "\nfax : " + fax +"\nemail : " + email); } int authid; String lastname; String firstname; String address[]; String city; String state; String postcode; String country; String phone; String fax; String email; } Hubner Janampa Patilla - Administracin 24/09/2009 324 de Bases de Datos - 2009

package jdbc_accion;

import java.sql.DriverManager; import java.sql.Connection; import java.sql.Statement; import java.sql.ResultSet; import java.sql.SQLException;
public class TrySimpleMapping { public static void main (String[] args) { TrySimpleMapping SQLtoJavaExample; try { SQLtoJavaExample = new TrySimpleMapping(); SQLtoJavaExample.listAuthors(); } catch(SQLException sqle) { System.err.println(sqle); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe); } } public TrySimpleMapping() throws SQLException, ClassNotFoundException { Class.forName (driverName); connection = DriverManager.getConnection(sourceURL, user, password); }
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 325

public void listAuthors() throws SQLException { Author author = null; String query = "SELECT authid, lastname, firstname, address1,"+ "address2, city, state_prov, postcode, country,"+ "phone, fax, email FROM authors"; Statement statement = connection.createStatement(); ResultSet authors = statement.executeQuery(query); while(authors.next()) { int id = authors.getInt(1); String lastname = authors.getString(2); String firstname = authors.getString(3); String[] address = { authors.getString(4), authors.getString(5)}; String city = authors.getString(6); String state = authors.getString(7); String postcode = authors.getString(8); String country = authors.getString(9); String phone = authors.getString(10); String fax = authors.getString(11); String email = authors.getString(12); author = new Author(id, lastname, firstname, address, city, state, postcode,country, phone, fax, email); System.out.println("\n" + author); } authors.close(); connection.close(); } Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

24/09/2009

326

Connection connection; String driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; String sourceURL = "jdbc:odbc:technical_library"; String user = "guest"; String password = "guest"; }

En este ejemplo se utiliza el JDBC-ODBC Bridge conductor con una fuente de datos que requieren un nombre de usuario y contrasea. Si usted necesita un nombre de usuario y contrasea diferente para acceder a esa fuente de datos, basta con modificar el cdigo en el constructor TrySimpleMapping, y utilizar el controlador apropiado, la URL y el mtodo getConnection() del DriverManager.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

327

El uso de un objeto PreparedStatement Vamos a poner una declaracin preparada en accin a la hora que pasar por la mecnica del contexto prctico visto. Use el cdigo de ejemplo que ejecuta el mismo SQL SELECT utilizando tanto el estado y los objetos PreparedStatement. Para cada uno de estos, los resultados se mostrarn junto con los metadatos.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

328

package javaapplication27; import java.sql.Connection; import java.sql.Statement; import java.sql.PreparedStatement; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class StatementTest { Connection databaseConnection; // Connection to the database String driverName; // Database driver name String sourceURL; // Database location public static void main(String[] args) { try { StatementTest SQLExample = new StatementTest(); SQLExample.doStatement(); SQLExample.doPreparedStatement(); } catch(SQLException sqle) { System.err.println("SQL Exception: " + sqle); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe.toString()); }}
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 329

public StatementTest() throws SQLException, ClassNotFoundException { driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; sourceURL = "jdbc:odbc:technical_library"; Class.forName (driverName); databaseConnection = DriverManager.getConnection(sourceURL); } public void doStatement() throws SQLException { Statement myStatement = databaseConnection.createStatement(); ResultSet myResults = myStatement.executeQuery( "SELECT authid, lastname, firstname FROM authors ORDER BY authid"); showResults(myResults); } public void doPreparedStatement() throws SQLException { PreparedStatement myStatement = databaseConnection.prepareStatement( "SELECT authid, lastname, firstname FROM authors ORDER BY authid"); ResultSet myResults = myStatement.executeQuery(); showResults(myResults); }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

330

public void showResults(ResultSet myResults) throws SQLException {

// Retrieve ResultSetMetaData object from ResultSet


ResultSetMetaData myResultMetadata = myResults.getMetaData();

// How many columns were returned?


int numColumns = myResultMetadata.getColumnCount(); System.out.println(" ---------------------Query Results-------------------------");

// Loop through the ResultSet and get data


while(myResults.next()) { System.out.printf("%-5d", myResults.getInt(1)); // 1st Column only for(int column = 2; column <= numColumns; column++) { System.out.print(myResults.getString(column)+" "); } System.out.print("\n"); } System.out.println("\n\n-----------Query Metadata----------------"); System.out.println("ResultSet contains " + numColumns + " columns"); for (int column = 1; column <= numColumns; column++) { System.out.println("\nColumn "+ column);

// Print the column name


System.out.println("column : " + myResultMetadata.getColumnName(column));

// Print the label name


System.out.println(" label : " + myResultMetadata.getColumnLabel(column));

// Print the columns display size


System.out.println(" display width : " + myResultMetadata.getColumnDisplaySize(column) +"characters");

// Print the columns type


System.out.println(" data type : " + myResultMetadata.getColumnTypeName(column)); } } } 24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 331

Statement versus PreparedStatement Habr momentos en que la eleccin entre la utilizacin de Statement o un objeto PreparedStatement puede no ser del todo clara. Los objetos PreparedStatement son grandes cuando: Es necesario ejecutar la misma declaracin varias veces, con la necesidad de cambiar slo valores especficos. La compaa est trabajando con grandes trozos de datos que hacen la concatenacin difcil de manejar. Usted est trabajando con un gran nmero de parmetros en la sentencia SQL que hacen que las cadenas de concatenacin sean difciles de manejar. Por el contrario, los objetos Statement funcionan bien cuando se tiene las declaraciones simples y, por supuesto, usted no tiene opcin si su driver JDBC no es compatible con la interfaz PreparedStatement.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

332

La interfaz PreparedStatement

Anteriormente en este apartado, usted vio que usted puede construir cadenas de SQL sobre la marcha y ejecutar con executeQuery() .
Esa es una manera de introducir los parmetros en una sentencia SQL, pero no es la nica manera, ni es necesariamente el ms conveniente. La Interfaz PreparedStatement provee de un mecanismo alternativo que le permite definir una sentencia SQL con posicionadores de argumentos. Los Posicionadores son fichas que aparecen en la sentencia S Q L que se sustituyen. Este suele ser mucho ms fcil que la construccin de una declaracin SQL con valores especficos y luego concatenar cadenas.

Al igual que una declaracin de un objeto, se crea un objeto PreparedStatement llamando a un mtodo del objeto Conexin.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

333

En lugar de llamar al mtodo createStatement() del objeto conexin, llamar a la prepareStatement() si desea crear un objeto PreparedStatement. Mientras puede utilizar una declaracin objeto de ejecutar cualquier nmero de sentencias SQL, el objeto PreparedStatement ejecuta slo una sentencia SQL predefinida que tiene definida para los marcadores de posicin. En el argumento se especifica la declaracin SQL con cada marcador de posicin por un valor representado por un carcter ? .

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

334

Establecer parmetros de consulta

Usted debe fijar valores para todos los marcadores de posicin que aparecen en la declaracin de los encapsulados updateLastName de referencia antes de la declaracin puede ser ejecutado. Usted oferta el valor de cada marcador de posicin llamando a uno de los mtodos setXXX() de la interfaz PreparedStatement:
Estos mtodos aceptan como mnimo una posicin de argumento que identifica marcador de posicin al que usted se refiere y para cada valor de argumento es sustituido por el marcador de posicin. Los marcadores de posicin son indexadas en secuencia de izquierda a derecha empezando por 1, por lo que la referencia de posicin del extremo izquierdo tiene ndice 1, y cualquier marcadores de posicin siguiente con el ndice de valor de 2, 3, y as sucesivamente.
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

24/09/2009

335

El mtodo que usted llama para un marcador de posicin, para una entrada de valor depende del tipo SQL de la columna de destino. Usted debe seleccionar el mtodo que corresponde al tipo de campo, por lo que utilizara setInt () para el tipo INTEGER, por ejemplo.

Una vez que todos los marcadores de posicin tienen valores establecidos y que se ha ejecutado la declaracin, usted puede actualizar cualquier o todos los marcadores de posicin (o incluso ninguno) antes de volver a ejecutar la declaracin.
En el siguiente fragmento de cdigo de PreparedStatement muestra el valor de posicin de sustitucin en accin.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

336

package sentenciapreparada; import java.sq l.DriverManager; import java.sq l.Connection; import java.sq l.PreparedStatement; import java.sq l.SQLException; public class TryPlaceHolders { public static void main(String[] args) { try { String url = "jdbc:odbc:technical_library"; String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; String user = "guest"; String password = "guest"; Class.forName(driver); Connection connection = DriverManager.getConnection(url,user,password); String changeLastName = "UPDATE authors SET lastname = ? W HERE authid = ? ; PreparedStatement updateLastName = connection.prepareStatement(changeLastName); updateLastName.setString(1," Martin"); // Set lastname placeholder value updateLastName.setInt(2,4); // Set author ID placeholder value int rowsUpdated = updateLastName.executeUpdate(); // execute the update System.out.println("Rows affected: " + rowsUpdated); connection.close(); } catch (ClassNotFoundException cnfe) { System.err.println(cnfe); } catch (SQLException sqle) { System.err.println(sqle); } } }
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 337

Cmo funciona los mtodos getMaxRows(), getMaxFieldSize(), getQueryTimeout() de la Interfaz Statement. Este cdigo es bastante simple. Se crea una conexin usando una URL definida para una base de datos Access llamada technical_library. Una vez que se establece la conexin, un objeto Statement es creado, y que usando los mtodos apropiados para el perodo de tiempo, el mximo tamao de la columna, y el nmero mximo de filas se puede ejecutar . Los tres proporcionan esta informacin y tiran una excepcin de tipo SQLException si la informacin no est disponible, como es el caso con el controlador Microsoft Access. Para asegrese de que usted llame a todos los tres mtodos, incluso cuando una excepcin es lanzada, cada mtodo de llamada se encuentra en un bloque try aparte.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

338

package sentenciapreparada;
import java.sql.DriverManager; import java.sql.Connection; import java.sql.Statement; import java.sql.SQLException; public class TestQueryTimeOut { public static void main(String[] args) { Statement statement = null; try { String url = "jdbc:odbc:technical_library"; String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; String username = "guest"; String password = "guest"; Class.forName(driver); Connection connection = DriverManager.getConnection(url, username, password); statement = connection.createStatement(); System.out.println("Driver : " + driver); } catch (ClassNotFoundException cnfe) { System.out.println(cnfe); } catch (SQLException sqle) { System.out.println(sqle); }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

339

// Put each method call in a separate try block to execute them all try { System.out.print("\nMaximum rows :"); int maxRows = statement.getMaxRows(); System.out.print(maxRows == 0 ? " No limit" : " " + maxRows); } catch (SQLException sqle) { System.err.print(sqle); } try { System.out.print("\nMax field size :"); int maxFieldSize = statement.getMaxFieldSize(); System.out.print(maxFieldSize == 0 ? " No limit" : " " + maxFieldSize); } catch (SQLException sqle) { System.err.print(sqle); } try { System.out.print("\nTimeout :" ); int queryTimeout = statement.getQueryTimeout(); System.out.print(queryTimeout = = 0 ? " No limit" : " " + q ueryTimeout); } catch (SQLException sqle) { System.err.print(sqle); } } }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

340

Ejecutar DDL y DML Como ustedes saben, el executeQuery() es el mtodo utilizado para ejecutar una consulta SQL y que espera que regresen algunos resultados en un resultset. Como he indicado en el captulo anterior, hay otros tipos de sentencias SQL que no devuelven resultados. Estos estados se dividen en dos categoras primarias: Lenguaje de definicin de datos (DDL), y lenguaje de manipulacin de datos (DML). Las sentencias DDL son las que cambian la estructura de una base de datos, tales como CREATE TABLE y DROP TABLE. Las sentencias DML son las que cambian el contenido de la base de datos, tales como INSERT, UPDATE, y DELETE. Hasta el momento, todos los ejemplos que usted ha visto, incluida la aplicacin InteractiveSQL, han utilizado la executeQuery(). Si se trat de ejecutar una sentencia SQL que producen cambios en la base de datos (DML), es decir no producen un resultset de datos devueltos , el programa InteractiveSQL provocara una excepcin de error. Hubner Janampa Patilla - Administracin 24/09/2009 341
de Bases de Datos - 2009

La excepcin que contiene el mensaje "No se produjo el ResultSet" se produjo porque se ejecuta el executeQuery() que espera slo una sentencia SQL y que genera resultados en un ResulSet (Nota: incluso cuando una excepcin fue arrojado en este caso, la sentencia SQL sigue siendo ejecutado). La Declaracin prev la interfaz executeUpdate() mtodo para ejecutar las declaraciones que cambian el contenido de la base de datos en lugar de regresar los resultados. Al igual que executeQuery(), el executeUpdate() es un mtodo acepta un solo argumento de tipo String especificando la sentencia SQL que se va a ejecutar. Puede utilizar el mtodo executeUpdate() para ejecutar UPDATE, INSERT, DELETE o sentencias SQL. Tambin se puede utilizar para la ejecucin de declaraciones DDL. El mtodo devuelve un valor de tipo int que indica el nmero de filas afectadas por la operacin de la base de datos cuando se cambian los contenidos, o 0 para las declaraciones que no alteran la base de datos. El fragmento de cdigo que figura a continuacin ilustra el uso del mtodo executeUpdate() para agregar una fila a la tabla Authors.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 342

package ExecuteUpdate;
import java.sql.DriverManager; import java.sql.Connection; import java.sql.Statement; import java.sql.SQLException; public class BuildTables { public static void main(String[] args) { try { String username = "guest"; String password = "guest"; String url = "jdbc:odbc:technical_library"; String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; String[] SQLStatements = {"CREATE TABLE online_resources2 (pub_id int, name char(48), url char(80))", "INSERT INTO online_resources VALUES(1, 'Wrox Home Page','http://www.wrox.com')", "INSERT INTO online_resources VALUES(2, 'JavaSoft Home Page','http://www.javasoft.com')", "INSERT INTO online_resources VALUES(3, 'Apress Home Page','http://www.apress.com')", "INSERT INTO online_resources VALUES(4, 'Addison Wesley Home Page'," + "'http://www.awprofessional.com')","INSERT INTO online_resources VALUES(5, 'Java Developer Connection'," + "'http://java.sun.com')"}; Class.forName(driver); Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement(); for (String SQLStatement : SQLStatements) { statement.executeUpdate(SQLStatement); System.out.println(SQLStatement); } } catch (ClassNotFoundException cnfe) { System.err.println(cnfe); } catch (SQLException sqle) { System.err.println(sqle); } } }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

343

Resumen En este captulo, que ha aplicado las habilidades bsicas del JDBC, que aprendi anteriormente en algunas nuevas formas, ampli su conocimiento detallado de algunos de los temas que se cubren, e incluso meti en algunos nuevos. Los elementos ms importantes que me introduje en esta presentacin incluyen: La declaracin de una interfaz proporciona mtodos que le permiten limitar el tamao del campo y el nmero de filas que se pueden generar en un resultset. Tambin puede establecer una duracin mxima para una consulta SQL .

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

344

Resumen (Cont) Un objeto parametrizado PreparedStatement encapsula una sentencia SQL y proporciona mtodos para que usted fije valores para los parmetros de marcadores de posicin, para los parmetros de la sentencia SQL que estn representados por un signo de interrogacin (?). JDBC proporciona un conjunto de asignaciones preferidas entre los tipos SQL y tipos Java. Los tipos de datos SQL DECIMAL y NUMERIC son asignados a la clase de tipo BigDecimal, que es el que se define en el paquete java.math. Puede utilizar esta clase y la clase BigInteger para aplicaciones que necesitan de precisin numrica ms all de las capacidades de los tipos primitivos numricos.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

345

DEMO Reportes en Java

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

346

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

347

Referencia
Professional Eclipse 3 for Java Developers by Berthold Daum November 2007.

Professional Java, JDK 5 Edition by W. Clay Richardson, Donald Avondolio, Joe Vitale, Scot Schrager, Mark W. Mitchell, Jeff Scanlon February 2006.
Beginning Java 2, JDK 5 Edition Ivor Horton, 2005. Professional Java JDK 6 Edition by W. Clay Richardson, Donald Avondolio, Scot Schrager, Mark W. Mitchell, Jeff Scanlon January 2007.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

348

Desarrollo de aplicaciones con C# .NET, AJAX , ASP.NET , ORACLE Y MS SQL


24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 349

Continuara

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

350

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

351

Programacin Orientado a Objetos en Java

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

352

Qu es una clase? Una clase es una receta para un tipo particular de objetos que define un nuevo tipo. Puede utilizar la definicin de una clase para crear objetos de esa clase del tipo que sea, para crear objetos que incorporen todos los componentes especificados como pertenecientes a esa categora.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

353

En esencia, una clase de definicin es muy simple. Hay slo dos tipos de cosas que usted puede incluir en una definicin de clase: I . Campos Estas son las variables que almacenan datos que suelen distinguir un objeto de la de otra clase. Tambin se refiere a datos como miembros de una clase. II. Mtodos Que define las operaciones que puede realizar para la clase.

Los mtodos normalmente operan en los campos de las variables de la clase.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

354

Los campos en una definicin de clase pueden ser de cualquiera de los tipos primitivos, o bien pueden ser referencias a objetos de tipo de cualquier clase, incluyendo el que usted est definiendo.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

355

Estructura de una clase

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

356

Tipos de clases

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

357

Accesibilidad de los miembros de una clase

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

358

Diagrama de clase

Cdigo de clase en java

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

360

Estructura de un mtodo

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

361

Utilizando el mtodo Esquema

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

362

Utilizando el mtodo con argumentos

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

363

Trabajo prctico N 1
Consideremos las clases mostradas Clave: Implemente los mtodos mostrados Explicando?

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

364

package Sphere; class Sphere { static final double PI = 3.14; // Class variable that has a fixed value static int count = 0; // Class variable to count objects // Instance variables double radius; // Radius of a sphere double xCenter; // 3D coordinates double yCenter; // of the center double zCenter; // of a sphere // Class constructor Sphere(double theRadius, double x, double y, double z) { radius = theRadius; // Set the radius // Set the coordinates of the center xCenter = x; yCenter = y; zCenter = z; ++count; // Update object count } // Static method to report the number of objects created static int getCount() { return count; // Return current object count }

// Instance method to calculate volume double volume() { return 4.0/3.0*PI*radius*radius*radius; } }


24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 365

package Sphere; class CreateSpheres { public static void main(String[] args) { System.out.println("Number of objects = " + Sphere.getCount()); Sphere ball = new Sphere(4.0, 0.0, 0.0, 0.0); // Create a sphere System.out.println("Number of objects = " + ball.getCount()); Sphere globe = new Sphere(12.0, 1.0, 1.0, 1.0); // Create a sphere System.out.println("Number of objects = " + Sphere.getCount()); // Output the volume of each sphere System.out.println("ball volume = " + ball.volume()); System.out.println("globe volume = " + globe.volume()); }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

366

Trabajo prctico N 2
Consideremos las clases mostradas Clave: Implemente los mtodos mostrados Explicando?

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

367

class Sphere {
static final double PI = 3.14; // Class variable that has a fixed
value

// Construct a unit sphere at a point


// Class variable to count objects
Sphere(double x, double y, double z) { xCenter = x; yCenter = y; zCenter = z; radius = 1.0; ++count; // Update object count } // Construct a unit sphere at the origin Sphere() { xCenter = 0.0; yCenter = 0.0; zCenter = 0.0; radius = 1.0; ++count; // Update object count } // Static method to report the number of objects created static int getCount() { return count; // Return current object count } // Instance method to calculate volume double volume() { return 4.0/3.0*PI*radius*radius*radius; } }

static int count = 0;

// Instance variables double radius; // Radius of a sphere double xCenter; double yCenter; double zCenter; // 3D coordinates // of the center // of a sphere

// Class constructor Sphere(double theRadius, double x, double y, double z) { radius = theRadius; // Set the radius // Set the coordinates of the center xCenter = x; yCenter = y; zCenter = z; ++count; // Update object count }

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

368

class CreateSpheres {
public static void main(String[] args) { System.out.println("Number of objects = " + Sphere.getCount()); Sphere esfera1 = new Sphere(4.0, 0.0, 0.0, 0.0); // Create a sphere System.out.println("Number of objects = " + esfera1.getCount()); Sphere esfera2 = new Sphere(12.0, 1.0, 1.0, 1.0); // Create a sphere System.out.println("Number of objects = " + Sphere.getCount()); Sphere esfera3 = new Sphere(10.0, 10.0, 0.0); Sphere esfera4 = new Sphere(); System.out.println("Number of objects = " + Sphere.getCount());

// Output the volume of each sphere System.out.println(" volume = " + esfera1.volume()); System.out.println(" volume = " + esfera2.volume()); System.out.println(" volume = " + esfera3.volume()); System.out.println(" volume = " + esfera4.volume()); } }
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 369

Trabajo prctico N 3
Consideremos las clases mostradas Clave: Mtodo setTime() Explicando?

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

370

package clase_time;
public class Time1 { private int hour; // 0 - 23 private int minute; // 0 - 59 private int second; // 0 - 59
// Establecer un nuevo valor de tiempo de uso de tiempo universal; garantizar que // los datos sigue siendo coherente mediante el establecimiento de valores no vlidos a cero public void setTime( int h, int m, int s ) { hour = ( ( h >= 0 && h < 24 ) ? h : 0 ); // validar hora minute = ( ( m >= 0 && m < 60 ) ? m : 0 ); // validar minutos second = ( ( s >= 0 && s < 60 ) ? s : 0 ); //validar segundos } // convert to String in universal-time format (HH:MM:SS) public String toUniversalString() { return String.format( "%2d:%02d:%02d", hour, minute, second ); } // convert to String in standard-time format (H:MM:SS AM or PM) public String toString() { return String.format( "%d:%02d:%02d %s", ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 ), minute, second, ( hour < 12 ? "AM" : "PM" ) ); } } 24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 371

package clase_time;
public class Time1Test { public static void main( String args[] ) { // create and initialize a Time1 object Time1 time = new Time1(); // invokes Time1 constructor // output string representations of the time System.out.print( "El primer tiempo universal es : " ); System.out.println( time.toUniversalString() ); System.out.print( "El tiempo estandar es :" ); System.out.println( time.toString() ); System.out.println(); // output a blank line // change time and output updated time time.setTime( 13, 27, 6 ); System.out.print( "El tiempo universal despes de setTime es: " ); System.out.println( time.toUniversalString() ); System.out.print( "El tiempo estandar despes de setTime es : " ); System.out.println( time.toString() ); System.out.println(); // output a blank line
// setTime con valores no correctos time.setTime( 99, 99, 99 ); System.out.println( " Despes de intentar asignar un valor incorrecto a setTime, la salida es : " ); System.out.print( "Universal time: " ); System.out.println( time.toUniversalString() ); System.out.print( "tiempo estandar: " ); System.out.println( time.toString() ); } 24/09/2009 } Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 372

Trabajo prctico N 4
Consideremos las clases mostradas
Clave: Composicin Explicando?

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

373

package composicion;
public class Date { private int month; // 1-12 private int day; // 1-31 based on month private int year; // any year
// constructor: call checkMonth to confirm proper value for month;

// utility method to confirm proper day value based on month and year private int checkDay( int testDay ) { int daysPerMonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // check if day in range for month if ( testDay > 0 && testDay <= daysPerMonth[ month ] ) return testDay; // check for leap year if ( month == 2 && testDay == 29 && ( year % 400 == 0 || ( year % 4 == 0 && year % 100 != 0 ) ) ) return testDay; System.out.printf( "Invalid day (%d) set to 1.", testDay ); return 1; // maintain object in consistent state } // end method checkDay // return a String of the form month/day/year public String toString() { return String.format( "%d/%d/%d", month, day, year ); } // end method toString } // end class Date

// call checkDay to confirm proper value for day public Date( int theMonth, int theDay, int theYear ) { month = checkMonth( theMonth ); // validate month year = theYear; // could validate year day = checkDay( theDay ); // validate day System.out.printf( "Date object constructor for date %s\n", this ); } // end Date constructor

// utility method to confirm proper month value private int checkMonth( int testMonth ) { if ( testMonth > 0 && testMonth <= 12 ) // validate month return testMonth; else // month is invalid { System.out.printf( "Invalid month (%d) set to 1.", testMonth ); return 1; // maintain object in consistent state } // end else Hubner Janampa Patilla - Administracin } // end method checkMonth 24/09/2009 de Bases de Datos - 2009

374

package composicion; public class Employee


{ private String firstName; private String lastName; private Date birthDate; private Date hireDate; // constructor to initialize name, birth date and hire date public Employee( String first, String last, Date dateOfBirth, Date dateOfHire ) { firstName = first; lastName = last; birthDate = dateOfBirth; hireDate = dateOfHire; } // end Employee constructor // convert Employee to String format public String toString() { return String.format( "%s, %s Hired: %s Birthday: %s", lastName, firstName, hireDate, birthDate ); } // end method toEmployeeString } // end class Employee
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 375

package composicion; public class EmployeeTest { public static void main( String args[] ) { Date birth = new Date( 7, 24, 1949 ); Date hire = new Date( 3, 12, 1988 ); Employee employee = new Employee( "Bob", "Blue", birth, hire ); System.out.println( employee ); } // end main } // end class EmployeeTest

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

376

Trabajo prctico N 5
Consideremos las clases mostradas Clave: Polimorfismo
Explicando el diagrama de clases?

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

377

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

378

package polimorfismo;
public class CommissionEmployee3 { private String firstName; private String lastName; private String socialSecurityNumber; private double grossSales; // Bruto de ventas semanales private double commissionRate; // commission percentage
// five-argument constructor

// set first name public void setFirstName( String first ) { firstName = first; } // end method setFirstName

public CommissionEmployee3 ( String first, String last, String ssn, double sales, double rate ) {
// implicit call to Object constructor occurs here

// return first name public String getFirstName() { return firstName; } // end method getFirstName
// set last name public void setLastName( String last ) { lastName = last; } // end method setLastName // return last name public String getLastName() { return lastName; } // end method getLastName // set social security number public void setSocialSecurityNumber( String ssn ) { socialSecurityNumber = ssn; // should validate } // end method setSocialSecurityNumber

firstName = first; lastName = last; socialSecurityNumber = ssn; setGrossSales( sales ); // validate and store gross sales setCommissionRate( rate ); // validate and store commission
rate } // end five-argument CommissionEmployee3 constructor

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

379

// return social security number public String getSocialSecurityNumber() { return socialSecurityNumber; } // end method getSocialSecurityNumber // set gross sales amount public void setGrossSales( double sales ) { grossSales = ( sales < 0.0 ) ? 0.0 : sales; } // end method setGrossSales // return gross sales amount public double getGrossSales() { return grossSales; } // end method getGrossSales // set commission rate public void setCommissionRate( double rate ) { commissionRate = ( rate > 0.0 && rate < 1.0 ) ? rate : 0.0; } // end method setCommissionRate

// return commission rate public double getCommissionRate() { return commissionRate; } // end method getCommissionRate // calculate earnings public double earnings() { return getCommissionRate() * getGrossSales(); } // end method earnings
// return String representation of CommissionEmployee3 object

public String toString() { return String.format( "%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f", "commission employee", getFirstName(), getLastName(), "social security number", getSocialSecurityNumber(), "gross sales", getGrossSales(), "commission rate", getCommissionRate() ); } // end method toString } // end class CommissionEmployee3

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

380

package polimorfismo;
public class BasePlusCommissionEmployee4 extends CommissionEmployee3 { private double baseSalary; // base salary per week // six-argument constructor public BasePlusCommissionEmployee4( String first, String last, String ssn, double sales, double rate, double salary ) { super( first, last, ssn, sales, rate ); setBaseSalary( salary ); // validate and store base salary } // end six-argument BasePlusCommissionEmployee4 constructor // set base salary public void setBaseSalary( double salary ) { baseSalary = ( salary < 0.0 ) ? 0.0 : salary; } // end method setBaseSalary

// return base salary public double getBaseSalary() { return baseSalary; } // end method getBaseSalary // calculate earnings public double earnings() { return getBaseSalary() + super.earnings(); } // end method earnings
// return String representation of BasePlusCommissionEmployee4

public String toString() { return String.format( "%s %s\n%s: %.2f", "base-salaried", super.toString(), "base salary", getBaseSalary() ); } // end method toString } // end class BasePlusCommissionEmployee4

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

381

package polimorfismo; public class PolymorphismTest { public static void main( String args[] ) { // assign superclass reference to superclass variable CommissionEmployee3 commissionEmployee = new CommissionEmployee3( "Sue", "Jones", "222-222222", 10000, .06 ); // assign subclass reference to subclass variable BasePlusCommissionEmployee4 basePlusCommissionEmployee = new BasePlusCommissionEmployee4( "Bob", "Lewis", "333-33-3333", 5000, .04, 300 ); // invoke toString on superclass object using superclass variable System.out.printf( "%s %s:\n\n%s\n\n", "Call CommissionEmployee3's toString with superclass reference ", "to superclass object", commissionEmployee.toString() ); // invoke toString on subclass object using subclass variable System.out.printf( "%s %s:\n\n%s\n\n", "Call BasePlusCommissionEmployee4's toString with subclass", "reference to subclass object", basePlusCommissionEmployee.toString() ); // invoke toString on subclass object using superclass variable CommissionEmployee3 commissionEmployee2 = basePlusCommissionEmployee; System.out.printf( "%s %s:\n\n%s\n", "Call BasePlusCommissionEmployee4's toString with superclass", "reference to subclass object", commissionEmployee2.toString() ); } // end main } // end class PolymorphismTest
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 382

AGILE DEVELOPMENT ICONIX

Notas del mtodo con ampliaciones y mejoras


Hubner J.P Mail: hubnerjp@gmail.com Octubre de 2008

La receta de Iconix

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

384

Mtodo ICONIX Referencia El mtodo original se encuentra en:


Rosenberg, Doug, with Kendall Scott Use case driven object modeling with UML. A practical approach Addison Wesley, 1999

Ms informacin en la pgina:
http://www.iconix.com

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

385

Mtodo ICONIX Por qu esta versin?


El texto original incluye muchas disgresiones, generalmente obsoletas El texto supone ciertos conocimientos, que no siempre tienen los alumnos El tratamiento de algunos temas es insuficiente para los usos modernos
Por ello se realiz esta versin, que sirva para un primer curso de desarrollo orientado a objetos y usando UML.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

386

Enfoque ICONIX
Modelado de objetos conducido por casos de uso Centrado en datos: se descompone en fronteras de datos Basado en escenarios que descomponen los casos de uso Enfoque iterativo e incremental Ofrece trazabilidad Uso directo de UML (estndar del Object Management Group)

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

387

DINMICA

Prototipo de interfaz de usuario

Modelo de casos de uso Diagrama de secuencia

Enfoque
Diagrama de robustez ESTTICA

Cdigo

24/09/2009

Modelo de dominio

Diagrama de Hubner Janampa Patilla - Administracin clases


de Bases de Datos - 2009

388

Preguntas iniciales
Quines son los usuarios (actores) del sistema y qu tratan de hacer? Cules son los objetos del mundo real (dominio del problema) y las asociaciones entre ellos? Qu objetos son necesarios para cada caso de uso? Cmo colaboran los objetos en cada caso de uso? Cmo se manejan aspectos de tiempo real? Cmo se construir realmente el sistema a nivel de piezas?

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

389

Caractersticas
Flexible para diferentes estilos y clases de problemas Apoyo a la manera de trabajo de la gente Gua para los menos experimentados Expone los productos anteriores al cdigo de manera estndar y comprensible

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

390

Pasos principales I Anlisis de requerimientos


Identificar objetos del dominio y relaciones de agregacin y generalizacin Prototipo rpido Identificar casos de uso Organizar casos de uso en grupos (paquetes) Asignar requerimientos funcionales a casos de uso y objetos del dominio
META: revisin de requerimientos

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

391

Pasos principales II Anlisis y diseo preliminar


Escribir descripciones de casos de uso
cursos bsico y alternos

Anlisis de robustez
Identificar grupos de objetos que realizan escenario Actualizar diagramas de clases del dominio

Finalizar diagramas de clases META: revisin del diseo preliminar


De usuarios hacia sistema De datos hacia sistema Detallar a partir de modelos de alto nivel
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 392

Pasos principales III Diseo


Asignar comportamiento Para cada caso de uso
Identificar mensajes y mtodos Dibujar diagramas de secuencia Actualizar clases (opcional) diagramas de colaboracin (opcional) Diagramas de estados

Terminar modelo esttico Verificar cumplimiento de requerimientos META: revisin crtica del diseo
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 393

Pasos principales IV Implementacin


Producir diagramas necesarios
Despliegue Componentes

Escribir el cdigo Pruebas de unidad e integracin Pruebas de sistema y aceptacin basadas en casos de uso

META: entrega del sistema


24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 394

Captulo 2 Modelando el dominio

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

395

Modelado del Dominio


Dominio del problema: rea que cubre las cosas y conceptos relacionados con el problema que el sistema deber resolver Modelando el dominio: tarea de descubrir objetos (en realidad clases) que representan esas cosas y conceptos A partir de los datos asociados con requerimientos se llegar a construir modelo esttico del dominio
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 396

Modelando el dominio

Fuentes de informacin:
Descripcin de alto nivel del problema Requerimientos de bajo nivel Conocimiento de expertos Literatura

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

397

Clases y objetos
Objeto:
Algo tangible o visible Algo que puede aprehenderse intelectualmente Algo hacia lo cual se dirigen pensamientos o acciones

Un objeto tiene:
Estado Comportamiento Identidad

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

398

Clases y objetos
Estado: propiedades y sus valores particulares Comportamiento: cmo acta y responde (a cambios de estado y paso de mensajes)

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

399

Clases y objetos
Clase:
Descripcin de un conjunto de objetos que comparten una estructura, un comportamiento, relaciones y semntica comunes

Interfaz:
Vista exterior de una clase; permite contrato acerca de las responsabilidades que ofrece y exige; asla el interior. Es el QU hace

Implementacin:
Vista interior, particular; CMO lo hace
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 400

Clase y objeto en notacin UML


Nombre

Para objetos, el nombre:


Nomobj:nomclase :nomclase

Atributos
CLASE Mtodos

cuenta saldo clave dimesaldo() deposita(cant) retira(cant) Ejemplo de clase


24/09/2009

Micuenta:cuenta saldo clave dimesaldo() deposita(cant) retira(cant) Ejemplo de objeto


Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 401

Modelando el dominio
Procedimiento:
Tomar documentos disponibles y hacer una lectura rpida, subrayando los sustantivos y notando frases posesivas y verbos (uso posterior) Los sustantivos y frases nominales se convertirn en objetos y atributos Los verbos y frases verbales se convertirn en operaciones y relaciones Las frases posesivas indican los sustantivos que son atributos y no objetos

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

402

Modelando el dominio
Procedimiento (II)
Formar una lista con los sustantivos y frases nominales identificados, evitando los plurales y las repeticiones y ordenndola alfabticamente Revisar la lista eliminando los elementos innecesarios (irrelevantes o redundantes) o incorrectos (vagos o conceptos fuera del alcance del modelo o representan acciones an cuando parezcan sustantivos) Volver a revisar textos, leyendo entre lneas

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

403

Modelado del dominio procedimiento


TEXTO -----Subrayar sustantivos y frases nominales LISTA INICIAL Para usar en diseo (operaciones) y para identificar relaciones entre clases

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

Subrayar verbos y frases verbales

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

404

Modelado del dominio procedimiento


Eliminar sinnimos y repetidos, dejar en singular, ordenar; LISTA INICIAL Quitar verbos disfrazados, vaguedades y elementos externos al dominio

Identificar Actores

Separar posibles atributos (identificados por frases posesivas) y valores de atributos discretos textuales

SEGUNDA LISTA (reducida)


24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 405

Modelando el dominio
Procedimiento (III) Construir relaciones de generalizacin
Una generalizacin es una relacin en la cual una clase es una generalizacin de otra. Tambin se le llama tipo-de o es-una. La clase ms general se llama Antecesor o Superclase y la otra (refinamiento de la primera) Descendiente o Subclase. La subclase hereda los atributos y mtodos de la superclase y las asociaciones en que participa. Las puede modificar.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

406

Relacin de agregacin en UML


A La clase A es una generalizacin de las clases B y C Las clases B y C son particularizaciones de la clase A Las clases B y C heredan de la clase A

cuenta

aPlazo

Cheques

24/09/2009

Ejemplo

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

407

Modelando el dominio
Procedimiento (III) Establecer asociaciones entre clases
Una asociacin es una relacin esttica entre dos clases; indican dependencia, pero no accin (aunque se las nombre con un verbo) Deben ser persistentes (es modelo esttico)

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

408

Asociaciones con UML


A asociacin B

Multiplicidad
Se lee as: A se relaciona con 1 A un B 1..* A uno o ms B 0..1 A cero o un B * A cero o ms B m..n A entre m y n B n A exactamente n B (siempre del lado de B) Lo mismo en sentido de B a A
409

B B B B B B

asociacin m

multiplicidad en la relacin asociacin

Navegabilidad: la flecha indica que podemos hallar a B a partir de A. Sin flecha puede indicar doble sentido Hubner Janampa Patilla o indefinido 24/09/2009
- Administracin de Bases de Datos - 2009

Modelando el dominio
Procedimiento (III) Establecer relaciones de agregacin
Una agregacin es una relacin en la cual una clase est formada por otras (sus partes) A veces se le llama parte-de En UML se distingue una forma ms fuerte llamada Composicin, pero para este mtodo no se har diferencia

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

410

Agregacin con UML


D E Relacin de Agregacin o Contencin: la clase D contiene a la clase E, es decir, la clase E se agreg a la clase D. Tambin llamada parte-de: E es parte de D Gra

Brazo

Gancho

Ejemplo

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

411

Modelando el dominio
Procedimiento (IV) Clases de asociacin
Una clase de asociacin es una variante de las asociaciones muy til cuando hay relaciones muchas-a-muchas entre clases

Pueden conseguirse clase del dominio a partir de entidades en bases de datos preexistentes Cuando una clase tiene demasiados atributos, conviene dividirla en clases auxiliares y usar agregacin para reunirlas

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

412

Clase de asociacin con UML


Alfa ClaAsoc Beta

persona

patrn 0..1 empleo

compaa Clase de asociacin; puede tener sus propios atributos

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

413

Modelado del dominio procedimiento


SEGUNDA LISTA (reducida) Disear clases bsicas, incluyendo los atributos identificados Analizar si existen relaciones de generalizacin o agregarlas si es necesario

Identificar relaciones de agregacin

Identificar otras relaciones importantes


DIAGRAMA DE CLASES

Incluir multiplicidad en las relaciones

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

414

Advertencia
No se tarde demasiado en preparar la lista; ms adelante la refinar y completar

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

415

Captulo 3 Modelado de casos de uso

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

416

Casos de uso
Buscan capturar los requerimientos del usuario para sistema nuevo Puede ser desde cero o a partir de un sistema anterior Especifica escenarios detallados de lo que hace el usuario para lograr sus fines Es la base de todo lo que sigue en este mtodo y otros semejantes

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

417

Casos de uso
Definicin:
Un caso de uso es una secuencia de acciones que un actor (usualmente una persona, pero que puede ser una entidad externa, como otro sistema o un elemento de hardware) realiza dentro del sistema para lograr una meta

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

418

Casos de uso
Se describe mejor como una frase verbal en presente y en voz activa. Ejemplos:
Admite paciente, Realiza transaccin o Genera reporte

Especifica de manera precisa, no ambigua, un aspecto del uso del sistema sin suponer un diseo o implementacin particulares. Toda la funcionalidad del sistema debe estar expresada en casos de uso
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 419

Casos de uso
Actor: es un papel realizado por una persona, base de datos externa, otro sistema. Los actores reflejan todas las entidades que deben intercambiar informacin con el sistema. Varias personas pueden realizar un mismo papel Una persona puede jugar varios papeles, en momentos distintos
Diagrama de casos de uso: rene actores y casos de uso

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

420

Casos de uso

Registra transaccin

Genera reporte

empleado
Actualiza informacin

Usualmente, actores a derecha e izquierda, casos de uso al centro


24/09/2009

No cambie smbolos, son parte de un estndar internacional Hubner Janampa Patilla - Administracin
de Bases de Datos - 2009

421

Casos de uso

Algunos autores separan los actores en dos: Primarios: los que inician casos de uso

Secundarios: responden a una necesidad del sistema que el software no puede resolver, no inician la accin.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

422

Casos de uso
Existen dos tipos de caso de uso: De nivel de anlisis: representa comportamiento comn de un grupo de caos De nivel de diseo: instancias del anterior, con comportamiento especfico

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

423

Casos de uso cmo escribirlos


Escriba un prrafo o ms para cada caso de uso, describiendo su comportamiento Si slo hay una frase, quiz dividi demasiado finamente los casos de uso y deberan reunirse varios Si es demasiado extenso o complicado, quiz debe subdividirlo Importa ms identificar la mayora que refinarlos desde el principio Ms adelante se descubrirn otros y se refinarn

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

424

Casos de uso cmo escribirlos


Recomendacin importante: Deben guardar estrecha correlacin con manual de usuario y la Interfaz grfica de usuario (GUI) Primero se escribe el manual y luego se trabaja en el cdigo (como sea: dibujos, texto, prototipo rpido, objetos de utilera, etc)

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

425

Casos de uso cmo escribirlos


En la descripcin no detalle demasiado elementos que pueden cambiar ms tarde. Por ejemplo, no especifique tipo de botn si puede cambiar por un men desplegable o una lista para seleccionar.
Otras fuentes para casos de uso:
Si existe un sistema anterior, use los manuales de usuario para extraer casos de uso

Asegrese que los casos de uso corresponden a lo que efectivamente hacen los usuarios

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

426

Captulo 4 Anlisis de Robustez

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

427

Anlisis de Robustez Identificacin de Objetos


Objetos que participan en cada caso de uso Clasificacin de objetos: Objetos Fronterizos (de limite): objetos con los cuales puede interactuar el usuario interfaz de usuario -. De Entidad: generalmente objetos del modelo de dominio De control (controles): intermediarios entre los fronterizos y de entidad.

24/09/2009

Objeto fronterizo

Entidad
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

Control
428

Anlisis de Robustez Relaciones entre objetos


PERMITIDO NO PERMITIDO

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

429

Anlisis de Robustez Diagramas de Robustez


Representa el curso bsico y los alternos de cada caso de uso. Tener entre 2 y 5 objetos de control por caso de uso. Usar flechas en una o dos direcciones.

Curso Bsico
Actor: inicia la accin Interfaz de Usuario Funciones (acciones) Entidad (almacenes)

Curso Alterno

NO SON DIAGRAMAS DE FLUJO


24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 430

Anlisis de Robustez Para qu sirven


Comprobacin de Sanidad: revisar las ideas de los casos de uso (comportamiento razonable). Comprobacin de entereza: asegurar que en los casos de uso se cubra el camino bsico y los posibles caminos alternos. Descubrir objetos (si son necesarios) Diseo preliminar: los diagramas son la primera vista del nuevo sistema.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 431

CAPITULO 5 Modelado de la Interaccin

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

432

Modelado de la Interaccin Objetivos


Construccin de hilos sobre el comportamiento de los objetos en los casos de uso. Tres objetivos: 1. Asignar el comportamiento de los objetos (fronterizos, entidades y de control). 2. Detallar la interaccin entre objetos (por medio de mensajes). 3. Ubicar los mtodos correspondientes a cada clase (responsabilidades).
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

24/09/2009

433

Modelado de la Interaccin Diagramas de Secuencia


Consta de 4 elementos: 1. Texto del curso de accin (caso de uso). 2. Objetos - se representan con el nombre del objetos (opcional) y la clase. 3. Mensajes: flechas entre los objetos 4. Mtodos: operaciones (objetos de control) representados por rectngulos).

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

434

Modelado de la Interaccin Cmo crear un diagrama de Secuencia


1. 2.
3. 4.

5.

Copiar texto del caso de uso (parte izquierda). Agregar objetos entidad del diagrama de robustez (parte superior derecha). Agregar objetos fronterizos y actores (parte superior izquierda). Asignar mtodos y mensajes: los objetos de control pasan a ser mtodos de entidades o de objetos fronterizos (Responsabilidad). Si un objeto de control se necesita, se agrega (Cuando slo es intermediario sin actividad propia, se funde con fronterizo o entidad
Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 435

24/09/2009

Modelado de la Interaccin Diagramas de Secuencia

L I N E A D

Actor: Alguien

GUI: Botn

:Alumno

:Libros

Caso de uso Narrativa del camino bsico y sus alternativos

Mtodo1( ) Mtodo( )

E V I

Respuesta

D A

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

436

Modelado de la Interaccin Asignacin de mtodos Tarjeta CRC


Una parte fundamental pero difcil del mtodo es la asignacin de responsabilidades para cada clase. Como ayuda existen las tarjetas Clase Responsabilidad Colaboracin (CRC). Estas tarjetas ayudan a decidir y aclarar cuales operaciones (mtodos) corresponden a cada clase.
Nombre de clase Responsabilidades Mtodos que estn a cargo de esta clase Colaboracin Clases con las que va a colaborar (relacionadas)

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

437

Modelado de la Interaccin Responsabilidad (Puntos de criterio)


Al asignar los mtodos a cada una de las clases, toma en cuenta:
1. Reusabilidad: considera que las clases pueden ser utilizadas en otros proyectos. 2. Aplicabilidad: asignar los mtodos realmente necesarios para la clase y el proyecto. 3. Complejidad: mtodos fciles de construir y de entender. 4. Conocimiento de la implementacin

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

438

CAPITULO 6 Modelado de la Colaboracin y Estados

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

439

Modelado de la Colaboracin y Estados

Ayuda a agregar aspectos del comportamiento que tiene el nuevo sistema. Se disean comnmente para sistemas de tiempo real o sistemas distribuidos.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

440

Diagramas de Colaboracin
Especifican mas los diagramas de robustez. Se apegan ms a la situacin real. nfasis en el orden de las operaciones entre los objetos del caso de uso. Agrega detalles extras al momento del paso de mensajes entre los objetos.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

441

Diagramas de Colaboracin
1. Cuenta, cantidad
:cajero :IUDeposito

2. Busca la cuenta
Depositar

3. Deposita en cuenta
Cuenta

4.

Se representan de igual forma que los diagramas de robustez, pero llevan un nmeros que determina o indica el orden de ejecucin sobre las flechas.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 442

Diagramas de Estados
Diagramas de Estado = Mquinas de estado finito = Autmatas

Solucionan la representacin del comportamiento dinmico de un objeto o grupo de objetos. Muestra el ciclo de vida de los objetos, mediante los diferentes estados que tiene o pasa un objeto.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

443

Diagramas de Estados Elementos


Estado inicial. Estados del objeto = rectngulo redondeado, con el nombre del estado y las actividades (opcional). Tipos de actividades o eventos: a) Inicio Entrada (Enter): acciones cuando entra al estado. b) Hacer (Do): acciones mientras esta en el estado. c) Salida (Exit): acciones cuando sale del estado. Transiciones: cambio de estados. Estado final.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

444

Diagramas de Estados Representacin


Estado inicial. Estados del objeto.

Estado

Estado
Entrar Hacer Salir

Transiciones.

Estado final.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

445

Diagramas de Estados Representacin - sugerencias


No cambios / cerrar
Terminando

Editand o
Salvando Si cambios / cerrar

Nombre de estados = sustantivos o verbo en participio


Las transiciones deben llevar: a) Qu la causa = {evento, mensaje, condicin, tiempo, terminacin natural} - OBLIGATORIO b) Accin opcional
Ejemplo: Si cambios / cerrar

Se permite anidar los diagramas de estado pero NO ES RECOMENDABLE


24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 446

Diagramas de Actividades
Descienden de los diagramas de flujo, redes de Petri y de las mquinas de estado. Capturan las acciones y los resultados de estas acciones. Representan la secuencia de actividades que se realizan en un caso de uso (mas detallado, como un diagrama de flujo).

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

447

Ejemplo de Diagrama de Actividades


Actividad 1 Actividad 2 Actividad 4
cond

Actividad 3

Entregar
Actividad 5 Actividad 6

Actividad

Utiliza los mismos smbolos de los diagramas de estado.


Permite representar las actividades que se pueden hacer en paralelo.

Permite colocar los diferentes caminos (decisiones).


24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 448

Diagramas de Actividades
Swimlanes (carriles) permiten agrupar las actividades dependiendo de quien las realizadas. Cada responsable (clase) de alguna actividad tiene un carril.
JEFE Saluda CAPTURIST A Carga datos Registra Calcula total Autoriza Informa INVENTARIO S

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

449

Capitulo 7 Requerimientos

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

450

Requerimientos
Qu es un requerimiento? Criterio especifico de un usuario que un sistema tiene que satisfacer. Los requerimientos definen el comportamiento y funcionalidad requerida por el usuario para un sistema. Expresados por frases que incluyen: 1. shall tiene que, debe que 2. must debe de, haber de

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

451

Requerimientos
Tipos de requerimientos: 1. Funcionales: el sistema tiene que generar automaticamente . 2. De Datos: 3. De ejecucin (desempeo): El sistema debe de validar los datos que entran. 4. De capacidad: El sistema tiene que mostrar informacin de 10,000 transacciones. 5. De prueba: El sistema tiene que permitir hacer transacciones de 50 usuarios al mismo tiempo.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

452

Casos de Uso <-> Requerimientos


Los casos de uso son Algunos o Todos los Requerimientos.

Se sugiere hacer un caso de uso por cada requerimiento funcional, debido a que:
Un caso de uso describe una unidad de comportamiento. Los requerimientos describen las reglas que rigen el comportamiento del sistema.

Las funciones son acciones individuales que ocurren dentro del comportamiento.

Un caso de uso puede satisfacer mas de un requerimiento (funcional/no funcional), o bien la combinacin de varios casos de uso pueden satisfacer un solo requerimiento.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 453

Trazabilidad de Requerimientos
Al iniciar un proyecto se pueden asignar algunos requerimientos a casos de uso; pero como avanza el proyecto estos se verifican/validan trazabilidad. Asignacin/Trazabilidad son trminos importantes a travs de todo el ciclo de vida, debido a que nos ayudan a determinar si el anlisis, diseo cumplen con los requerimientos deseados.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

454

Trazabilidad de Requerimientos
Antes de iniciar la codificacin hay que analizar estos aspectos: Captura de Datos: encontrar caminos efectivos para capturar los elementos de cada fase del ciclo de vida.(puedes actualizar o cambiar algunos elementos de fases del ciclo). Anlisis de datos y reduccin: asegurar que todos los puntos hechos/asignados son vlidos, que todos los requerimientos fueron asignados y realizados (trace). Reporte de datos: documentacin del proyecto (reporte de los resultados de la captura de datos y el anlisis y reduccin).

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

455

Puntos a realizar
Revisa los requerimientos asignados a cada uno de los casos de uso (todos los requerimientos deben estar asignados entre todos los casos de uso). Verificar que cada requerimiento es realizado en por lo menos una clase del modelo de dominio. Verificar que los requerimientos se satisfacen en por lo menos un casos de uso (busca entre la descripcin de los casos de uso y los diagramas de secuencia).

Si realizaste diagramas de colaboracin o estado, verifica que el comportamiento de los diagramas (estados) cumplan con lo especificado por los requerimientos.
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009 456

Capitulo 8 Implementacin

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

457

Administracin de Proyectos
Ser listo e ingenioso. No desconcentrarse y perder el enfoque en el proceso del proyecto.

No utilizar herramientas visuales para generar pruebas tontas o simples del cdigo.
Apreciar mas la calidad de cdigo que la cantidad.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

458

Revisar el modelo de dominio


Finalizar los diagramas de secuencia y refinar el modelo de dominio (verificar que los mtodos sean concisos y atmicos). Realiza:

Define una lista de argumentos para tus operaciones.


Define operaciones lgicas Asigna clases a componentes si es posible.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

459

Pruebas
Para saber si tu sistema es aceptable, realiza pruebas: Caja Blanca

Caja Negra casos de uso


Prueba basado en estados (sistemas de tiempo real). Las pruebas deben involucrar grupos lgicos (paquetes) de casos de uso, pruebas de unidad, de integracin y de sistema.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

460

Mtricas
1. Determinar el peso de tus clases, para saber la complejidad de tus clases.

2. Responsabilidad de una clase medir el nmero de metodos llamados en una clase.


3. Profundidad del rbol medicin de la forma de tu modelo de dominio (mientras mas profundo sea mas complejo es). 4. Numero de hijos tamao del modelo de dominio.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

461

ANEXO Resumen de smbolos empleados

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

462

Casos de uso
Persona, mquina o programa externo al sistema que se va a realizar, que inician una accin o responden a una solicitud del sistema ACTOR

Representa una accin o funcin que el actor desea realizar. Se describe con un verbo o con un verbo y un complemento. CASO DE USO

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

463

Diagramas de clases
Nombre Atributos CLASE A D E Mtodos Abstraccin de un conjunto de objetos con comportamiento comn.

C Relacin de Agregacin o Contencin: la clase D contiene a la clase E, es decir, la clase E se agreg a la clase D. Tambin llamada parte-de: E es parte de D
464

Relacin de Generalizacin: A es una generalizacin de las clases B y C.


Inversamente: B y C heredan de la clase A
24/09/2009

Objeto fronterizo

Diagramas de clases estereotipos


Relaciones permitidas

Objeto de control

Relaciones prohibidas
Entidad

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

465

Diagramas de Secuencia
L
Actor Froterizo :Entidad

I N E A D E

Mtodo( ) Mtodo( )

Respuesta

V I
24/09/2009 Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

D A

466

Diagramas de Estados
Estado inicial. Estados del objeto.

Estado

Estado
Entrar Hacer Salir

Transiciones.

Estado final.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

467

Bibliografa.

24/09/2009

Hubner Janampa Patilla - Administracin de Bases de Datos - 2009

468

También podría gustarte