Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sesin 5:
NORMALIZACION EN MYSQL
Interaccin con interfaces de
software a medida
JAVA
JSP
PHP
MS Excel
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
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.
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
EJEMPLO.
10
Al examinar estos registros, podemos darnos cuenta que contienen un grupo repetido para
NUM_ITEM, DESC_ITEM, CANT y PRECIO.
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 :
11
12
ARTICULOS
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
14
15
16
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
Estado
Caracas
Coro
17
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
cant
3
6
8
4
2
2
18
Precio
35,00
65,00
4,75
5,00
10,00
19
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
20
21
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
22
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
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)
23
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
24
25
()
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 }
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
Ejemplos
CLIENTE
cliente
nro_cliente
crdito
:= [Positivo | Negativo]
primer_nombre
:= 1{ caracter_vlido }30
nombre_intermedio
:= 1{ caracter_vlido }30
apellido
:= 1{ carcter_vlido }30
carcter_vlido
dgito
:= [0 | 1 | 2 | 3 | 4| 5| 6| 7| 8| 9]
letra
:= {carcter_valido}
nmero_dir
:= {dgito}
26
localidad
pedido
27
Sesin 6: Conectividad
de
Bases de Datos
28
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 .
29
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 {
Class.forName("com.mysql.jdbc.Driver");
catch( Exception e ) {
return;
Luego su programa debe conectarse con la base de datos especfica, la cual debe estar
previamente creada. Para esto se usa:
30
Connection conexion;
Statement sentencia;
try {
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;
31
10
11
12
13
14
try {
Class.forName("com.mysql.jdbc.Driver");
} catch( Exception e ) {
15
16
17
18
19
20
try {
conexion = DriverManager.getConnection("jdbc:mysql://localhost/Banco",
"root","");
21
22
23
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
29
System.out.println("5) Fin");
30
31
op = s.nextInt();
32
switch(op) {
33
32
34
35
36
resultado.getInt("numCuenta"));
37
38
+ resultado.getString("nombre"));
39
40
+ resultado.getDate("fechaActivacion"));
41
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
56
rutbuscado = s.nextInt();
consulta = "Select * from Clientes where rut = " + rutbuscado;
57
resultado = sentencia.executeQuery(consulta);
58
while (resultado.next()){
33
60
61
62
+ resultado.getString("nombre"));
63
64
+ resultado.getDate("fechaActivacion"));
65
66
67
break;
68
}
} while (op != 5);
69
sentencia.close();
70
conexion.close();
71
72
+ e.getMessage()); }
73
74
}
}
75
76
77
78
79
80
81
82
34
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.
La funcin mysql_error, devuelve el texto del mensaje de error de la ltima operacin MySQL
35
<?php
$ruta
= "localhost";
$login
= "mi_login";
$password = "mi_password";
$db
= "miBaseDatos";
or die(mysql_error());
10
mysql_close($conexion);
11
?>
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.
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.
36
mysql_query (lnea 8) hace una consulta en este caso crea la base de datos.
1
2
<?php
include('ruta.php');
if(!$conexion) {
if (mysql_query($sentencia, $conexion)) {
echo 'Base de datos creada';
} else {
10
11
}
12
mysql_close($conexion);
13
?>
14
37
Ao
Campen
2013
Sebastian Vettel
2012
Sebastian Vettel
2010
Sebastian Vettel
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
CREATE TABLE f1 (
year INT,
) ENGINE = InnoDB;
38
mysql_query nos permite box10 box un query a la base de datos (lnea 12)
1
2
<?php
$query = "CREATE TABLE IF NOT EXISTS f1 (";
3
$query .= "year INT NOT NULL , ";
include('ruta.php');
10
11
if (mysql_query($query, $conexion)){
12
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.
39
<?php
include('ruta.php');
3
$query = 'CREATE TABLE IF NOT EXISTS panamericanos (';
4
5
10
11
12
13
14
mysql_close($conexion);
?>
15
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,...)
40
1
2
<?php
include("ruta.php");
or die(mysql_error());
$conexion) or die(mysql_error());
10
$conexion) or die(mysql_error());
11
12
$conexion) or die(mysql_error());
13
echo "Operacin exitosa";
14
15
mysql_close($conexion);
?>
16
>
<?PHP
include('ruta.php');
or die(mysql_error());
41
7
8
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
18
?>
19
20
1
2
<?php
if ( isset($_POST['aceptar']) && $_SERVER['REQUEST_METHOD'] == 'POST') {
42
$year
= $_POST['year'];
$campeon = $_POST['campeon'];
$escuderia = $_POST['escuderia'];
8
)
9
10
11
) {
echo "Todos los campos son necesarios";
} else {
12
13
if ($year >= 1950 and $year <= $n) { //F1 inicio en 1950
14
include('ruta.php');
15
16
17
18
19
$n
= mysql_num_rows($registros);
20
if($n == 0) {//Checamos que no exista informacin para ese ao
21
22
23
24
if(!$resultado) {
25
26
27
43
28
29
30
31
}
?>
32
33
34
mysql_query() ejecuta una sentencia valida sobre la base de datos. Para el caso de
un SELECT regresa 0 o ms registros.
<?php
$ruta
$login
$password = '';
$db
= 'localhost';
= '';
= 'f1';
or die(mysql_error());
44
10
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
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
45
46
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.
47
48
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>
49
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']);
50
51