Descripción de los conceptos básicos de normalización de la base de datos

Nota

Office 365 ProPlus pasa a llamarse Microsoft 365 Apps para empresas. Para obtener más información sobre este cambio, lea esta publicación de blog.

Número KB original:   283878

En este artículo se explica la terminología de normalización de bases de datos para principiantes. Una comprensión básica de esta terminología es útil al analizar el diseño de una base de datos relacional.

Descripción de la normalización

La normalización es el proceso de organización de datos en una base de datos. Esto incluye crear tablas y establecer relaciones entre dichas tablas de acuerdo con reglas diseñadas tanto para proteger los datos como para que la base de datos sea más flexible al eliminar la redundancia y la dependencia incoherente.

Los datos redundantes desperdician espacio en disco y crean problemas de mantenimiento. Si se deben cambiar los datos que existen en más de un lugar, los datos deben cambiarse exactamente del mismo modo en todas las ubicaciones. Un cambio de dirección de cliente es mucho más fácil de implementar si los datos se almacenan solo en la tabla Clientes y en ninguna otra parte de la base de datos.

¿Qué es una "dependencia incoherente"? Aunque es intuitivo que un usuario busque en la tabla Clientes la dirección de un cliente en particular, puede que no tenga sentido buscar allí el salario del empleado que llama a ese cliente. El salario del empleado está relacionado o depende del empleado y, por lo tanto, debe moverse a la tabla Empleados. Las dependencias incoherentes pueden dificultar el acceso a los datos porque la ruta de acceso para encontrar los datos puede faltar o romperse.

Existen algunas reglas para la normalización de la base de datos. Cada regla se denomina "formulario normal". Si se observa la primera regla, se dice que la base de datos está en "primera forma normal". Si se observan las tres primeras reglas, se considera que la base de datos está en "tercera forma normal". Aunque otros niveles de normalización son posibles, la tercera forma normal se considera el nivel más alto necesario para la mayoría de las aplicaciones.

Al igual que con muchas reglas y especificaciones formales, los escenarios del mundo real no siempre permiten el cumplimiento perfecto. En general, la normalización requiere tablas adicionales y algunos clientes lo encuentran engorroso. Si decide infringir una de las tres primeras reglas de normalización, asegúrese de que la aplicación anticipe cualquier problema que pueda producirse, como datos redundantes y dependencias incoherentes.

Las descripciones siguientes incluyen ejemplos.

Primer formulario normal

  • Elimine los grupos de repetición en tablas individuales.
  • Cree una tabla independiente para cada conjunto de datos relacionados.
  • Identifique cada conjunto de datos relacionados con una clave principal.

No use varios campos en una sola tabla para almacenar datos similares. Por ejemplo, para realizar un seguimiento de un elemento de inventario que puede venir de dos orígenes posibles, un registro de inventario puede contener campos para Código de proveedor 1 y Código de proveedor 2.

¿Qué sucede cuando se agrega un tercer proveedor? Agregar un campo no es la respuesta; requiere modificaciones de programa y tabla y no se adapta sin problemas a un número dinámico de proveedores. En su lugar, coloque toda la información del proveedor en una tabla independiente denominada Proveedores y, a continuación, vincule el inventario a los proveedores con una clave de número de elemento o proveedores para realizar un inventario con una clave de código de proveedor.

Segundo formulario normal

  • Cree tablas independientes para conjuntos de valores que se aplican a varios registros.
  • Relaciona estas tablas con una clave externa.

Los registros no deben depender de nada que no sea la clave principal de una tabla (una clave compuesta, si es necesario). Por ejemplo, considere la dirección de un cliente en un sistema de contabilidad. La dirección es necesaria para la tabla Clientes, pero también para las tablas Pedidos, Envío, Facturas, Clientes y Colecciones. En lugar de almacenar la dirección del cliente como una entrada independiente en cada una de estas tablas, guárdala en un solo lugar, ya sea en la tabla Clientes o en una tabla Addresses independiente.

Tercer formulario normal

  • Elimine los campos que no dependen de la clave.

Los valores de un registro que no forman parte de la clave de ese registro no pertenecen a la tabla. En general, cada vez que el contenido de un grupo de campos se pueda aplicar a más de un único registro de la tabla, considere la posibilidad de colocar esos campos en una tabla independiente.

Por ejemplo, en una tabla contratación de empleados, se puede incluir el nombre universitario y la dirección de un candidato. Pero necesita una lista completa de universidades para los envíos de correo en grupo. Si la información de la universidad se almacena en la tabla Candidatos, no hay forma de enumerar las universidades sin candidatos actuales. Cree una tabla Universidades independiente y vinculela a la tabla Candidatos con una clave de código universitario.

EXCEPCIÓN: El cumplimiento de la tercera forma normal, aunque teóricamente deseable, no siempre es práctico. Si tiene una tabla Clientes y desea eliminar todas las dependencias entre campos posibles, debe crear tablas independientes para ciudades, códigos POSTALes, representantes de ventas, clases de clientes y cualquier otro factor que pueda duplicarse en varios registros. En teoría, la normalización vale la pena purgar. Sin embargo, muchas tablas pequeñas pueden degradar el rendimiento o superar las capacidades de memoria y archivo abiertos.

Puede ser más factible aplicar la tercera forma normal solo a los datos que cambian con frecuencia. Si algunos campos dependientes permanecen, diseñe la aplicación para requerir que el usuario compruebe todos los campos relacionados cuando se cambie alguno.

Otros formularios de normalización

El cuarto formulario normal, también llamado Formulario normal codd de Boyce (BCNF), y el quinto formulario normal existen, pero rara vez se consideran en diseño práctico. Si se ignoran estas reglas, es posible que el diseño de la base de datos sea menor que perfecto, pero no debería afectar a la funcionalidad.

Normalización de una tabla de ejemplo

Estos pasos muestran el proceso de normalización de una tabla de estudiantes ficticia.

  1. Tabla no normalizada:

    Estudiante # Asesor Adv-Room Clase1 Clase2 Class3
    1022 Jones 412 101-07 143-01 159-02
    4123 Smith 216 101-07 143-01 179-04
  2. Primer formulario normal: sin grupos de repetición

    Las tablas solo deben tener dos dimensiones. Dado que un alumno tiene varias clases, estas clases deben aparecer en una tabla independiente. Los campos Class1, Class2 y Class3 de los registros anteriores son indicaciones de problemas de diseño.

    Las hojas de cálculo suelen usar la tercera dimensión, pero las tablas no deben hacerlo. Otra forma de ver este problema es con una relación de uno a varios, no ponga el lado uno y los muchos en la misma tabla. En su lugar, crea otra tabla en primera forma normal eliminando el grupo de repetición (Clase#), como se muestra a continuación:

    Estudiante # Asesor Adv-Room Clase #
    1022 Jones 412 101-07
    1022 Jones 412 143-01
    1022 Jones 412 159-02
    4123 Smith 216 101-07
    4123 Smith 216 143-01
    4123 Smith 216 179-04
  3. Segunda forma normal: eliminar datos redundantes

    Tenga en cuenta los varios valores class# para cada valor Student# de la tabla anterior. Class# no depende funcionalmente de Student# (clave principal), por lo que esta relación no está en segundo formato normal.

    Las tablas siguientes muestran el segundo formulario normal:

    Estudiantes:

    Estudiante # Asesor Adv-Room
    1022 Jones 412
    4123 Smith 216

    Registro:

    Estudiante # Clase #
    1022 101-07
    1022 143-01
    1022 159-02
    4123 101-07
    4123 143-01
    4123 179-04
  4. Tercera forma normal: eliminar datos que no dependen de la clave

    En el último ejemplo, Adv-Room (número de oficina del asesor) depende funcionalmente del atributo Advisor. La solución es mover ese atributo de la tabla Estudiantes a la tabla Profesor, como se muestra a continuación:

    Estudiantes:

    Estudiante # Asesor
    1022 Jones
    4123 Smith

    Profesorado:

    Name Sala Dept
    Jones 412 42
    Smith 216 42