cursos online, formacion on-line, teleformación, Elearning, Cursos online de ofimática, diseño gráfico, web, gestión, idiomas, programacion - ADR Formación

Normalización de la base de datos

Normalización de datos

La normalización es el proceso que permite distribuir todos los campos de la base de datos en tablas relacionadas entre sí, de forma que cumplan con el funcionamiento esperado de la base de datos.

Ahora ya estamos preparados para comenzar un análisis más profundo de los datos y la organización de los elementos individuales en grupos.

Como premisa fundamental partiremos del propio significado de relación, que supone el agrupar en una misma tabla todos los campos de información relacionados por su significado.

Para evitar la inconsistencia y duplicidad de datos emplearemos la técnica de normalización para organizar los campos de datos en cada tabla. Sin entrar a desarrollar la teoría que hay detrás de la normalización, usaremos una serie de reglas que pueden aplicarse para determinar si nuestro diseño tiene sentido.

  1. Cada campo de una tabla debe contener un único tipo de información. Esto significa que deberíamos dividir los campos complejos y evitar la repetición de grupos de información. Ejemplo: Sería conveniente separar en campos diferentes el nombre y los apellidos de un cliente, o dividir la dirección del mismo en los campos necesarios.
  2. Claves principales. Cada tabla debe tener un único identificador o clave principal, que debe estar formado por uno o varios campos de la tabla. En una base de datos relacional, cada uno de los registros de cualquier tabla debe ser identificado de forma única. Es decir, algún campo o combinación de varios debe albergar un valor único para cada registro de la tabla. Este identificador es lo que denominamos clave principal. Como regla general deberíamos usar como clave principal el campo más corto que identifique a cada registro. No obstante es recomendable la creación de campos artificiales para ser usados como clave principal.
  3. Dependencia funcional. Para cada valor único de la clave principal, los valores de las columnas de datos deben estar relacionados y deben describir completamente el contenido de la tabla. Esta regla opera de dos formas:
    • En primer lugar no debería haber en una tabla un dato que no sea relevante del asunto o materia del que trata la tabla. Por ejemplo, aunque es necesaria la información del cliente para cada pedido, los clientes serían un asunto independiente y tendrían su propia tabla.
    • En segundo lugar los datos de la tabla deberían describir completamente la materia de la que trata la tabla. Por ejemplo, un pedido podría ser enviado a una dirección diferente a la del cliente, por lo que la adición de la dirección de envío a la tabla pedido haría que la información fuese mas completa.

    Mas técnicamente decimos que dados dos campos, A y B, se dice que B es funcionalmente dependiente de A si para cada valor de A existe un valor de B, y solo uno, asociado con el. A y B pueden ser compuestos, es decir pueden ser conjuntos de campos en lugar de campos simples.

  4. Independencia de los campos. Debe ser posible realizar cambios en cualquier campo que no forme parte de la clave principal sin que para ello se vea afectado cualquier otro campo. Si incluyéramos la compañía de envío y su teléfono en la tabla de pedidos, y la compañía cambia su numero de teléfono habría de ser modificado en muchos registros.
Normalización de la base de datos

 

Diseño de las tablas

Una vez realizado este estudio llega el momento de crear las tablas, para ello colocaremos en cada tabla aquellos campos del tipo Nuevo, teniendo cuidado de que en cada tabla no haya ningún campo que se repita. Por ejemplo, en la tabla de pedidos no colocaremos el código del producto ya que en un pedido puede haber varios productos, para solucionar esto crearemos una tabla auxiliar que llamaremos Detalles de pedidos, en la que incluiremos los campos: clave del producto, PrecioUnidad, Cantidad y Descuento.

En nuestro ejemplo llegamos a la conclusión de que son necesarias seis tablas

Tabla Clientes

Nombre Tipo Tamaño Otras propiedades
IdCliente     clave
NombreCompañía      
NombreContacto      
CargoContacto      
Dirección      
Ciudad      
Región      
CódPostal      
País      
Teléfono      
Fax      

 

Tabla Compañías de envíos

Nombre Tipo Tamaño Otras propiedades
IdCompañíaEnvíos     clave
NombreCompañía      
Teléfono      

 

Tabla Detalles de pedidos

Nombre Tipo Tamaño Otras propiedades
IdPedido     clave
IdProducto     clave
PrecioUnidad      
Cantidad      
Descuento      

 

Tabla Empleados

Nombre Tipo Tamaño Otras propiedades
IdEmpleado clave
Apellidos
Nombre
Cargo
Tratamiento
FechaNacimiento
FechaContratación
Dirección
Ciudad
Región
CódPostal
País
TelDomicilio
Extensión
Foto
Notas
Jefe

 

Tabla Pedidos

Nombre Tipo Tamaño Otras propiedades
IdPedido clave
IdCliente
IdEmpleado
FechaPedido
FechaEntrega
FechaEnvío
FormaEnvío
Cargo
Destinatario
DirecciónDestinatario
CiudadDestinatario
RegiónDestinatario
CódPostalDestinatario
PaísDestinatario

 

Tabla Productos

Nombre Tipo Tamaño Otras propiedades
IdProducto     clave
NombreProducto      
CantidadPorUnidad      
PrecioUnidad      

Método de dependencias funcionales

A continuación vamos a ver un método mecánico para diseñar las tablas de la base de datos (normalizar).

Recordemos la definición técnica de dependencia funcional: dados dos campos, A y B, se dice que B es funcionalmente dependiente de A si para cada valor de A existe un único valor de B, asociado con él.

Empezamos tomando aquellos campos que de una manera clara serán claves en alguna tabla como por ejemplo el Idcliente. Para saber si un campo depende funcionalmente de otro nos hacemos el siguiente razonamiento:

  • ¿Si conozco el Idcliente, existe un único apellido del cliente asociado a el?, SI, luego los apellidos dependen funcionalmente del campo Idcliente. (Idcliente Þ apellidos )
  • ¿Si conozco el IdPedido existe un único Producto en el pedido asociado a el?, NO, ya que un pedido puede no tener un único producto, por lo tanto el producto no depende funcionalmente de IdPedido.
Obtención de todas las dependencias funcionales

 

Escribimos todas las dependencias funcionales.

IdPedido Þ FechaPedido

IdPedido Þ FechaEntrega

IdPedido Þ FechaEnvío

IdPedido Þ FormaEnvío

IdPedido Þ Cargo

IdPedido Þ IdCliente

IdPedido Þ NombreCompañía

IdPedido Þ NombreContacto

IdPedido Þ Dirección

IdPedido Þ Ciudad

IdPedido Þ Región

IdPedido Þ CódPostal

IdPedido Þ País

IdPedido Þ Destinatario

IdPedido Þ DirecciónDestinatario

IdPedido Þ CiudadDestinatario

IdPedido Þ RegiónDestinatario

IdPedido Þ CódPostalDestinatario

IdPedido Þ PaísDestinatario

IdPedido Þ NombreProducto

IdPedido Þ IdEmpleado

IdPedido Þ NombreEmpleado

 

IdPedido, IdProducto Þ PrecioUnidad

IdPedido, IdProductoÞ Cantidad

IdPedido, IdProductoÞ Descuento

 

IdCliente Þ NombreCompañía

IdCliente Þ NombreContacto

IdCliente Þ CargoContacto

IdCliente Þ Dirección

IdCliente Þ Ciudad

IdCliente Þ Región

IdCliente Þ CódPostal

IdCliente Þ País

IdCliente Þ Teléfono

IdCliente Þ Fax

 

IdProducto Þ NombreProducto

IdProducto Þ CantidadPorUnidad

IdProducto Þ PrecioUnidad

 

IdCompañíaEnvíos Þ NombreCompañíaEnvíos

IdCompañíaEnvíos Þ Teléfono

 

IdEmpleado Þ Nombre

IdEmpleado Þ Apellidos

IdEmpleado Þ Cargo

IdEmpleado Þ TratamientoEmp

IdEmpleado Þ FechaNacimiento

IdEmpleado Þ FechaContratación

IdEmpleado Þ Dirección

IdEmpleado Þ Ciudad

IdEmpleado Þ Región

IdEmpleado Þ CódPostal

IdEmpleado Þ País

IdEmpleado Þ TelDomicilio

IdEmpleado Þ Extensión

IdEmpleado Þ Foto

IdEmpleado Þ Notas

IdEmpleado Þ Jefe

 

Notar que en el caso del PrecioVenta de un producto este depende a la vez del IdProducto y del IdPedido, es decir va a tener una clave doble.

Esta relación contiene todas las dependencias funcionales que yo he visto, aunque posiblemente podrían determinarse mas de las que aquí aparecen. A partir de ahora se trata de simplificar hasta lograr una cobertura mínima, es decir que un campo no puede depender funcionalmente mas que de una clave.

Para realizar el proceso de simplificar, nos basaremos en la siguiente propiedad:

Si tenemos que A Þ B, y B Þ C, se puede deducir la dependencia A Þ C, siendo esta última dependencia redundante (sobrante).

En nuestro ejemplo tenemos que IdPedido Þ IdEmpleado, y IdEmpleado Þ Nombre, luego la expresión IdPedido Þ Nombre, es redundante y podemos eliminarla. Continuaremos este proceso de simplificación hasta obtener una cobertura mínima en la que aparezcan todos los campos una sola vez.

Simplificación y obtención de las tablas

 

Simplificamos tachando las sobrantes.

IdPedido Þ FechaPedido

IdPedido Þ FechaEntrega

IdPedido Þ FechaEnvío

IdPedido Þ FormaEnvío

IdPedido Þ Cargo

IdPedido Þ IdCliente

IdPedido Þ NombreCompañía

IdPedido Þ NombreContacto

IdPedido Þ Dirección

IdPedido Þ Ciudad

IdPedido Þ Región

IdPedido Þ CódPostal

IdPedido Þ País

IdPedido Þ Destinatario

IdPedido Þ DirecciónDestinatario

IdPedido Þ CiudadDestinatario

IdPedido Þ RegiónDestinatario

IdPedido Þ CódPostalDestinatario

IdPedido Þ PaísDestinatario

IdPedido Þ NombreProducto

IdPedido Þ IdEmpleado

IdPedido Þ NombreEmpleado

 

IdPedido, IdProducto Þ PrecioUnidad

IdPedido, IdProductoÞ Cantidad

IdPedido, IdProductoÞ Descuento

 

IdCliente Þ NombreCompañía

IdCliente Þ NombreContacto

IdCliente Þ CargoContacto

IdCliente Þ Dirección

IdCliente Þ Ciudad

IdCliente Þ Región

IdCliente Þ CódPostal

IdCliente Þ País

IdCliente Þ Teléfono

IdCliente Þ Fax

 

IdProducto Þ NombreProducto

IdProducto Þ CantidadPorUnidad

IdProducto Þ PrecioUnidad

 

IdCompañíaEnvíos Þ NombreCompañíaEnvíos

IdCompañíaEnvíos Þ Teléfono

 

IdEmpleado Þ Nombre

IdEmpleado Þ Apellidos

IdEmpleado Þ Cargo

IdEmpleado Þ TratamientoEmp

IdEmpleado Þ FechaNacimiento

IdEmpleado Þ FechaContratación

IdEmpleado Þ Dirección

IdEmpleado Þ Ciudad

IdEmpleado Þ Región

IdEmpleado Þ CódPostal

IdEmpleado Þ País

IdEmpleado Þ TelDomicilio

IdEmpleado Þ Extensión

IdEmpleado Þ Foto

IdEmpleado Þ Notas

IdEmpleado Þ Jefe

 

Hacemos limpieza borrando los que se han tachado, y obtenemos las tablas de la base de datos sin mas que definir una tabla por cada conjunto de dependencias funcionales de la misma clave

Agrupamos por claves obteniendo las tablas.

Conclusiones finales del capítulo

Todos los derechos reservados © Copyright 2004 ADR Infor S.L.
Contacto: soporte@adrinfor.com