Está en la página 1de 17

Normalización: evita las redundancias

en las bases de datos


Uno de los términos clave de la modelación relacional de datos es la normalización. En
este modelo la calidad del diseño de la base de datos viene determinada por una
redundancia reducida al mínimo posible, puesto que los datos repetidos producen
anomalías semánticas que dificultan tanto el procesamiento automático de los datos como
el mantenimiento mismo de la base de datos. La normalización es la estrategia con la que
se eliminan las redundancias en las bases de datos relacionales.

Índice
1. Qué es la normalización
2. Cómo se normaliza una base de datos
3. Otras formas normales
4. Pros y contras de la normalización

Qué es la normalización
La normalización es un concepto de diseño de bases de datos que se aplica a las bases
de datos relacionales para evitar las redundancias.

El modelo relacional es el concepto más extendido en la gestión informatizada de los


datos. En las bases de datos de este tipo, la información se guarda en registros en
tablas interconectadas por medio de claves. Un registro se compone de varios campos de
valores que se subordinan a ciertos atributos a lo largo de las columnas de la tabla.

La siguiente tabla muestra los datos de facturas ficticias, emitidas por una distribuidora de
material de oficina. El empleado José García ha hecho un pedido para su empresa de 10
monitores, 12 ratones y una silla de oficina. La compra de María Pérez comprende 2
ordenadores portátiles y 2 juegos de auriculares.

Datos de facturas
Nº factura

Nº cliente

Dirección

Pos.ítem

Artículo

artículo
Cliente

Precio
Fecha

Uds.

12 29.01.2018 José 11 Pl. Principal 1, 1 Monitor 2-0023-D 10 200


3 García 12345 Villarriba euros

12 29.01.2018 José 11 Pl. Principal 1, 2 Ratón 4-0023-D 12 50


3 García 12345 Villarriba céntimos

12 29.01.2018 José 11 Pl. Principal 1, 3 Silla 5-0023-D 1 120


3 García 12345 Villarriba oficina euros

12 30.01.2018 María 12 C/ Principal 2, 1 Portátil 1-0023-D 2 1200


4 Pérez 12345 Villarriba euros
Nº factura

Nº cliente

Dirección

Pos.ítem

Artículo

artículo
Cliente

Precio
Fecha

Uds.

12 30.01.2018 María 12 C/ Principal 2, 2 Auriculares 3-0023-D 2 75 euros
4 Pérez 12345 Villarriba

En la base de datos de esta tienda online, los datos de las facturas se ordenan en función
de los atributos número de factura (Nº factura), fecha, cliente, número de cliente (Nº
cliente), dirección, posición del ítem (Pos. ítem), artículo, número de artículo (Nº artículo),
número de unidades (Uds.) y precio. Cada línea de la tabla corresponde a un registro,
denominado tupla.

Esta tabla constituye un ejemplo de tabla mal diseñada, puesto que ya de entrada saltan
a la vista sus múltiples redundancias. A esto se añade que las celdas de las
columnas Cliente y Dirección contienen datos compuestos por más de un valor
(multivalor). Se hablaría en este caso de una base de datos no normalizada, cuyo mayor
inconveniente radica en que necesita más memoria como consecuencia de la repetición de
valores. Además, los atributos que contienen datos multivalor no se pueden procesar ni
relacionar bien. Así, según esta tabla de ejemplo, los dos clientes tienen una dirección de
Villarriba, pero como esta información no se ha recogido por separado (calle, número, CP,
municipio), no sería posible filtrar la tabla por clientes del mismo municipio.

Para evitar los campos dobles o compuestos por varios valores se han desarrollado, en el
marco de los modelos relacionales, tres formas normales que se complementan entre sí.
Cada forma normal persigue que la base de datos se encuentre en un estado determinado,
y para lograrlo, se han de cumplir ciertas condiciones. Una base de datos satisface
entonces la primera, la segunda o la tercera forma normal, si se cumplen las condiciones
de cada una de ellas.

 Hecho
Se entiende como normalización al proceso de ajuste de una base de datos a una forma
normal de un grado más alto. Si se hace a una forma normal de un grado menor toma el
nombre de denormalización.

Cómo se normaliza una base de datos


Para aclarar cómo se aplican las tres formas normales a una base de datos relacional, se
recorrerán en adelante las diversas fases de la normalización con ejemplos. Partiremos
para ello del fragmento mostrado arriba.

Primera forma normal (1FN)


Una tabla en una base de datos relacional está en la primera forma normal cuando se
cumplen estas condiciones:

 Todos los datos son atómicos.


 Todas las columnas contienen el mismo tipo de datos.

Un registro se considera atómico cuando a cada información (cada asunto) se le reserva


una celda propia.
En nuestra tabla los campos correspondientes a los atributos cliente, dirección y precio no
son atómicos o no contienen datos del mismo tipo:

Datos de facturas
Nº factura

Nº cliente

Pos.ítem

Artículo
Dirección
Cliente

artículoNº

Precio
Fecha

Uds.
123 29.01.2018 José 11 Pl. 1 Monitor 2-0023-D 10 200
García Principal euros
1,
12345
Villarrib
a

123 29.01.2018 José 11 Pl. 2 Ratón 4-0023-D 12 50


García Principal céntimos
1,
12345
Villarrib
a

123 29.01.2018 José 11 Pl. 3 Silla 5-0023-D 1 120


García Principal oficina euros
1,
12345
Villarrib
a

124 30.01.2018 María 12 C/ 1 Portátil 1-0023-D 2 1200


Pérez Principal euros
2,
12345
Villarrib
a

124 30.01.2018 María 12 C/ 2 Auriculares 3-0023-D 2 75 euros


Pérez Principal
2,
12345
Villarrib
a

Las celdas en negrita muestran que nuestra tabla incumple ambas condiciones y por lo
tanto no está en la primera forma normal. Para normalizarla se hace lo siguiente:

1. Subdividir todos los datos multivalor en columnas separadas.


2. Comprobar que los valores en cada columna son del mismo tipo.

Para cumplir con el estado atómico de los datos, los atributos cliente y dirección se han de
subdividir en los atributos más específicos nombre y apellidos, así
como calle, número, código postal y municipio.

 Nota
En general, depende del contexto cuándo se considera que un valor es atómico. Si no es
necesario separar el nombre de los apellidos, el nombre completo puede considerarse un
valor atómico. Con todo, en la práctica se recomienda subdividir los valores compuestos
en las unidades más pequeñas.
En la columna Precio hay datos en euros y en céntimos: hay que decidirse por un tipo de
dato (en €)para generar campos coherentes. Quedaría así:

Nombre

Pos. ítem
Nº factura

Apellido

Nº cliente

Municipio

Nº artículo
Artículo

€)Precio (en
Fecha

Calle

Uds.
CP

123 29.01.2 Garcí José 11 Pl. 1 12345 Villarri 1 Monitor 2- 10 200
018 a Princi ba 0023-
pal D

123 29.01.2 Garcí José 11 Pl. 1 12345 Villarri 2 Ratón 4- 12 0,50


018 a Princi ba 0023-
pal D

123 29.01.2 Garcí José 11 Pl. 1 12345 Villarri 3 Silla 5- 1 120


018 a Princi ba oficina 0023-
pal D

124 30.01.2 Pérez María 12 C/ 2 12345 Villarri 1 Portátil 1- 2 1200


018 Princi ba 0023-
pal D

124 30.01.2 Pérez María 12 C/ 2 12345 Villarri 2 Auricula 3- 2 75


018 Princi ba res 0023-
pal D

El resultado es una tabla que, si bien está en la primera forma normal, los valores
duplicados siguen impidiendo procesar los datos de forma eficiente. Para reducir las
redundancias se recomienda llevarla a la segunda forma normal.

 Consejo
La primera forma normal establece campos de valores atómicos y con ello facilita las
consultas a la base de datos. Los datos que forman parte de campos no atómicos no
pueden consultarse por separado.

Segunda forma normal (2FN)


Para estar en la segunda forma normal, a las condiciones de la primera se añade la
siguiente:

 Los atributos que no forman parte de ninguna clave han de depender


funcionalmente de toda la clave primaria.

Al principio, se definió a una base de datos relacional como un sistema de tablas


relacionadas por medio de claves. Las claves sirven para identificar inequívocamente a los
registros. La clave que permite nombrar claramente a cada una de las filas de una tabla se
denomina superclave. Esta puede resultar de los valores de una única columna o de la
suma de los valores de varias columnas.

En nuestro ejemplo, los atributos número de factura, número de cliente y posición de


ítem podrían componer una posible superclave:
Nombre
Pos. ítem
Nº cliente

Apellido

Municipio

Nº artículo
Nº factura

Artículo

Precio
Fecha

Calle

Uds.
CP

123 11 1 29.01.2 García José Pl. 1 12345 Villarri Monitor 2- 10 200
018 Princip ba 0023-
al D

123 11 2 29.01.2 García José Pl. 1 12345 Villarri Ratón 4- 12 0,50


018 Princip ba 0023-
al D

123 11 3 29.01.2 García José Pl. 1 12345 Villarri Silla 5- 1 120


018 Princip ba oficina 0023-
al D

124 12 1 30.01.2 Pérez María C/ 2 12345 Villarri Portátil 1- 2 1200


018 Princip ba 0023-
al D

124 12 2 30.01.2 Pérez María C/ 2 12345 Villarri Auricula 3- 2 75


018 Princip ba res 0023-
al D

Una clave número de factura, número de cliente y posición de ítem con los valores {124,


12, 1} permitiría entonces identificar claramente al registro de la compra que ha hecho
María Pérez:

C/ 1-
1 30.01.201 Marí Principa 1234 0023-
124 2 1 8 Pérez a l 2 5 Villarriba Portátil D 2 1200

Pero para esta identificación no es necesaria toda la información aportada por la


superclave. Una combinación de número de factura y posición de ítem (es decir, un
subconjunto de la superclave) debería bastar para identificar a cada registro. Estas claves
con la mínima cantidad de atributos se conocen como claves candidatas.
Nombre

Nº artículo
Pos. ítem
Nº factura

Apellido

Nº cliente

Municipio

Artículo

Precio
Fecha

Calle

Uds.
CP

123 1 29.01.2 Garcí José 11 Pl. 1 12345 Villarri Monitor 2- 10 200


018 a Princi ba 0023-
pal D

123 2 29.01.2 Garcí José 11 Pl. 1 12345 Villarri Ratón 4- 12 0,50


018 a Princi ba 0023-
pal D

123 3 29.01.2 Garcí José 11 Pl. 1 12345 Villarri Silla 5- 1 120


018 a Princi ba oficina 0023-
pal D

124 1 30.01.2 Pérez María 12 C/ 2 12345 Villarri Portátil 1- 2 1200


018 Princi ba 0023-
pal D
Nombre

Nº artículo
Pos. ítem
Nº factura

Apellido

Nº cliente

Municipio

Artículo

Precio
Fecha

Calle

Uds.
CP

124 2 30.01.2 Pérez María 12 C/ 2 12345 Villarri Auricula 3- 2 75
018 Princi ba res 0023-
pal D

Normalmente, se escoge a una clave candidata por tabla para representarla. Su valor ideal
es una numeración correlativa. Esta clave se erige en clave primaria y señala el orden de
los registros.

Como cualquier candidata a clave, la clave primaria también puede componerse de un solo
valor o, como en nuestro ejemplo, de varias claves. Nuestra tabla utiliza una clave primaria
compuesta; formada por el número de factura y la posición de ítem.

Pero para llevar a una tabla a la segunda forma normal, no solo es necesario conocer la
clave primaria y todos los atributos que no son clave, sino también cómo se relacionan
entre sí. Para hacerlo se siguen estos pasos:

1. Comprueba que todos los atributos no-clave dependen por completo de la clave
primaria. Esta dependencia se da si todos los atributos de la clave primaria son
necesarios para identificar a los atributos no-clave. Esto quiere decir también que
las tablas con claves primarias simples se ajustan automáticamente a la 2FN si se
cumplen las condiciones para la 1FN.
2. Relega a los atributos no-clave que no dependen de la clave primaria a tablas
diferentes.

Si volvemos a nuestra tabla y la observamos atentamente, podremos ver que


las condiciones para la segunda forma normalno se cumplen por los siguientes
motivos: la columna Fecha solo depende del número de factura, pero no de la posición del
artículo en la factura. Lo mismo puede decirse para los datos de los clientes
(apellido, nombre, calle, nº, CP, municipio).

Para que una tabla esté en la 2FN enviamos a los atributos dependientes del número de
factura a una tabla separada llamada Factura:

Factura
Nº factura

Nombre

Municipio
Apellido

Nº cliente
Fecha

Calle

CP

123 29.01.2018 García José 11 Pl. Principal 1 12345 Villarriba

124 30.01.2018 Pérez María 12 C/ Principal 2 12345 Villarriba

A la tabla con el resto de datos la llamamos Posición del ítem:

Posición del ítem


Nº factura

Nº artículo

Precio en €
Pos. ítem

Artículo

Uds.
123 1 Monitor 2-0023-D 10 200

123 2 Ratón 4-0023-D 12 0,50

123 3 Silla oficina 5-0023-D 1 120

124 1 Portátil 1-0023-D 2 1200

124 2 Auriculares 3-0023-D 2 75

Tras la normalización, el número de factura se encuentra en ambas tablas, conectándolas.


Mientras que este atributo actúa de clave primaria en la tabla Factura, en la tabla Posición
del ítem se utiliza como clave foránea y forma parte, al mismo tiempo, de la clave primaria
compuesta de la tabla.

 Nota
La conexión por clave foránea o ajena (Foreign Key) permite consultar a dos tablas a la
vez. Se habla entonces de un Join.
Nuestras tablas están ahora en la segunda forma normal, pero aún no se han eliminado
del todo las redundancias. Por eso‚ la meta de la normalización suele ser la tercera forma
normal.

Tercera forma normal (3FN)


Para que una tabla esté en la tercera forma normal ha de cumplir las condiciones de las
dos primeras y además:

 Los atributos no-clave no pueden depender de forma transitiva de una clave


candidata.

Se da una dependencia transitiva si un atributo que no es clave depende de otro atributo


que no es clave y de forma indirecta de su clave candidata.

Nuestro esquema incumple las condiciones de la tercera forma normal en varios puntos:

Factura
Nº factura

Nombre

Municipio
Apellido

Nº cliente
Fecha

Calle

CP

123 29.01.2018 García José 11 Pl. Principal 1 12345 Villarriba

124 30.01.2018 Pérez María 12 C/ Principal 2 12345 Villarriba

En la tabla Factura, los atributos nombre y apellido así


como calle, número, CP y municipio no solo dependen de la clave primaria (número de
factura) sino también del número de cliente.
En la tabla Posición del ítemlos atributos artículo y precio dependen de la clave primaria
compuesta por número de factura y el número de ítem, pero también del número de
artículo. También se infringe aquí la condición específica de la tercera forma normal:

Posición del ítem


Nº factura

Nº artículo

Precio en €
Artículo
Nº ítem

Uds.
123 1 Monitor 2-0023-D 10 200

123 2 Ratón 4-0023-D 12 0,50

123 3 Silla oficina 5-0023-D 1 120

124 1 Portátil 1-0023-D 2 1200

124 2 Auriculares 3-0023-D 2 75

Para eliminar las dependencias entre atributos no-clave repartimos los datos en tablas


separadas que se interconectan con claves ajenas. De este modo, resultarán las cuatro
tablas normalizadas Factura, Cliente, Posición y Artículo.

La clave primaria de la tabla Factura es un número de factura correlativo. Cada número de


factura se clasifica con la fecha de la factura y el número de cliente:

Factura

Nº factura Fecha Nº cliente

123 29.01.2018 11

124 30.01.2018 12

En la tabla Cliente se depositan datos más aproximados sobre los clientes, y ambas


tablas, Factura y Cliente, se conectan mediante el número de cliente, que en la
tabla Cliente hace de clave primaria y en Factura de clave ajena:
Nombre

Municipio
Nº cliente

Apellido

Calle

CP

11 García José Pl. Principal 1 12345 Villarriba

12 Pérez María C/ Principal 2 12345 Villarriba

Una tabla crucial en nuestra base de datos es la Posición del ítem, puesto que revela qué
artículos se incluyen en cada factura y cuántas unidades se han pedido. La clave primaria
correlativa de la tabla resulta del número de factura y la posición del ítem en la factura. Los
artículos están presentes en la tabla solo con el número de artículo y actúan de clave
ajena que enlaza con la tabla Artículo.
Nº factura

Posición

Nº artículo

Uds.
123 1 2-0023-D 10

123 2 4-0023-D 12

123 3 5-0023-D 1

124 1 1-0023-D 2

124 2 3-0023-D 2

La tabla Artículo solo contiene los detalles sobre cada artículo, como su denominación o el


precio. Como clave primaria tenemos el número de artículo correlativo:

Precio en €
Nº artículo

Artículo

1-0023-D Portátil 1200

2-0023-D Monitor 200

3-0023-D Auriculares 75

4-0023-D Ratón 0,50

5-0023-D Silla oficina 120

En nuestro ejemplo puede parecer poco eficiente fragmentar dos tablas en cuatro. De
hecho, las redundancias en los datos de solo dos clientes no saltan apenas a la vista.
Imaginemos, sin embargo, que queremos procesar varios cientos de miles de registros
sobre clientes o sobre la gama de productos de la empresa de forma consistente y libre
de contradicciones. Esto solo suele ser posible con un esquema que se ajuste a la
tercera forma normal.

 Nota
Ten en cuenta que no siempre es posible evitar por completo los valores duplicados en las
bases de datos relacionales. Volviendo a nuestra base de datos, se puede observar que la
conexión de tablas con claves ajenas puede estar ligado a redundancias. Se habla en este
caso de redundancia de claves.
Aun cuando la normalización de bases de datos implica un mayor esfuerzo de
programación, la tercera forma normal está considerada como el estándar para los
esquemas relacionales y solo se descarta bajo contadas excepciones. Una de ellas sería
la denormalizacion de bases de datos que están en la tercera forma normal a la segunda
forma normal. Esto se hace porque los Joins que enlazan varias tablas en bases de datos
muy grandes tardan mucho tiempo. Denormalizando la base de datos se espera reducir el
número de tablas y con ello la duración de la consulta.
Otras formas normales
La mayor parte de las veces, la normalización acostumbra a finalizar en la tercera forma
normal. Las formas que describimos a continuación guardan relación con esquemas
especiales y solo se utilizan en casos excepcionales.

Forma normal de Boyce-Codd (FNBC)


La llamada forma normal de Boyce-Codd es una versión más fuerte que la tercera. Si en
esta se afirma que:

 Ningún atributo no-clave puede depender de forma transitiva de una clave


candidata;

En la presente forma normal se ha de cumplir que:

 Ningún atributo puede depender de forma transitiva de una clave candidata, a no


ser que se trate de una dependencia trivial.

La forma normal de Boyce-Codd solo es relevante para las tablas con varias claves
candidatas compuestas, en las que las claves se superponen, es decir, para aquellos
casos en los que un atributo es común a dos claves candidatas (dos claves candidatas
comparten un atributo).

Las bases de datos que están en la 3FN y no tienen claves candidatas compuestas se
convierten automáticamente en representantes de la FNBC.

La tabla a continuación contiene dos claves candidatas formadas por dos atributos cada
una:

 Número de proveedor y número de artículo


 Proveedor y número de artículo

Las dos claves permiten identificar a cada uno de los registros. El único atributo que no
forma parte de ninguna clave es unidades: como no depende de forma transitiva de
ninguna de las candidatas a clave, se ajusta a la 3FN.

Dada la dependencia entre número de proveedor y proveedor, no se ajusta a la FNBC. El


atributo número de proveedor tiene dependencia transitiva de la clave candidata
compuesta por proveedor y número de artículo y el atributo proveedor de la clave
candidata compuesta por número de proveedor y número de artículo.

Unidades por proveedor

Nº proveedor Proveedor Nº artículo Unidades

Z-012 Ejemplo AG & Co. KG 1-0023-D 900

Z-012 Ejemplo AG & Co. KG 2-0023-D 250

Z-012 Ejemplo AG & Co. KG 3-0023-D 395

Z-077 Ejemplo1 GmbH 4-0023-D 1275


Nº proveedor Proveedor Nº artículo Unidades

Z-077 Ejemplo1 GmbH 5-0023-D 12000

Las dependencias transitivas podrían evitarse si se escindiera la primera tabla en las


tablas Unidades y Proveedor, de forma que no se encontrara ninguna clave candidata que
se superpusiera a otra.

Unidades
proveedor

artículo

Unidades

Z-012 1-0023-D 900

Z-012 2-0023-D 250

Z-012 3-0023-D 395

Z-077 4-0023-D 1275

Z-077 5-0023-D 12000

Proveedor

Nº proveedor Proveedor

Z-012 Ejemplo AG & Co. KG

Z-077 Ejemplo1 GmbH

La FNBC impide las redundancias que se producen cuando las claves candidatas han de
enumerar varias veces a los mismos atributos de clave identificativos, interfiriéndose así
las unas a las otras. En la tabla de arriba el ajuste a la FNBC impide que se den
redundancias en la columna Proveedor.

 Nota
Se habla de dependencia trivial cuando un atributo es dependiente funcional de sí mismo.
Dado que esto siempre es así, sea cual sea el estado de la base de datos, en Lógica las
dependencias triviales equivalen a una tautología.

Cuarta forma normal (4FN)


Para que una tabla esté en la cuarta forma normal, ha de estar en la de Boyce-Codd y
cumplir, además, con esta condición:
 No hay dependencias multivaluadas a no ser que sean triviales.

La dependencia multivaluada (multivalued dependency) o multivalor tiene lugar siempre


que dos atributos sin relación entre sí, dependan del mismo atributo. Veámoslo con un
ejemplo.

La siguiente tabla muestra qué artículos ha pedido cada cliente y dónde se han de
entregar:

Lugar de entrega de los pedidos

Nº cliente Nº artículo CP

234 1-0023-D 12345

234 2-0023-D 12345

567 1-0023-D 56789

567 3-0023-D 56789

567 4-0023-D 56789

567 5-0023-D 56789

Puede verse que el cliente con el número 234 ha pedido los artículos 1-0023-D y 2-0023-


D, que se han de entregar en su dirección con el código postal 12345. Para el cliente 567,
los artículos 1-0023-D, 3-0023-D, 4-0023-D y 5-0023-D se entregarán en el código
postal 56789.

Los registros solo pueden identificarse con una superclave compuesta por los tres
atributos (nº cliente, nº artículo y código postal). Al no darse ningún atributo no-clave la
tabla está en 3FN. Tampoco presenta dependencias transitivas ni triviales, de modo que
también cumple con la FNBC. Sin embargo, sí contiene dependencias multivaluadas,
puesto que el atributo nº de artículo y el atributo código postal dependen de nº de
cliente pero no guardan relación entre sí.

El inconveniente de este diseño es que cada vez que se registre un nuevo artículo para un
cliente, también será necesario incluir el código postal, de modo que habrá datos
redundantes. Si se lleva a esta tabla a la 4FN, estas repeticiones pueden reducirse. Para
ello, se ha de fragmentar la tabla de tal manera que no presente ninguna dependencia o, al
menos, solo dependencias multivaluadas triviales. Crearemos , entonces, dos tablas
separadas, lo cual es posible porque el número de artículo y el código postal no están
relacionados.

Artículo

Nº cliente Nº artículo

234 1-0023-D
Nº cliente Nº artículo

234 2-0023-D

567 1-0023-D

567 4-0023-D

567 5-0023-D

Lugar de entrega

Nº cliente CP

234 12345

567 56789

Como vemos, la cuarta forma normal elimina las redundancias producidas por las
dependencias multivaluadas, en este caso, en la columna CP.

 Nota
En nuestro forzado ejemplo, presuponemos un solo código postal por cliente, pero si cada
cliente pudiera ordenar la entrega de sus compras a sitios diferentes, se daría una
dependencia entre el número de artículo y el código postal y la tabla estaría ya en la 4FN
aun sin normalizar.

Quinta forma normal (5FN)


Una tabla está en la 5FN cuando satisface las condiciones de la cuarta y cumple, además,
esta condición:

 La tabla no puede fragmentarse más sin que se pierda información.

¿Cuándo se da este caso? Para entenderlo, partimos del supuesto de una empresa que
administra una página web TYPO3 y una tienda online Magento. Tres empleados son los
encargados de gestionarlas: Pérez, García y González, y cada uno de ellos aporta
conocimientos de distinta índole.

La tabla de aquí abajo presenta qué cualificación aporta cada trabajador a cada proyecto
de software –de este modo, puede deducirse de forma indirecta qué nivel de conocimiento
requiere cada proyecto.

Conocimientos por empleado y proyecto


Empleado Proyecto Conocimientos

Pérez Magento PHP

Pérez Magento SQL

Pérez TYPO3 JavaScript

Pérez TYPO3 SQL

García Magento PHP

García TYPO3 JavaScript

González TYPO3 PHP

El empleado Pérez aporta al proyecto Magento sus conocimientos en PHP y SQL y para la
página web TYPO3 recurre a SQL y a JavaScript. García también se encarga de la
programación PHP de la tienda online y trabaja con JavaScript en la página web. Por
último, González solo participa en el proyecto TYPO3, encargándose en solitario de la
programación PHP. De esto se concluye que para utilizar Magento se requiere experiencia
en PHP y SQL, mientras que un proyecto de TYPO3 da por sentado tener conocimientos
en PHP, SQL y JavaScript.

La tabla solo posee una clave compuesta por todos los atributos, cumpliendo así con la
3FN y la FNBC. Al no darse dependencias entre los tres atributos también sería una
representante de la 4FN.

Se tratará ahora de comprobar si también está en la 5FN. Para ello fragmentaremos la


tabla original Conocimientos por empleado y proyectoen tres tablas: Participación en
proyecto, Conocimientos por empleado y Requerimientos por proyecto.

La tabla Participación en proyecto muestra los proyectos en los que participa cada


trabajador:

Proyecto Empleado

Magento Pérez

Magento García

TYPO3 Pérez

TYPO3 García

TYPO3 González
Proyecto Empleado

La tabla Conocimientos por empleado reseña los conocimientos en lenguajes de


programación o de bases de datos que tiene cada empleado:

Empleado Conocimientos

Pérez PHP

Pérez SQL

Pérez JavaScript

García PHP

García JavaScript

González PHP

Por último, la tabla Requerimientos por proyecto deja entrever qué cualificación técnica


requiere trabajar en cada proyecto:

Requerimientos por proyecto

Proyecto Cualificación

Magento PHP

Magento SQL

TYPO3 JavaScript

TYPO3 SQL

TYPO3 PHP

A primera vista, la escisión de la tabla original aporta claridad. Con todo, las tablas que
como esta resultan de la normalización ¿igualan en cantidad de información a la tabla
original? Para averiguarlo debemos llevar a cabo un Join, una consulta a la base de datos
que implique a las tres tablas. El resultado es sorprendente:

Reconstrucciónde Conocimientos por empleado y proyecto


Empleado Proyecto Conocimientos

Pérez Magento PHP

Pérez Magento SQL

Pérez TYPO3 JavaScript

Pérez TYPO3 SQL

Pérez TYPO3 PHP

García Magento PHP

García TYPO3 JavaScript

García TYPO3 PHP

González TYPO3 PHP

Al reconstruir la tabla original debemos dar por supuesto que cada empleado implicado
en el proyecto aporta sus cualificaciones si el proyecto las requiere. La información de que
González se ha encargado él solo de programar el proyecto TYPO3 en PHP se ha perdido.
Esto quiere decir que la tabla original no puede fragmentarse sin pérdidas, cumpliendo así
con la quinta forma normal.

En la práctica, pocas veces se topa con esquemas que cumplan con la 4FN pero no con la
5FN. La quinta forma normal es interesante, no obstante, en aquellos casos en los cuales
se obtienen nuevos datos a partir de los disponibles. Nuestro ejemplo deja ver que tanto
Pérez como García tienen conocimientos en PHP que podrían aportar en el futuro a
TYPO3, aunque actualmente colaboran con otras aptitudes. Esta información podría servir
a la empresa para diseñar el desarrollo de software en este proyecto de forma más
eficiente.

Pros y contras de la normalización


El objetivo de la normalización es la reducción de los valores duplicados y si se normaliza
a una base de datos en alguna de las formas normales descritas, la tabla resultante
presentará la ventaja de contar con menos redundancia que la original. Así, la
normalización simplifica el mantenimiento de los bancos de datos.

Por otro lado, normalizar una base de datos implica siempre separar los atributos en tablas
independientes. Esto requiere probablemente integrar claves foráneas y puede conducir
a redundancias de claves. Pero su mayor inconveniente es que en una base de datos
normalizada los datos que forman un todo lógico ya no se guardan juntos. Si se quiere
reunir a los datos que figuran en tablas separadas es necesario ejecutar un Join.

Las consultas a las bases de datos con Joins permiten filtrar datos complejos; pero
llevarlas a cabo requiere un esfuerzo mayor que una consulta simple, a lo que viene a
sumarse la lentitud de la ejecución de la consulta cuando los Joins implican a un gran
número de tablas.

También podría gustarte