arroba más más - Programación e Internet  arroba más más - Programación e Internet
Estás en: Inicio > Cursos > Bases de datos > Introducción a las bases de datos > Normalización
 
CAPÍTULOS

SECCIONES

SITIOS RECOMENDADOS

OTROS SITIOS DE LA AUTORA

En línea desde el 7 de noviembre de 2000

Normalización

La normalización se encarga de obtener los datos agrupados en distintas tablas siguiendo una serie de pasos, de tal manera que los datos obtenidos tienen una estructura óptima para su implementación, gestión y explotación desde distintas aplicaciones futuras. Una de las ventajas principales que se obtiene al realizar la normalización es que la información no estará duplicada innecesariamente dentro de las estructuras: habrá mínima redundancia.

Primera forma normal

Se dice que una tabla está en primera forma normal si todos los valores que componen a sus tuplas son atómicos: un atributo no puede tener más de un valor. Para normalizar una tabla que no esté en 1FN han de seguirse los siguientes pasos:

  • Se localizan los atributos correspondientes a la clave principal
  • Se realiza una proyección sobre la tabla y así se descompone en varias, de manera que se hace la proyección de la clave con los atributos que tengan los valores únicos.

Por ejemplo, la siguiente tabla no está en 1FN:

IntroBD01

Concepto de dependencia funcional

Se dice que un atributo B depende funcionalmente de A (A -> B) si cada valor de A se corresponde con un único valor de B o, visto de otra manera, si dado A puedo obtener B. Un caso típico podría ser DNI -> Nombre, pues dado un DNI puedo obtener el nombre de la persona con ese DNI.

Vamos a ver unas reglas que se pueden realizar entre atributos para poder obtener dependencias funcionales adicionalmente. Vamos a suponer que T es una tabla relacional y X, Y, Z son subconjuntos de atributos de la tabla T.

Reflexividad: Si los valores de un subconjunto de atributos Y están incluidos dentro de un subconjunto de atributos X, se dice que X depende funcionalmente de Y (Y -> X)

Aumentación: Si un subconjunto X depende funcionalmente de otro Y, dicha dependencia se mantendrá aunque se añada otro atributo a los dos subconjuntos (X -> Y entonces X.a -> Y.a)

Transitividad: Si Y depende funcionalmente de X y Z depende funcionalmente de Y, entonces Z depende funcionalmente de X (X -> Y e Y -> Z entonces X -> Z). Por ejemplo, DNI -> NOMBRE y NOMBRE -> DIRECCIÓN, luego DNI -> DIRECCIÓN

Dependencia funcional total: Un atributo Y tiene una dependencia funcional total con otro atributo X si tiene una dependencia funcional con X y no depende funcionalmente de ningún subconjunto de X. Por ejemplo, supongamos que una empresa tiene empleados y que una persona puede ser empleado de varias empresas. Según esto, podríamos decir que DNI.EMPRESA -> NOMBRE, pero esta dependencia no es total porque también es cierto que DNI -> NOMBRE. Sin embargo, no se puede identificar el sueldo de un empleado sin saber a qué empresa pertenece, por tanto, DNI.EMPRESA -> SUELDO sí es una dependencia funcional total.

Segunda forma normal

Esta forma normal se considerará únicamente cuando la clave principal sea compuesta, si no (la clave principal está formada por un único atributo) la tabla estaría en segunda forma normal.

Decimos que una tabla está en segunda forma normal si se cumplen las siguientes condiciones:

  • Está en 1FN
  • Todo atributo secundario (los que no pertenecen a la clave principal) tiene una dependencia funcional total de la clave completa y no de una parte de ella.

Para convertir una tabla que no esté en 2FN a 2FN se creará una tabla con la clave y todas sus dependencias funcionales totales y otra tabla con la parte de la clave que tiene dependencias con los atributos secundarios.

Por ejemplo, la siguiente tabla no está en 2FN:

IntroBD02

ya que el campo "TelefonoProveedor" no es dependiente de la clave candidata {"NombreProducto, "NombreProveedor"} sino únicamente de "NombreProveedor". Se trata de no representar dos entidades distintas en una sola tabla. En este ejemplo, reorganizaríamos los datos de la siguiente manera:

Tabla Productos:

IntroBD03

Tabla Proveedores:

IntroBD04

Tercera forma normal

Una tabla está en 3FN si:

  • Está en 2FN
  • No existen atributos no primarios (no pertenecen a la clave) que son transitivamente dependientes de cada posible clave de la tabla, o lo que es lo mismo, un atributo secundario sólo puede ser conocido a través de la clave principal o claves secundarias de la tabla y no por medio de otro atributo no primario.

Para convertir una tabla que no esté en 3FN a 3FN se realizará una proyección de la clave a los elementos que no tengan dependencia funcional transitiva y otra tabla con una nueva clave a los elementos que anteriormente tenían esta dependencia.

Por ejemplo, la siguiente tabla no está en 3FN:

Tabla Atletas:

IntroBD05

ya que, dado un número de licencia, podemos obtener la edad del inscrito, y dada la edad del inscrito, podemos averiguar la categoría a la que pertenece: tenemos una dependencia funcional transitiva. Evidentemente, dado el número de licencia podemos averiguar la categoría pero lo importante aquí es que la categoría depende de un atributo que no forma parte de la clave. Para normalizar, descompondremos la tabla en las siguientes:

Tabla Atletas:

IntroBD06

Tabla Categorias:

IntroBD07

Autor: Lola Cárdenas Luque
Última actualización: 22 de abril de 2003
Operaciones entre tablas | Integridad
Copyright © 2000 - 2005, Lola Cárdenas Luque - Todos los derechos reservados