Está en la página 1de 51

Laboratorio de Bases de Datos

Sesin 5:

NORMALIZACION EN MYSQL
Interaccin con interfaces de
software a medida

Prof. Arturo Daz Pulido

Laboratorio de Bases de Datos

Antes de iniciar la sesin tomaremos en cuenta el desarrollo de una


plataforma para la utilidad de las bases de datos que se generan a partir de
los casos tomados en cuenta en las prcticas del laboratorio.
Plataformas a usar como complemento del desarrollo del curso:

JAVA
JSP
PHP
MS Excel

Entonces en adelante todas nuestras aplicaciones tendrn el soporte de uno


de estas plataformas de software.

Prof. Arturo Daz Pulido

Laboratorio de Bases de Datos

PRACTICA " Definicin y Concepto de


Normalizacin

1. El alumno deber conseguir informacin de 3


fuentes bibliogrficas distintas, el concepto de
Definicin.
2. No olvidar hacer referencia de la bibliografa
donde se tomaron los datos.
3. Con las definiciones obtenidas, generar un
concepto propio de lo que significa
Normalizacin.
4. Discutir la informacin recabada en el aula.

Prof. Arturo Daz Pulido

Laboratorio de Bases de Datos

Qu es la NORMALIZACIN?
La normalizacin es un proceso que consiste
asignas
atributos
a
las
entidades.
normalizacin reduce las redundancias de
datos por extensin, ayuda a eliminar
anomalas de datos que se derivan de
redundancias.

en
La
los
las
las

La normalizacin no elimina las redundancias de


datos, pero si produce la redundancia
controlada que permite vincular las tablas de
base de datos.
Palabras Claves: proceso, reduce, eliminacin,
redundancia Cuando se crean bases de datos
relacionales, un error comn es tener datos
innecesarios. Por ejemplo, una tabla puede
contener dos columnas: una puede ser la fecha
de nacimiento de una persona en particular y la
otra su edad. La informacin de la edad de una
persona es redundante, debido a que fcilmente
se puede calcular la edad de alguien si se sabe
su fecha de nacimiento. Para eliminar la
Prof. Arturo Daz Pulido

Laboratorio de Bases de Datos

informacin redundante, se utiliza una tcnica


conocida como normalizacin.
Palabras Claves: datos innecesarios,
eliminacin, redundancia

Razones para NORMALIZAR.


El proceso de normalizacin se hace necesario
para:
Evitar la redundancia de los datos y las
inconsistencias.
Evitar la incapacidad de almacenar ciertos
datos.
Evitar la ambigedad y prdida de
informacin.
Evitar
problemas
de
actualizacin
(anomalas de insercin, borrado y
modificacin) de los datos en las tablas.
Proteger la integridad de los datos.
Prof. Arturo Daz Pulido

Laboratorio de Bases de Datos

Reglas de la NORMALIZACIN.
Existen bsicamente tres niveles de normalizacin:
Primera Forma Normal (1FN)
Segunda Forma Normal (2FN)
Tercera Forma Normal (3FN)
Cuando una base de datos se conforma a un
nivel, se considera normalizada a esa forma de
normalizacin. No siempre es una buena idea
tener una base de datos conformada en el nivel
ms alto de normalizacin, puede llevar a un
nivel de complejidad que pudiera ser evitado si
estuviera en un nivel ms bajo de normalizacin.
A continuacin explicaremos a detalle el proceso
de la normalizacin.

Prof. Arturo Daz Pulido

Laboratorio de Bases de Datos

Primera Forma Normal (1FN)

La regla de la Primera Forma Normal establece que las columnas repetidas


deben eliminarse y colocarse en tablas separadas.
Poner la base de datos en la Primera Forma Normal resuelve el problema de los
encabezados de columna mltiples.
Muy a menudo, los diseadores de bases de datos inexpertos harn algo similar
a la tabla no normalizada. Una y otra vez, crearn columnas que representen
los mismos datos.
La normalizacin ayuda a clarificar la base de datos y a organizarla en partes
ms pequeas y ms fciles de entender. En lugar de tener que entender una
tabla gigantesca y monoltica que tiene muchos diferentes aspectos, slo
tenemos que entender los objetos pequeos y ms tangibles, as como las
relaciones que guardan con otros objetos tambin pequeos.

Prof. Arturo Daz Pulido

Laboratorio de Bases de Datos

Segunda Forma Normal (2FN)

La regla de la Segunda Forma Normal establece que todas las dependencias


parciales se deben eliminar y separar dentro de sus propias tablas.
Una dependencia parcial es un trmino que describe a aquellos datos que no
dependen de la llave primaria de la tabla para identificarlos.
Una vez alcanzado el nivel de la Segunda Forma Normal, se controlan la
mayora de los problemas de lgica.
Podemos insertar un registro sin un exceso de datos en la mayora de las tablas.

Tercera Forma Normal (3FN)

Una tabla est normalizada en esta forma si todas las columnas que no son llave
son funcionalmente dependientes por completo de la llave primaria y no hay
dependencias transitivas.
Prof. Arturo Daz Pulido

Laboratorio de Bases de Datos

Comentamos anteriormente que una dependencia transitiva es aquella en la


cual existen columnas que no son llave que dependen de otras columnas que
tampoco son llave.
Cuando las tablas estn en la Tercera Forma Normal se previenen errores de
lgica cuando se insertan o borran registros.
Cada columna en una tabla est identificada de manera nica por la llave
primaria, y no debe haber datos repetidos. Esto provee un esquema limpio y
elegante, que es fcil de trabajar y expandir.

EJEMPLO.

Se tiene la siguiente estructura y se desea normalizarla

Prof. Arturo Daz Pulido

Laboratorio de Bases de Datos

Como se puede observar, toda la informacin se encuentra concentrada en


una sola tabla, esto hace que sea un poco ms difcil de entender y sobre todo
que exista duplicidad de la informacin. Hacindonos ms difcil su
actualizacin.
Aplicaremos las reglas de Normalizacin a la tabla dada.

Primera Forma Normal (1FN)


La 1FN nos dice que: las columnas repetidas deben eliminarse y colocarse en tablas
separadas.
Prof. Arturo Daz Pulido

10

Laboratorio de Bases de Datos

Al examinar estos registros, podemos darnos cuenta que contienen un grupo repetido para
NUM_ITEM, DESC_ITEM, CANT y PRECIO.

Los Pasos a seguir son :

1.

Tenemos que
eliminar los
grupos
repetidos .

2.

Tenemos que
crear una nueva
tabla con la PK
de la tabla base
y el grupo
repetido.

3.

Las tablas
quedaran as :

Prof. Arturo Daz Pulido

11

Laboratorio de Bases de Datos

Segunda Forma Normal (2FN)


La 2FN nos dice que : todas las dependencias parciales se deben eliminar y
separar
dentro
de
Las
tablas
quedaran as : sus propias tablas.
La tabla ORDENES est en 2FN.
Cualquier valor nico de ID_ORDEN
determina un slo valor para cada
columna. Por lo tanto, todas las
columnas son dependientes de la
llave primaria ID_ORDEN.
Por su
parte,
la
tabla
ARTICULOS_ORDENES
no se
encuentra
en 2FN ya que
las columnas PRECIO y
DESC_ITEM son dependientes de
NUM_ITEM, pero no son dependientes
de ID_ORDEN.
Lo que haremos a continuacin es
eliminar estas columnas de la tabla
Prof. Arturo Daz Pulido

12

Laboratorio de Bases de Datos

ARTICULOS_ORDENES y crear una tabla


primaria de la que dependen.

ARTICULOS

con dichas columnas y la llave

Tercera Forma Normal (3FN)


La 3FN nos dice que: tenemos que eliminar cualquier columna no llave que sea
dependiente de otra columna no llave.
Los pasos a seguir son:
1. Determinar las columnas que son dependientes de otra columna no llave.
2. Eliminar esas columnas de la tabla base.
3. Crear una segunda tabla con esas columnas y con la columna no llave de
la cual son dependientes.

Al observar las tablas que hemos creado, nos damos cuenta que tanto la tabla
ARTICULOS, como la tabla ARTICULOS_ORDENES se encuentran en 3FN. Sin
embargo la tabla ORDENES no lo est, ya que NOM_CLIENTE y ESTADO son
dependientes de ID_CLIENTE, y esta columna no es la llave primaria.
Prof. Arturo Daz Pulido

13

Laboratorio de Bases de Datos

Para normalizar esta tabla, moveremos las columnas no llave y la columna


llave de la cual dependen dentro de una nueva tabla CLIENTES. Las nuevas
tablas CLIENTES y ORDENES se muestran a continuacin:

Prof. Arturo Daz Pulido

14

Laboratorio de Bases de Datos

PRACTICA No. 1 " Aplicando la Normalizacin

1. El alumno deber conseguir informacin de un sistema


de base de datos de su entorno social.
2. Deber exponer en clase, el sistema seleccionado,
(Nombre de la Empresa, Problemtica Presentada,
Prof. Arturo Daz Pulido

15

Laboratorio de Bases de Datos

Informacin de la Base de Datos antes de la


Normalizacin.)
3. Deber aplicar el proceso de Normalizacin en sus 3
fases (1FN, 2FN, 3FN). Cada una de estas deber ser
explicada de manera independiente.
4. Dicho trabajo deber ser presentado en Papel Bond.

Desarrollo de las Prcticas:


Construir un programa con conexin a la plataforma de su
eleccin.
Concluir con la prctica solicitada en el laboratorio.

Prof. Arturo Daz Pulido

16

Laboratorio de Bases de Datos

Gua de Ejercicios
Aplicar las reglas de normalizacin los siguientes ejercicios.
1. Un dato sin normalizar no cumple con ninguna regla de normalizacin. Para explicar con
un ejemplo en qu consiste cada una de las reglas, vamos a considerar los datos de la
siguiente tabla.
ordenes (id_orden, fecha, id_cliente, nom_cliente, estado, num_art, nom_art, cant, precio)
Ordenes
Id_orde
n
2301
2301
2301
2302
2303
2303

Fecha
23/02/1
1
23/02/1
1
23/02/1
1
25/02/1
1
27/02/1
1
27/02/1
1

Id_client
e
101

Nom_client
e
Martin

101

Estado

nom_art

Caracas

Num_ar
t
3786

can
t
3

Preci
o
35,00

Martin

Caracas

4011

65,00

9132

Raquet
a
Paq-3

101

Martin

Caracas

4,75

107

Herman

Coro

5794

Paq-6

5,00

110

Pedro

Maraca
y
Maraca
y

4011

Raquet
a
Funda

65,00

110

Pedro

10,00

3141

Red

PRIMERA FORMAL NORMAL (1FN)


Al examinar estos registros, podemos darnos cuenta que contienen un grupo
repetido para NUM_ART, NOM_ART, CANT y PRECIO. La 1FN prohbe los grupos
repetidos, por lo tanto tenemos que convertir a la primera forma normal. Los pasos
a seguir son:
Tenemos que eliminar los grupos repetidos.
Tenemos que crear una nueva tabla con la PK de la tabla base y el grupo
repetido.
Los registros quedan ahora conformados en dos tablas que llamaremos ORDENES y
ARTICULOS_ORDENES
ordenes (id_orden, fecha, id_cliente, nom_cliente, estado)
Articulos_ordenes (id_orden, num_art, nom_art, cant, precio)
Ordenes
Id_orden
Fecha
Id_cliente Nom_cliente
2301
23/02/11
101
Martin
2302
25/02/11
107
Herman

Prof. Arturo Daz Pulido

Estado
Caracas
Coro

17

Laboratorio de Bases de Datos


2303

27/02/11

110

Articulos_ordenes
Id_orden Num_art nom_art
2301
3786
Red
2301
4011
Raqueta
2301
9132
Paq-3
2302
5794
Paq-6
2303
4011
Raqueta
2303
3141
Funda

Pedro

cant
3
6
8
4
2
2

Maracay

Precio
35,00
65,00
4,75
5,00
65,00
10,00

SEGUNDA FORMAL NORMAL (2FN)


Ahora procederemos a aplicar la segunda formal normal, es decir, tenemos que
eliminar cualquier columna no llave que no dependa de la llave primaria de la
tabla. Los pasos a seguir son:
Determinar cules columnas que no son llave no dependen de la llave primaria
de la tabla.
Eliminar esas columnas de la tabla base.
Crear una segunda tabla con esas columnas y la(s) columna(s) de la PK de la
cual dependen.
La tabla ORDENES est en 2FN. Cualquier valor nico de ID_ORDEN determina un
slo valor para cada columna. Por lo tanto, todas las columnas son dependientes
de la llave primaria ID_ORDEN.
Por su parte, la tabla ARTICULOS_ORDENES no se encuentra en 2FN ya que las
columnas PRECIO y NOM_ART son dependientes de NUM_ART, pero no son
dependientes de ID_ORDEN. Lo que haremos a continuacin es eliminar estas
columnas de la tabla ARTICULOS_ORDENES y crear una tabla ARTICULOS con
dichas columnas y la llave primaria de la que dependen.
Las tablas quedan ahora de la siguiente manera.
Articulos_ordenes (id_orden, num_art, cant)
Articulos_ordenes
Id_orden Num_art
2301
3786
2301
4011
2301
9132
2302
5794
2303
4011
2303
3141

Prof. Arturo Daz Pulido

cant
3
6
8
4
2
2

18

Laboratorio de Bases de Datos

Articulos ( num_art, nom_art, precio)


Articulos
Num_art nom_art
3786
Red
4011
Raqueta
9132
Paq-3
5794
Paq-6
3141
Funda

Precio
35,00
65,00
4,75
5,00
10,00

TERCERA FORMAL NORMAL (3FN)


La tercera forma normal nos dice que tenemos que eliminar cualquier columna no
llave que sea dependiente de otra columna no llave. Los pasos a seguir son:
Determinar las columnas que son dependientes de otra columna no llave.
Eliminar esas columnas de la tabla base.
Crear una segunda tabla con esas columnas y con la columna no llave de la
cual son dependientes.
Al observar las tablas que hemos creado, nos damos cuenta que tanto la tabla
ARTICULOS, como la tabla ARTICULOS_ORDENES se encuentran en 3FN. Sin embargo
la tabla ORDENES no lo est, ya que NOM_CLIENTE y ESTADO son dependientes de
ID_CLIENTE, y esta columna no es la llave primaria.
Para normalizar esta tabla, moveremos las columnas no llave y la columna llave de
la cual dependen dentro de una nueva tabla CLIENTES. Las nuevas tablas CLIENTES
y ORDENES se muestran a continuacin.
ordenes (id_orden, fecha, id_cliente)
Ordenes
Id_orden
Fecha
Id_cliente
2301
23/02/11
101
2302
25/02/11
107
2303
27/02/11
110
Clientes (id_cliente, nom_cliente, estado)
Ordenes
Id_cliente Nom_cliente
Estado
101
Martin
Caracas
107
Herman
Coro
110
Pedro
Maracay

Prof. Arturo Daz Pulido

19

Laboratorio de Bases de Datos


Por lo tanto la base de datos queda de la siguiente manera:
ordenes (id_orden, fecha, id_cliente)
Clientes (id_cliente, nom_cliente, estado)
Articulos ( num_art, nom_art, precio)
Articulos_ordenes (id_orden, num_art, cant)
2. FACTURA DE COMPRA VENTA: La empresa COLOMBIAN SYSTEMS lo ha contratado como el
Ingeniero Encargado para sistematizar la facturacin. En la siguiente FACTURA DE
COMPRA VENTA, usted debe analizar toda la informacin disponible y aplique el proceso
de normalizacin, hasta llegar a la Tercera Forma Normal.
Se pide realizar la respectiva justificacin detallada de cada uno de los pasos que
conduzcan al resultado final.
Factura(NUM_FAC, FECHA_FAC, NOM_CLIENTE, DIR_CLIENTE, RIF_CLIENTE, CIUDAD_CLIENTE,
TELEF_CLIENTE, CATEGORIA, COD_PROD, DESP_PROD, VAL_UNIT, CANT_PROD)

Donde:
NUM_FAC: Nmero de la factura de compra venta
FECHA_FAC: Fecha de la factura de compra venta
NOM_CLIENTE: Nombre del cliente
DIR_CLIENTE: Direccin del cliente
RIF_CLIENTE: Rif del cliente
CIUDAD_CLIENTE: Ciudad del cliente
TELEF_CLIENTE: Telfono del cliente
CATEGORIA: Categora del producto
COD_PROD: Cdigo del producto
DESCRIPCION: Descripcin del producto
VAL_UNIT: Valor unitario del producto
CANT_PROD: Cantidad de productos q compra el cliente
La llave primaria es Nmero de Factura de venta: NUM_FAC
3. EMPRESA DE ENVIO DE MERCANCIA: a continuacin se agrupan todos los atributos que
hacen parte de la base de datos para aplicarle las reglas de normalizacin. Donde se
incluyen los nombres de los atributos con su significado
* GUIA_NO = Numero de Guia
* GUIA_FECHA= Fecha de la Guia
* GUIA_HORA= Hora de la Guia
* ORGN_RIF = Identificacion de Empresa Origen
* ORGN_NOM = Nombre de Empresa Origen
* ORGN_ACT = Actividad Comercial de Empresa Origen

Prof. Arturo Daz Pulido

20

Laboratorio de Bases de Datos


* ORGN_CIUDAD= Ciudad de Empresa Origen
* ORGN_DIR = Direccion de Empresa Origen
* ORGN_TEL = Telefono de Empresa Origen
* ORGN_CEL = Celular de Empresa Origen
* DEST_ID = Identificacion del destinatario
* DEST_NOM = Nombre del destinatario
* DEST_COD_CIUDAD = Codigo de la ciudad del destinatario
* DEST_CIUDAD= Ciudad del destinatario
* DEST_DIR = Direccion del destinatario
* DEST_TEL = Telefono del destinatario
* DEST_KM = Distancia kilometraje de Ciudad origen a ciudad del destinatario
* CODIGO = Codigo del paquete
* TIPO = Tipo de paquete
* NOMBRE = Nombre del paquete
* DESCRIPCION = Descripcin del paquete
* VALR_ FLETE = Valor del flete
4. Video club: En una tienda de video se necesita mantener informacin de alrededor de 3000
casetas cada uno de los casetes tiene asignado un nmero por cada `pelcula se necesita
conocer un ttulo y categora por ejemplo: comedia, suspenso, drama, accin, ciencia
ficcin, etc. Se mantienen algunas copias de muchas pelculas. Se le da a cada pelcula
una identificacin y se mantiene seguimiento de lo que contiene cada casete.
Un casete puede venir en varios formatos y una pelcula es grabada en un solo casete;
frecuentemente las pelculas son pedidas de acuerdo a un actor especifico Tom Cruise y
Demi More son los ms populares es por esto que se debe mantener informacin de los
actores que pertenecen a cada pelcula.
No en todas las pelculas actan artistas famosos, a los clientes de la tienda le gusta conocer
datos como el nombre real del actor, y su fecha de nacimiento.
En la tienda se mantienen informacin solo de los actores que aparecen en las pelculas y
que se tiene a disposicin. Solo se alquila videos a aquellos que pertenecen al club de
videos. Para pertenecer al club se debe tener un buen crdito. Por cada miembro del club
se mantiene una ficha con su nombre, telfono y direccin, cada miembro del club tiene
asignado un nmero de membresa. Se desea mantener informacin de todos los casetes
que un cliente alquila, cuando un cliente alquila un casete se debera conocer el nombre
de la pelcula, la fecha en la que se alquila y la fecha de devolucin.
Se pide aplicar las reglas de normalizacin hasta la tercera forma normal, teniendo las
siguientes entidades con sus respectivos atributos:
Alquiler (cod_alquiler, num_membresia, cod_cliente, nom_cliente, dir_cliente, telef_cliente,
cod_cassette, fecha_alquiler, fecha_dev, valor_alquiler, cantidad)
Cassettte (cod_cassette, num_copias, formato, cod_pelicula, titulo, categora, cod_actor,
nom_actor, fechanac_actor, cod_tipo)
Donde:

Prof. Arturo Daz Pulido

21

Laboratorio de Bases de Datos


cod_alquiler = Codigo del alquiler
num_membresia = Numero de membresia
cod_cliente = cdigo del cliente
nom_cliente = nombre del cliente
dir_cliente = direccin del cliente
telef_cliente = telfono del cliente
cod_cassette = cdigo del cassette
fecha_alquiler = fecha del alquiler del al pelcula
fecha_dev = fecha de devolucin de la pelicula
valor_alquiler = valor del alquiler de la pelcula
cantidad = cantidad de pelcula alquilada
num_copias = nmeros de copias de cassette
formato = formato del cassette
titulo = nombre de la pelcula
categora = categora de la pelcula
cod_actor = cdigo del actor
nom_actor = nombre del actor
fechanac_actor = fecha de nacimiento del actor
cod_tipo = cdigo del tipo de pelcula.
5. Dada la siguiente relacin PRESTAMO_LIBROS (Colegio, profesor, asignatura/ habilidad,
aula, curso, libro, editorial, fecha_prestamo) que contiene informacin relativa a los
prstamos que realizan las editoriales a los profesores de primaria de los colegios para su
evaluacin en alguna de las asignaturas/habilidades que imparten. Se pide aplicar las
reglas de normalizacin y obtener su modelo relacional, indicar sus claves, atributos
principales.
Colegio

Profesor

Asignatura/
habilidad

Aula

Curso

Libro

Editorial

Fecha_prestamo

Aprender
y ensear
en
educacin
infantil
Preescolar
Rubio,N56
Aprender
y Ensear
en
educacin
infantil

Gra

09/09/2010

Tcnicas
Rubio

05/05/2010

Gra

05/05/2010

C.P
Cervantes

Juan
Prez

Pensamiento
Lgico

1.A01

1er
Grado

C.P
Cervantes

Juan
Prez

Escritura

1.A01

1er
Grado

C.P
Cervantes

Juan
Prez

Pensamiento
Numrico

1.A01

1er
Grado

C.P
Cervantes

Alicia
Garca

Pensamiento
Espacial,
Temporal y
causal

1.B01

1er
Grado

Educacin
Infantil N9

Prentice
Hall

06/05/2010

C.P
Cervantes

Alicia
Garca

Pensamiento
Numrico

1.B01

1er
Grado

Aprender
y ensear
en

Gra

06/05/2010

Prof. Arturo Daz Pulido

22

Laboratorio de Bases de Datos

C.P
Cervantes

Andrs
Fernndez

Escritura

1.A01

2do
Grado

C.P
Cervantes

Andrs
Fernndez

Ingles

1.A01

2do
Grado

C.P
Quevedo

Juan
Mndez

Pensamiento
Lgico

2.B01

1er
Grado

C.P
Quevedo

Juan
Mndez

Pensamiento
Numrico

2.B01

1er
Grado

educacin
infantil
Aprender
y ensear
en
educacin
infantil
Saber
educar:
gua para
Padres y
Profesores
Saber
educar:
gua para
Padres y
Profesores
Aprender
y ensear
en
educacin
infantil

Gra

09/09/2010

Temas
de Hoy

05/05/2010

Temas
de Hoy

18/12/2010

Gra

06/05/2010

6. Se tiene una relacin del REPORTE_MATRICULA (cdigo_alumno, nombre_alumno,


especialidad, codigo_curso, nombre_curso, nombre_docente, oficina, seccin) se pide
aplicar las reglas de normalizacin llegando hasta las 3FN.
Cdigo
/
alumno
382145
A
382145
A
382145
A

Nombre/
alumno
Luis
Zuloaga
Luis
Zuloaga
Luis
Zuloaga

Especialid
ad

Cdigo/
curso

Industrial

MA123

Industrial

QU514

Industrial

AU521

360247k

Ral Rojas

Sistemas

PA714

360247k

Ral Rojas

Sistemas

MA123

360247k

Ral Rojas

Sistemas

AU511

Nombre_curs
o

Nombre/
docente

Matemtica
2
Fsica
Qumica

Carlos
Arambulo
Petra
Rondinel
Vctor
Moncada
Cesar
Fernadez
Carlos
Arambulo
Vctor
Moncada

Descriptiva
Investigacin
1
Matemtica
2
Dibujo

Oficina

curs
o

CB-214

CB-110

CB-120

SC-220

CB-214

CB-120

7. Se presenta una base de datos de una biblioteca, aplicar las reglas de normalizacin
simplificando hasta la tercera forma normal.
Prestamos_libro (codLibro, Titulo, Autor, Editorial, NombreLector, Fechadev)

Prof. Arturo Daz Pulido

23

Laboratorio de Bases de Datos


codLibro
1001
1004
1005
1006
1007

Titulo
Variable
compleja
Visual Basic 5
Estadstica
Oracle
University
Clipper 5.01

Autor
Murray Spiegel

Editorial
McGraw Hill

E. Petroustsos
Murray Spiegel
Nancy Greenberg y Priya
Nathan
Ramalho

Anaya
McGraw Hill
Oracle
Corp.
McGraw Hill

nombreLector
Prez Gmez,
Juan
Ros Tern, Ana
Roca, Ren
Garca Roque,
Luis
Prez Gmez,
Juan

Fechadev
15/04/2005
17/04/2005
16/04/2005
20/04/2005
18/04/2005

Observacin
Los modelos generados despus de la normalizacin, debern
mostrar su diccionario de datos respectivamente desde MySQL
Workbench.
URL de descarga: wb-datadict-plugin
https://bitbucket.org/sirgazil/wb-datadict/downloads

Prof. Arturo Daz Pulido

24

Laboratorio de Bases de Datos

Diccionario de Datos (DD) [Un Remember]


El diccionario de datos es una herramienta fundamental en el modelado de sistemas.
Las herramientas grficas, como los diagramas de flujo de datos, los diagramas de
estructura, los diagramas de transicin de estados, etc., son de mucha importancia al
modelar la estructura de los sistemas (estructuras funcionales, estructuras de mdulos,
estructuras de comportamiento, etc.) y permiten una interpretacin general de las
ideas modeladas pero, no son completos. Para contar con una especificacin
completa es preciso tener una descripcin textual de los detalles que no pueden ser
especificados en el diagrama.
El diccionario de datos es una lista organizada de todos los elementos de datos que le
son pertinentes al sistema (todos los nombres de las componentes de los diagramas),
con definiciones precisas y rigurosas para que el usuario y el analista de sistemas
puedan conocer todas las entradas, salidas, componentes de depsitos y estructuras
intermedias existentes en el sistema. El diccionario de datos describe:
El significado de los flujos y depsitos presentes en los DFDs.
La composicin de los paquetes agregados de datos (paquetes compuestos o
tems compuestos) que son transportados por los flujos de datos y que pueden
ser divididos en tems ms elementales.
La composicin de las estructuras de datos en los depsitos.
Los valores y unidades relevantes de los tems elementales de informacin de
los flujos de datos y depsitos de datos.
Los detalles de las relaciones entre los depsitos de datos.
Notacin
Existen muchas propuestas para la notacin a ser utilizada en el diccionario de
datos. La que se presenta a continuacin es una de las ms comunes, que utiliza un
conjunto reducido y simple de smbolos:
Smbol
Se lee
Ejemplo de
Interpretacin
o
la Sintaxis
:=
Se define
I := Y
El tem I est definido por la expresin
por o Se
Y
compone
de
+
Junto con
I := A + B
El tem I est compuesto de A y B (la
o Y
concatenacin de A con B)

Prof. Arturo Daz Pulido

25

Laboratorio de Bases de Datos

()

Opcional

{}

Repeticion
es de o
Iteraciones
de
o
Secuencia
de

i{}s

[|]
**
@

I := A + ( B )

Uno entre"
u O
Comentari
o
Campo
Clave

I := { A }

El tem I est compuesto de A y B , o


de A slo (B es opcional)
El tem I est compuesto de una
secuencia de As (iteracin)

I := 1 { A } 10
El tem I est compuesto de una
secuencia de As (mnimo 1 y mximo
10).

I := [ A | B |
C]
* Texto *
@A

El tem I est compuesto de A o B o


C. Slo uno de ellos. (o exclusivo)
El Texto entre asteriscos es un
comentario
El elemento A es uno de los campos
clave de un depsito de datos.

Ejemplos
CLIENTE

:= { cliente } * el archivo de Clientes *

cliente

:= nro_cliente + nombre_cliente + direccin_para_remito + crdito

nro_cliente

:= * identificador interno de un cliente, campo clave del depsito


un nmero entre 1 y 999 *

crdito

:= [Positivo | Negativo]

nombre_cliente := ttulo_de_cortesa + primer_nombre + (nombre-intermedio) +


apellido
ttulo_de_cortesa

:= [ Sr. | Srta. | Sra. | Dr. | Prof. | Don | Doa]

primer_nombre

:= 1{ caracter_vlido }30

nombre_intermedio

:= 1{ caracter_vlido }30

apellido

:= 1{ carcter_vlido }30

carcter_vlido

:= [ letra | dgito | ' | - | ]

dgito

:= [0 | 1 | 2 | 3 | 4| 5| 6| 7| 8| 9]

letra

:= [letra_en_mayscula | letra_en_minscula] * [A ... Z | a ... z]*

direccin_para_remito := calle + nmero_dir + (departamento) + (localidad) *si la


localidad no se detalla, la direccin es de Tandil*
calle

:= {carcter_valido}

nmero_dir

:= {dgito}

Prof. Arturo Daz Pulido

26

Laboratorio de Bases de Datos

localidad

:= [Tandil | Villa Cacique | Barker | Jurez | Lobera | Posadas] *


localidades en las que se entregan pedidos *

pedido

:= nro_cliente + nombre_cliente + direccin_para_remito


{item_pedido} 10 * un pedido puede contener hasta 10 items *

item_pedido := cdigo_artculo + nombre_artculo + cantidad


cdigo_artculo := 1 {dgito} 3 * identificador interno de un artculo, un nmero de
hasta tres dgitos *

Prof. Arturo Daz Pulido

27

Laboratorio de Bases de Datos

Sesin 6: Conectividad

de

Bases de Datos

Prof. Arturo Daz Pulido

28

Laboratorio de Bases de Datos

JDBC
La API de JDBC provee acceso a datos desde Java. Usando esta API podemos acceder a
variadas fuentes de datos: bases de datos relacionales, hojas de clculo (spreadsheets) y
archivos planos.

Este paquete permite conectarse a una base de datos, consultarla o actualizarla usando SQL.
Su manejo es de importancia debido a la frecuencia con que las bases de datos son usadas
hasta hoy. En resumen es un puente a los datos
As como con Java se logra independencia de la plataforma, al trabajar con JDBC se logra
adems independencia del proveedor de la base de datos.
Una dificultad enfrentada por los desarrolladores de JDBC fue que existen muchos proveedores
de bases de datos cada uno usando su propio protocolo. Es as como se acord el desarrollo
de una API Java para SQL, la cual accede la base de datos va un administrador de drivers de
terceros los cuales se conectan a bases de datos especficas. Cada proveedor de bases de
datos deba generar su propio driver conectable al administrador de drivers.
JDBC sigue un modelo similar al de ODBC. Por esto una opcin comn es conectar JDBC a
travs de un driver que acta como puente entre JDBC y ODBC, ver Figura .

Prof. Arturo Daz Pulido

29

Laboratorio de Bases de Datos

Es necesario instalar dicho conector para que las mquinas proveedoras de datos lo usen.
Con MySQL instalado y el driver JDBC instalado podemos ejercitar la conexin de Java con su
base de datos.
Todo programa Java que desea conectarse a una base de datos necesita cargar el driver
especfico para la base de datos a usar.
Para esto se usa:

try {

// Se carga el driver JDBC

Class.forName("com.mysql.jdbc.Driver");

catch( Exception e ) {

System.out.println( "No se pudo cargar el Drive." );

return;

Luego su programa debe conectarse con la base de datos especfica, la cual debe estar
previamente creada. Para esto se usa:

Prof. Arturo Daz Pulido

30

Laboratorio de Bases de Datos

Connection conexion;

Statement sentencia;

try {

conexion = DriverManager.getConnection( "jdbc:mysql://nombreBaseDatos,"usuario","pass

sentencia = conexion.createStatement();

} catch( SQLException e ) {
System.out.println("Error en la operacin" + e.getMessage());

7
8

Ejemplo
ConsultasClientesBanco.java
Este ejemplo supone que exite una Base de Datos "Banco" ya registrada con mySql, que
contiene la tabla "Clientes" con los campos "rut, nunCuenta, nombre, fechaActivacion y saldo",
para una serie de clientes.
El programa se conectar con esta BD y realizar una serie de consultas a sta mediante un
menu de opciones.

1
2
3

import java.sql.*;
import java.util.*;
class ConsultasClientesBanco {
static public void main( String[] args ) {

4
Connection conexion = null;

5
6
7
8

Statement sentencia;
ResultSet resultado;
int op = 0, rutbuscado = 0;
String consulta;

Prof. Arturo Daz Pulido

31

Laboratorio de Bases de Datos


9

Scanner s = new Scanner(System.in);

10
11

System.out.println( "Conectandose con la Base de datos Banco..." );

12
13
14

try {

// Se carga el driver JDBC

Class.forName("com.mysql.jdbc.Driver");
} catch( Exception e ) {

15
16
17

System.out.println( "No se pudo cargar el Drive." );


return;
}

18
19
20

try {
conexion = DriverManager.getConnection("jdbc:mysql://localhost/Banco",
"root","");

21
22
23

System.out.println( "Conexion establecida" );


sentencia = conexion.createStatement();

24
25

do {
System.out.println("1) Mostrar todos los datos");

26
System.out.println("2) Mostrar los clientes con saldo mayor a $100.000");

27
28

System.out.println("3) Obtener el saldo promedio de todos los clientes");


System.out.println("4) Mostrar datos de un determinado cliente");

29

System.out.println("5) Fin");

30

System.out.print("Ingrese opcion: ");

31

op = s.nextInt();

32

switch(op) {

33

case 1: resultado = sentencia.executeQuery("Select * from Clientes");

Prof. Arturo Daz Pulido

32

Laboratorio de Bases de Datos


while (resultado.next()){

34

System.out.println("Rut = " + resultado.getInt("rut"));

35

System.out.println("Numero de cuenta = " +

36

resultado.getInt("numCuenta"));

37

System.out.println("Nombre cliente = "

38

+ resultado.getString("nombre"));

39

System.out.println("Fecha activacion = "

40

+ resultado.getDate("fechaActivacion"));

41

System.out.println("Saldo = " + resultado.getInt("saldo"));

42

System.out.println();

43

44

break;

45

case 2: consulta = "Select nombre from Clientes where saldo > 100000";
resultado = sentencia.executeQuery(consulta);

46

while (resultado.next())

47
System.out.println("Nombre cliente = "

48

+ resultado.getString("nombre"));

49
50

break;
case 3: consulta = "Select avg(saldo) from Clientes";

51

resultado = sentencia.executeQuery(consulta);

52

while (resultado.next())
System.out.println("Saldo promedio = " + resultado.getInt(1));

53

break;

54
55

case 4: System.out.print("Ingrese rut cliente: ");

56

rutbuscado = s.nextInt();
consulta = "Select * from Clientes where rut = " + rutbuscado;

57
resultado = sentencia.executeQuery(consulta);

58

Prof. Arturo Daz Pulido

while (resultado.next()){

33

Laboratorio de Bases de Datos


59

System.out.println("Rut = " + resultado.getInt("rut"));

60

System.out.println("Numero de cuenta = "


+ resultado.getInt("numCuenta"));

61

System.out.println("Nombre cliente = "

62

+ resultado.getString("nombre"));

63

System.out.println("Fecha activacion = "

64

+ resultado.getDate("fechaActivacion"));

65

System.out.println("Saldo = " + resultado.getInt("saldo"));

66

67

break;

68

}
} while (op != 5);

69

sentencia.close();

70

conexion.close();

71

} catch( SQLException e ) {System.out.println("Error en la operacion"

72
+ e.getMessage()); }

73
74

}
}

75
76
77
78
79
80
81
82

Prof. Arturo Daz Pulido

34

Laboratorio de Bases de Datos

Conectividad desde un lenguaje husped


PHP puede conectarse con bases de datos de dos formas: mediante el uso directo de funciones
propias del intrprete que dependen del gestor de base de datos usadas o a trves del estndar
ODBC (Open Data Base Connectivity).
En PHP el trabajo con la base de datos se basa en tres etapas fundamentales:
1. Establecer contacto con la base de datos
2. Realizar las operaciones necesarias
3. Cerrar los recursos empleados

Conectar con una base de datos MySQL - PHP


Para conectarse con una base de datos es necesario crear una conexin con el servidor. Esto
se logra en PHP mediante el uso de la funcin mysql_connect(). Sintaxis

mysql_connect($ruta, $usuario, $password);

1
Parmetro
$ruta

$usuario

Descripcin
Opcional. Especfica el servidor al cual se conecta. El valor por defecto es
"localhost:3306".
Opcional. Identifica el usuario. El valor por defecto es el nombre de usuario
propietario del proceso.

$password Opcional. El valor por defecto es "". No recomendado

ruta invariablemente en un servidor de paga o remoto sera LOCALHOST

Ejemplo de conexin de una base de datos MySQL desde PHP

lnea 6 mediante la funcin mysql_connect nos conectamos al gestor MySQL

La funcin mysql_error, devuelve el texto del mensaje de error de la ltima operacin MySQL

Mediante la funcin mysql_select_db seleccionamos la base datos (lnea 8)

mysql_close cierra la conexin a la base de datos (lnea 10).

Prof. Arturo Daz Pulido

35

Laboratorio de Bases de Datos


1

<?php

$ruta

= "localhost";

$login

= "mi_login";

$password = "mi_password";

$db

$conexion = mysql_connect( $ruta, $login, $password)

= "miBaseDatos";

or die(mysql_error());

mysql_select_db( $db, $conexion ) or die(mysql_error());

echo "conectado bravo!!!!!!";

10

mysql_close($conexion);

11

?>

Crear una base de datos en MySQL - PHP


La sentencia CREATE DATABASE es usada para crear una base de datos en MySQL. Su
sintaxis es la siguiente:
1

CREATE DATABASE nombre

Para generar esta sentencia desde PHP usaremos las siguiente funciones:

La funcin mysql_connect() nos conecta al servidor mysql con los parmetros ruta, login y
password. $ruta indica el sitio donde estaran nuestros datos. La rutalocalhost funciona
regularmente cuando nos conectamos a un servidor instalados en nuestra pc o aun servidor
de paga.

La funcion mysql_query ejecuta una sentencia SQL.

La funcin mysql_close() nos lleva los datos de la memoria principal a un almacenamiento


secundario.

die muestra el mensaje de error indicado por pantalla y finaliza el script actual en el punto en
el que se encuentre. No devuelve valor alguno.

Ejemplo de creacin de una base de datos MySQL desde PHP

mysql_connect (lnea 3) hace una conexin a la base de datos

Prof. Arturo Daz Pulido

36

Laboratorio de Bases de Datos

mysql_query (lnea 8) hace una consulta en este caso crea la base de datos.

mysql_close (lnea 13) cierra la conexin a la base de datos

1
2

<?php
include('ruta.php');

$conexion = mysql_connect($ruta,$usuario, $password);

if(!$conexion) {

die('Imposible conexin al servidor: '. mysql_error());

$sentencia = 'CREATE DATABASE IF NOT EXISTS prograwe_miBD';

if (mysql_query($sentencia, $conexion)) {
echo 'Base de datos creada';

} else {

10

echo 'Error al crear la base de datos: '.mysql_error();

11
}

12
mysql_close($conexion);

13

?>

14

Crear una tabla en MySQL - PHP


El componente principal de una base de datos son las tablas, MySQL tiene varios tipos de
tablas, nosotros usaremos en este sitio las tablas InnoDB, por razones de integridad referencial
y concurrencia.
Ejemplo: El Campeonato Mundial de Pilotos es otorgado por la Federacin Internacional de
Automovilismo al piloto de Frmula 1 ms exitoso de la temporada, determinado por el sistema
de puntuacin en relacin con los resultados de los Grandes Premios. El primer Campeonato
Mundial de Pilotos fue otorgado en la temporada 1950 a Giuseppe Farina. Considere la
siguiente tabla de datos correspondientes a los campeones de Formula 1 (2000 - 2011) y sus
escuderias.

Prof. Arturo Daz Pulido

37

Laboratorio de Bases de Datos

Ao

Campen

2013

Sebastian Vettel

Red Bull Racing

2012

Sebastian Vettel

Red Bull Racing

2010

Sebastian Vettel

Red Bull Racing

2009

Jenson Button

Brawn GP

2008

Lewis Hamilton

McLaren

2007

Kimi Raikkonen

Ferrari

2006

Fernando Alonso

Renault

2005

Fernando Alonso

Renault

2004

Michael Schumacher

Ferrari

2003

Michael Schumacher

Ferrari

2002

Michael Schumacher

Ferrari

2001

Michael Schumacher

Ferrari

2000

Michael Schumacher

Ferrari

A continuacin se presenta el cdigo MySQL necesario para crear una tabla

CREATE TABLE f1 (

year INT,

campeon CHAR( 35 ) NOT NULL,

escuderia CHAR( 35 ) NOT NULL,

PRIMARY KEY ( year )

) ENGINE = InnoDB;

A continuacin se presenta el correspondiente cdigo PHP

Prof. Arturo Daz Pulido

38

Laboratorio de Bases de Datos

En la lnea 9 se crea una conexin a la base datos mediante la funcin mysql_connect

La funcin mysql_select_db nos permite seleccionar la base de datos (lnea 10)

mysql_query nos permite box10 box un query a la base de datos (lnea 12)

Mediante la funcin mysql_close cerramos la conexin a la base de datos.

1
2

<?php
$query = "CREATE TABLE IF NOT EXISTS f1 (";

3
$query .= "year INT NOT NULL , ";

$query .= "campeon CHAR( 35 ) NOT NULL,";

$query .= " escuderia CHAR( 35 ) NOT NULL , ";

$query .= "PRIMARY KEY ( year ) ) ";

$query .= "ENGINE = InnoDB;";

include('ruta.php');

$conexion = mysql_connect($ruta,$login,$password) or die(mysql_error());


mysql_select_db( $db, $conexion ) or die(mysql_error());

10
11

if (mysql_query($query, $conexion)){

12

echo "Tabla creada con xito <br>";

13

} else die(mysql_error());

14
15

mysql_close($conexion);
?>

16

Ejemplo: Los XVI Juegos Panamericanos se llevaron a cabo del 14 al 30 de octubre de 2014,
en la ciudad de Lima, Peru. sta es la tercera vez que nuestro pas organiza unos juegos
panamericanos y la primera vez que se organizan fuera de la Ciudad de Lima. En esta actividad
crearemos una tabla que contendr el medallero de esta competencia.

Prof. Arturo Daz Pulido

39

Laboratorio de Bases de Datos


1
2

<?php
include('ruta.php');

3
$query = 'CREATE TABLE IF NOT EXISTS panamericanos (';

4
5

$query .= 'pais CHAR(35)NOT NULL,';


$query .= ' oro

INT DEFAULT 0,';

$query .= ' plata INT DEFAULT 0,';

$query .= ' bronce INT DEFAULT 0,';

$query .= ' total INT DEFAULT 0,';

$query .= ' PRIMARY KEY ( PAIS ) ) ENGINE = InnoDB;';

10

$conexion = mysql_connect( $ruta, $login, $password)


or die(>mysql_error());

11
12

mysql_select_db( $db, $conexion ) or die(>mysql_error());


mysql_query($query, $conexion) or die(>mysql_error());

13
14

mysql_close($conexion);
?>

15

Insertar registros en una tabla.


La sentencia INSERT INTO es usada para agregar registros en una tabla de base de datos.
La sentencia tiene dos sintaxis genericas validas

1
2

1
2

La primera se usa si insertaremos valores en todas las columnas que componen la tabla
INSERT INTO nombre_tabla
VALUES (valor1, valor2, valor3,...)

La segunda se usa cuando solo ingresaremos datos en algunas columnas


INSERT INTO nombre_tabla (columna1, columna2, columna3,...)
VALUES (valor1, valor2, valor3,...)

Prof. Arturo Daz Pulido

40

Laboratorio de Bases de Datos

Ejemplo: Insercin de registros en MySQL con PHP usaremos el caso de Formula 1

1
2

<?php
include("ruta.php");

$conexion = mysql_connect( $ruta, $login, $password)

or die(mysql_error());

mysql_select_db( $db, $conexion ) or die(mysql_error());

mysql_query("INSERT INTO f1 VALUES (2011,'Sebastian Vettel','Red Bull Racing')",

$conexion) or die(mysql_error());

mysql_query("INSERT INTO f1 VALUES (2010,'Sebastian Vettel','Red Bull Racing')",


$conexion) or die(mysql_error());

mysql_query("INSERT INTO f1 VALUES (2009,'Jenson Button Brawn','GP')",

10

$conexion) or die(mysql_error());

11

mysql_query("INSERT INTO f1 VALUES (2008,'Lewis Hamilton','McLaren')",

12

$conexion) or die(mysql_error());

13
echo "Operacin exitosa";

14
15

mysql_close($conexion);
?>

16
>

Ejemplo: Medallero juegos Panamericanos Lima 2014.

<?PHP

include('ruta.php');

$conexion = mysql_connect( $ruta, $login, $password)

Prof. Arturo Daz Pulido

or die(mysql_error());

41

Laboratorio de Bases de Datos


5

mysql_select_db( $db, $conexion ) or die(mysql_error());

$query = 'DELETE FROM panamericanos';

7
8

mysql_query($query, $conexion) or die(mysql_error());


$query = 'INSERT INTO panamericanos VALUES';
$query .= "('Estados Unidos','usa.png',92,79,65,236),";

9
10
11

$query .= "('Cuba','cuba.png',58,35,43,136),";
$query .= "('Brasil','brasil.png',48,35,58,141),";
$query .= "('Mxico','mexico.png',42,41,50,133),";

12

$query .= "('Canad','canada.png',30,40,49,119),";

13

...

14

$query .= "('Guyana','guyana.png',0,0,1,1),";

15

$query .= "('Panam','panama.png',0,0,1,1)";

16
17

mysql_query($query, $conexion) or die(mysql_error());


mysql_close($conexion);
echo 'Operacin exitosa';

18
?>

19
20

Insertar registros en una tabla desde una forma

La funcin isset checa si una variable fue declarada

$_SERVER['REQUEST_METHOD'] permite determinar de donde proviene la llamada

1
2

<?php
if ( isset($_POST['aceptar']) && $_SERVER['REQUEST_METHOD'] == 'POST') {

Prof. Arturo Daz Pulido

42

Laboratorio de Bases de Datos


3

$year

= $_POST['year'];

$campeon = $_POST['campeon'];

$escuderia = $_POST['escuderia'];

if(!(isset($year) && !empty($year)


&& isset($campeon) && !empty($campeon)

&& isset($escuderia) && !empty($escuderia)

8
)

9
10
11

) {
echo "Todos los campos son necesarios";
} else {

12

$n = date('Y'); // Obtiene el ao actual

13

if ($year >= 1950 and $year <= $n) { //F1 inicio en 1950

14

include('ruta.php');

15

$conexion = mysql_connect( $ruta, $login, $password)


or die(mysql_error());

16
17
18

mysql_select_db( $db, $conexion ) or die(mysql_error());


$query = "SELECT * FROM f1 WHERE year = $year";
$registros = mysql_query($query, $conexion) or die(mysql_error());

19
$n

= mysql_num_rows($registros);

20
if($n == 0) {//Checamos que no exista informacin para ese ao

21
22

$query = "INSERT INTO f1 VALUES ($year, ";


$query .= "'$campeon','$escuderia')";

23

$resultado = mysql_query($query, $conexion);

24

if(!$resultado) {

25
26
27

echo 'Ocurrio un error al insertar'. mysql_error();


} else echo 'Operacin realizada con xito';
} else echo 'Ya existe informacin para ese ao'; //Un solo campen por ao

Prof. Arturo Daz Pulido

43

Laboratorio de Bases de Datos


mysql_close($conexion);

28

} else echo 'Ao fuera de rango';

29

30
31

}
?>

32
33
34

Mostrar el contenido de una tabla


La sentencia SELECT nos permite recuperar los registros de una tabla. La sintaxis bsica es:

SELECT * FROM nombre_tabla WHERE condicin

En el caso de una consulta usaremos bsicamente las siguientes funciones

mysql_query() ejecuta una sentencia valida sobre la base de datos. Para el caso de
un SELECT regresa 0 o ms registros.

mysql_num_rows() regresa el nmero de registros otorgados por mysql_query().

mysql_fetch_assoc regresa un conjunto de registros obtenidos por mysql_query().

Ejemplo: Muestra los campeones de Frmula 1 desde 1950 hasta el 2010.

<?php

$ruta

$login

$password = '';

$db

$conexion = mysql_connect( $ruta, $login, $password)

= 'localhost';
= '';

= 'f1';

Prof. Arturo Daz Pulido

or die(mysql_error());

44

Laboratorio de Bases de Datos


8

mysql_select_db( $db, $conexion ) or die(mysql_error());

$query = "SELECT * FROM f1 ORDER BY year DESC";

10

$registros = mysql_query($query, $conexion)


or die(mysql_error());

11

$n = mysql_num_rows($registros);

12
13
14

mysql_close($conexion);
if ($n > 0) { // si hay registros
$html = '<h2>Campeones de Formula 1</h2>';

15

$html.= '<table>';

16

$html.= '<thead><th>Ao</th><th>Campen</th>';

17

$html.= '<th>Escudera</th></tr></thead><tbody>';

18

while ($registro = mysql_fetch_assoc($registros)) {

19
20

$html.= '<tr>';
$html.= '<td>'. $registro['year'].'</td>';
$html.= '<td>'. $registro['campeon'].'</td>';

21
$html.= '<td>'. $registro['escuderia'].'</td></tr>';

22
23
24

} $html.= '</tbody></table>';
echo $html;
} ?>

25
26

Prof. Arturo Daz Pulido

45

Laboratorio de Bases de Datos

Conectividad con dispositivos moviles


La tecnologa mvil ha mostrado un crecimiento tal que el nmero de usuario de telefona mvil
en el mundo asciende a los 5,000 millones de usuarios [1]. En el caso de Mxico, datos de Junio
de 2010 revelan que existen alrededor de 87 millones de usuarios de telefona celular [2].
Este crecimiento ha trado consigo avances tecnolgicos en redes y dispositivos desde la
llamada primera generacin analgica (1G) hasta la cuarta generaciones (4G). En la actualidad
se cuenta con dispositivos avanzados, porttiles y de grandes capacidades tecnolgicas
conocidos como telfonos inteligentes -denotados como smartphones en este trabajo- los
cuales son altamente convergentes y multifuncionales [3][4].
El primer aspecto clave para la interaccin y comunicacin de los usuarios mediante cualquier
dispositivo smartphone independientemente del tipo o modelo, sistema operativo y navegador
con el que cuenten (ver Figura 1).

Figura 1 Caractersticas genricas de los smartphones con conectividad 4G

Prof. Arturo Daz Pulido

46

Laboratorio de Bases de Datos

El segundo aspecto clave es la conectividad que ofrece la tecnologa celular de tercera


generacin que permite al usuario obtener una conexin a Internet de forma rpida y
transparente mediante smartphones que cuentan con dicha conectividad 4G.
Esto se logra mediante la arquitectura basada en capas que describe la funcionalidad de las
redes 3G a travs de las funciones de transporte, control y aplicacin (ver Figura 2). La capa de
transporte maneja la informacin del usuario y los flujos de sealizacin, la capa de control aloja
y gestiona los servicios y sus dominios, mientras que la capa de aplicacin proporciona el
ingreso a las plataformas mediante las cuales se accede a servicios tales como Internet.

Figura 2 Arquitectura
El tercer aspecto clave es la arquitectura del servidor web que integra los servicios de
almacenamiento y las bases de datos que lo conforman. Esta arquitectura permite la operacin
y acceso sin necesidad de desarrollar aplicaciones especficas para cada tipo y modelo de
smartphone. Con tal premisa se opta por implementar la arquitectura de referencia para un
servidor web descrita en la Figura 3. En esta figura se describe el flujo de datos y dependencias
entre subsistemas para responder a las peticiones del cliente mediante el procesamiento de
dichas peticiones para brindarle acceso de forma transparente.

Prof. Arturo Daz Pulido

47

Laboratorio de Bases de Datos

Figura 3 Arquitectura de referencia para un servidor web


La implementacin de una arquitectura de servidor web ofrece la flexibilidad de utilizar
tecnologas disponibles tanto comerciales y de cdigo abierto. Particularmente opt por utilizar
las de cdigo abierto mediante la configuracin de un servidor web (Linux, Apache, JQuery,
MySQL, PHP) lo que permite una operacin de forma transparente. Esto debido a que el usuario
solo interacta con el cliente, es decir el smartphone.

Prof. Arturo Daz Pulido

48

Laboratorio de Bases de Datos

JMobil
JQueryMobile es un Framework javaScript para el desarrollo rpido y fcil de sitios webs
optimizados para telfonos mviles. Con este framework, aceleramos la velocidad de desarrollo
de aplicaciones, encapsulando muchas tareas comunes ue se realizan cuando usamos el
lenguaje JavaScript. Agrega una capa ms a JQuery e intenta suplir algunas necesidades que
los programadores de dispositivos mviles padecen.
En el pasado, un desarrollador tena que programar segn para qu dispositivo concreto, lo que
alargaba los tiempos de desarrollo y mantenimiento de los sitios webs. Ahora con JQueryMobile,
evitamos conocer la lgica especfica de cada dispositivo y nos centramos en la programacin
para un solo fin, el navegador de un telfono mvil./p>

index.html
El siguiente script presenta una imterface de login sencilla pero funcional.Escrito con html
5 pero con apoyo de JQuery Mobil
<!DOCTYPE html>
<html lang='es'>
<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<title>Demo login jqm</title>
<link href='http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css' rel='stylesh
eet' />
<script src='http://code.jquery.com/jquery-1.11.1.min.js'></script>
<script src='http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js'></script>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script>
<script src='login.js'></script>
</head>
<body>
<section id='login' data-role='page'>
<header data-role='header'>
<h1>Login con JQM</h1>
</header>
<article data-role='content'>
<form id='form_login'>
<div data-role='fieldcontain' class='ui-hide-label'>
<label for='txtuser'>Usuario:</label>
<input type='text' name='txtuser' id='txtuser' value='' placeholder='Name' />
</div>
<div data-role='fieldcontain' class='ui-hide-label'>
<label for='txtpassword'>Contrasea:</label>
<input id='txtpassword' name='txtpassword' type='password'
value='' placeholder='Password' />
</div>
<input type='button' value='Login' id='btnLogin'>
</form>
</article>
</section>

Prof. Arturo Daz Pulido

49

Laboratorio de Bases de Datos


<!-- Aqui nuestro dialog con el mensaje de error -->
<section id='pageError' data-role='dialog'>
<header data-role='header'>
<h1>Error</h1>
</header>
<article data-role='content'>
<p>Usuario o contrasea no valida</p>
<a href='#' data-role='button' data-rel='back'>Aceptar</a>
</article>
</section>
</body>
</html>

login.js
Jquery Mobil permite la interaccin html PHP
$(document).ready(function(){
$('#errorMsg').hide();
$('#btnLogin').click(function(){
var usu = $('#txtuser').val();
var pass = $('#txtpassword').val();
$.post('server/login.php',{ usu : usu, pass : pass},function(respuesta){
if (respuesta == true) {
$.mobile.changePage('otro.html');
} else{
$.mobile.changePage('#pageError', 'pop', true, true);
/*$('#errorMsg').fadeIn(300);
$('#errorMsg').css('display', 'block');*/
}
});
});
});

login.php
PHP se encarga de hacer el enlace con la cpa de Base de Datos. Y retorna uno de 2 resultados
posibles cierto o false
<?php
$server = 'locaalhost';
$username = 'root';
$passwordword = '';
$database = 'test';
$conexion = mysql_connect($server, $username, $password)
or die ('No se conecto: ' . mysql_error());
mysql_select_db($database, $conexion);
$username = mysql_real_escape_string($_POST['username']);

Prof. Arturo Daz Pulido

50

Laboratorio de Bases de Datos


$password = mysql_real_escape_string($_POST['pass']);
$sql = 'SELECT nombre FROM usuarios WHERE nombre="$username" AND password="$password"';
if ($resultado = mysql_query($sql, $conexion)){
if (mysql_num_rows($resultado) > 0){
echo true;
}
} else{
echo false;
}
mysql_close($conexion);
?>

Prof. Arturo Daz Pulido

51

También podría gustarte