Este documento presenta información sobre la normalización de bases de datos relacionales. Explica los tres pasos principales de la normalización: la primera forma normal, la segunda forma normal y la tercera forma normal. También incluye ejemplos detallados de cómo aplicar cada uno de estos pasos a tablas de ejemplo para eliminar la redundancia y anomalías.
3. Aspectosimportantesaconsideraralahora
dediseñar
Cada atributo debe ser monovaluado
Sucursales
Nro_Suc Nombre Telefonos Direccion Localidad Departament
o
1 Sacramento 4234322 423446
7
Toranzo 350 Norte Desamparados Capital
2 Higueras 4332323 C.Cabot 335
0
Oeste Rivadavia Rivadavia
3 Espigas 4223434 422136
7
Aberastain 333 Sur Concepcion Capital
4 SantaRita 4221123 433567
8
Av.Libertado
r
123
0
Oeste Desamparados Capital
5 Excelencia 4228976 422349
0
Av.Libertado
r
30 Oeste Capital Capital
6 Castillo 4962579 Ig.delaRoza 671 Caucete Caucete
Mg.OrleansMoisésGálvezTapia
4. Nro_Suc Nombre Direccion Localidad Departament
o
1 Sacramento Toranzo350Norte Desamparados Capital
2 Higueras C.Cabot3350Oeste Rivadavia Rivadavia
3 Espigas Aberastain333Sur Concepcion Capital
4 SantaRita Av.Libertador1230Oeste Desamparados Capital
5 Excelencia Av.Libertador30Oeste Capital Capital
6 Castillo Ig.delaRoza671 Caucete Caucete
…Aspectosimportantesaconsiderarala
horadediseñar
Cada atributo debe ser monovaluado:
Esto implica que la relación anterior debiera reemplazarse por las siguientes:
Sucursales
6. Reducción de valores redundantes:
Dentro de los principales objetivos en el
diseño de relaciones
Evitar anomalías de
actualización
…Aspectosimportantesaconsiderarala
horadediseñar
Minimizar el espacio de
almacenamiento
que ocupan las relaciones
base (archivos)
7.
Normalización
Técnica para producir un conjunto de relaciones
pertinentes a través de la mejor estructuración de las
entidades involucradas.
Permite eliminar redundancia de datos y simplificar el
mantenimiento de los datos
Inicia examinando las relaciones existentes entre
atributos.
8. Si y sólo si está en 1FN y los atributos NO Primos dependen
funcionalmente de la llave primaria.
1FN
2FN
ProcesodeNormalización
Si los valores en las celdas son atómicos
Si dos filas o tuplas no son idénticas
A → B
A → C
A → E
C → D
E → F
9. 3FN
Si está en 2FN y no existen dependencias
transitivas.
A → B
A → C
A → E
C → D
E → F
10. Id_orde
n
Fecha Id_client
e
Nom_client
e
Estado Num_art nom_art cant Precio
2301 23/02/11 101 Martin Caracas 3786 Red 3 35,00
2301 23/02/11 101 Martin Caracas 4011 Raqueta 6 65,00
2301 23/02/11 101 Martin Caracas 9132 Paq-3 8 4,75
2302 25/02/11 107 Herman Coro 5794 Paq-6 4 5,00
2303 27/02/11 110 Pedro Maracay 4011 Raqueta 2 65,00
2303 27/02/11 110 Pedro Maracay 3141 Funda 2 10,00PRIMERAFORMALNORMAL(1FN)
La 1FN prohíbe 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.
EJERCICIOCOMPLETO-01
1. ordenes (id_orden, fecha,id_cliente, nom_cliente, estado, num_art, nom_art, cant, precio)
Ordenes
11. Id_orden Num_art nom_art cant Precio
2301 3786 Red 3 35,00
2301 4011 Raqueta 6 65,00
2301 9132 Paq-3 8 4,75
2302 5794 Paq-6 4 5,00
Id_orden Fecha Id_cliente Nom_cliente Estado
2301 23/02/11 101 Martin Caracas
2302 25/02/11 107 Herman Coro
2303 27/02/11 110 Pedro Maracay
Articulos_ordenes
…EJERCICIOCOMPLETO
Los registros quedan ahora conformados en dos tablas que llamaremos
ORDENES yARTICULOS_ORDENES
ordenes (id_orden, fecha, id_cliente, nom_cliente, estado)
Articulos_ordenes (id_orden, num_art, nom_art, cant, precio)
Ordenes
12. Id_orden Num_art cant
2301 3786 3
2301 4011 6
2301 9132 8
2302 5794 4
2303 4011 2
2303 3141 2
Num_art nom_art Precio
3786 Red 35,00
4011 Raqueta 65,00
9132 Paq-3 4,75
5794 Paq-6 5,00
SEGUNDA FORMAL
NORMAL(2FN)
Determinar cuáles 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.
Las tablas quedan ahora de la siguiente manera.
Articulos_ordenes (id_orden,num_art, cant)
Articulos_ordenes
Articulos ( num_art, nom_art, precio)
Articulos
13. Id_cliente Nom_cliente Estado
101 Martin Caracas
107 Herman Coro
110 Pedro Maracay
Id_orden Fecha Id_cliente
2301 23/02/11 101
2302 25/02/11 107
2303 27/02/11 110
TERCERAFORMALNORMAL
(3FN)
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
ordenes (id_orden, fecha, id_cliente)
Ordenes
Clientes (id_cliente, nom_cliente, estado)
Clientes
Por lo tanto la base de datos quedaría:
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)
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.
15. IDCliente Nombre Telefono
45 Francisco 444444444
275 Miguel 555555555
275 Miguel 666666666
IDCliente Nombre Telefono Telefono2 Telefono3
45 Francisco 444444444 NULL NULL
275 Miguel 555555555 666666666 NULL
IDCliente Nombre Telefono
45 Francisco 444444444
275 Miguel 555555555,666666666
No se permiten vectores de campos en una columna
No se permiten grupos repetidos en varias columnas
16. IDCliente Nombre Telefono
45 Francisco 444444444
275 Miguel 555555555
275 Miguel 666666666
IDCliente Telefono
45 444444444
275 555555555
275 666666666
IDCliente Nombre
45 Francisco
275 Miguel
PRIMERAFORMALNORMAL(1FN)
Tenemos que eliminar los grupos repetidos.
Tenemos que crear una nueva tabla con la PK de la tabla base y el grupo repetido.
CLIENTES
CLIENTES TELEFONOS_CLIENTES
18. IDCliente IDProducto Cantidad Nombre_producto
29 42 1 Zapatillasdeportivasdetenis
46 9 5 Balónreglamentariodebaloncesto
204 42 1 Zapatillasdeportivasdetenis
144 10 1 Zapatillasdeportivasderugby
IDProducto Nombre_producto
9 Balónreglamentariodebaloncesto
10 Zapatillasdeportivasderugby
42 Zapatillasdeportivasdetenis
IDCliente IDProducto Cantidad
29 42 1
46 9 5
204 42 1
144 10 1
Los pasos para aplicar la segunda forma normal son muy sencillos: encontrar las claves
candidatas (compuestas), que identifican de manera única el registro; comprobar que los campos
que no forman parte de la clave candidata y no son parte de ella (en el ejemplo de antes ni
IDCliente ni IDProducto deben ser analizados) dependen totalmente de la clave candidata.
LINEAS_PEDIDO
PRODUCTOS
LINEAS_PEDIDO
20. IDServido
r
Fecha IDServici
o
Nombre_servici
o
Carg
a
21 2009-01-
14
1 Oracle 100
21 2009-01-
15
9 MySQL 100
21 2009-01-
16
22 Apache 85
34 2009-01-
14
3 PostgreSQL 74
34 2009-01-
15
22 Apache 58
34 2009-01-
16
22 Apache 67
66 2009-01-
14
9 MySQL 98
66 2009-01-
15
22 Apache 94
66 2009-01-
16
1 Oracle10g 84
IDServido
r
Fecha IDServici
o
Carg
a
21 2009-01-
14
1 100
21 2009-01-
15
9 100
21 2009-01-
16
22 85
34 2009-01-
14
3 74
IDServici
o
Nombre_servici
o
1 Oracle
9 MySQL
22 Apache
3 PostgreSQL
22 Apache
22 Apache
9 MySQL
Una tabla está en tercera forma normal siempre que esté en segunda forma normal (y por
consiguiente en primera) y todos sus campos no primarios (campos que no forman parte de una
clave candidata) dependen únicamente de la clave candidata.
CARGA_DIARIA
CARGA_DIARIA SERVICIOS
21. EJEMPLO
Tenemos una empresa pública donde los puestos de trabajo están regulados por el
Estado, de modo que las condiciones salariales están determinadas por el puesto. Se ha
creado el siguiente esquema relacional:
EMPLEADOS(nss, nombre, puesto, salario, emails) con nss como clave primaria.