stringtranslate.com

Normalización de bases de datos

La normalización de la base de datos es el proceso de estructurar una base de datos relacional de acuerdo con una serie de las llamadas formas normales para reducir la redundancia de datos y mejorar la integridad de los datos . Fue propuesto por primera vez por el informático británico Edgar F. Codd como parte de su modelo relacional .

La normalización implica organizar las columnas (atributos) y tablas (relaciones) de una base de datos para garantizar que sus dependencias se cumplan adecuadamente según las restricciones de integridad de la base de datos. Se logra aplicando algunas reglas formales, ya sea mediante un proceso de síntesis (creando un nuevo diseño de base de datos) o descomposición (mejorando un diseño de base de datos existente).

Objetivos

Un objetivo básico de la primera forma normal definida por Codd en 1970 era permitir que los datos fueran consultados y manipulados utilizando un "sublenguaje de datos universal" basado en la lógica de primer orden . [1] Un ejemplo de tal lenguaje es SQL , aunque Codd lo consideró seriamente defectuoso. [2]

Codd estableció los objetivos de la normalización más allá de 1NF (primera forma normal) como:

  1. Liberar la colección de relaciones de dependencias de inserción, actualización y eliminación no deseadas.
  2. Reducir la necesidad de reestructurar la recopilación de relaciones, a medida que se introducen nuevos tipos de datos, y así aumentar la vida útil de los programas de aplicación.
  3. Hacer que el modelo relacional sea más informativo para los usuarios.
  4. Hacer que la recopilación de relaciones sea neutral a las estadísticas de la consulta, donde estas estadísticas pueden cambiar con el paso del tiempo.
—  EF Codd, "Mayor normalización del modelo relacional de base de datos" [3]
Una anomalía de inserción . Hasta que el nuevo miembro de la facultad, el Dr. Newsome, sea asignado para impartir al menos un curso, sus detalles no se pueden registrar.
Una anomalía de actualización . Se muestra que el empleado 519 tiene diferentes direcciones en diferentes registros.
Una anomalía de eliminación . Toda la información sobre el Dr. Giddens se perderá si temporalmente deja de estar asignado a algún curso.

Cuando se intenta modificar (actualizar, insertar o eliminar) una relación, pueden surgir los siguientes efectos secundarios indeseables en relaciones que no han sido suficientemente normalizadas:

anomalía de inserción
Hay circunstancias en las que ciertos hechos no pueden registrarse en absoluto. Por ejemplo, cada registro en una relación "Profesores y sus cursos" puede contener un ID de docente, un nombre de docente, una fecha de contratación de docentes y un código de curso. Por lo tanto, se pueden registrar los detalles de cualquier miembro del cuerpo docente que imparta al menos un curso, pero no se puede registrar un miembro del cuerpo docente recién contratado que aún no ha sido asignado para enseñar ningún curso, excepto estableciendo el Código del curso en nulo .
Actualizar anomalía
La misma información se puede expresar en varias filas; por lo tanto, las actualizaciones de la relación pueden dar lugar a inconsistencias lógicas. Por ejemplo, cada registro en una relación "Habilidades de los empleados" puede contener un ID de empleado, una dirección de empleado y una habilidad; por lo tanto, es posible que sea necesario aplicar un cambio de dirección para un empleado en particular a varios registros (uno para cada habilidad). Si la actualización sólo tiene éxito parcialmente (la dirección del empleado se actualiza en algunos registros pero no en otros), entonces la relación queda en un estado inconsistente. Específicamente, la relación proporciona respuestas contradictorias a la pregunta de cuál es la dirección de este empleado en particular.
Anomalía de eliminación
En determinadas circunstancias, la eliminación de datos que representan determinados hechos requiere la eliminación de datos que representan hechos completamente diferentes. La relación "Facultad y sus cursos" descrita en el ejemplo anterior sufre de este tipo de anomalía, ya que si un miembro de la facultad deja temporalmente de estar asignado a algún curso, el último de los registros en el que aparece ese miembro de la facultad debe eliminarse, efectivamente también eliminando al miembro de la facultad, a menos que el campo Código del curso esté establecido en nulo.

Minimizar el rediseño al ampliar la estructura de la base de datos.

Una base de datos completamente normalizada permite ampliar su estructura para dar cabida a nuevos tipos de datos sin cambiar demasiado la estructura existente. Como resultado, las aplicaciones que interactúan con la base de datos se ven mínimamente afectadas.

Las relaciones normalizadas y la relación entre una relación normalizada y otra reflejan conceptos del mundo real y sus interrelaciones.

Formas normales

Codd introdujo el concepto de normalización y lo que ahora se conoce como la primera forma normal (1NF) en 1970. [4] Codd pasó a definir la segunda forma normal (2NF) y la tercera forma normal (3NF) en 1971, [5] y Codd y Raymond F. Boyce definieron la forma normal de Boyce-Codd (BCNF) en 1974. [6]

De manera informal, una relación de base de datos relacional a menudo se describe como "normalizada" si cumple con la tercera forma normal. [7] La ​​mayoría de las relaciones 3NF están libres de anomalías de inserción, actualización y eliminación.

Las formas normales (desde la menos normalizada hasta la más normalizada) son:

Ejemplo de normalización paso a paso

La normalización es una técnica de diseño de bases de datos que se utiliza para diseñar una tabla de base de datos relacional hasta una forma normal superior. [9] El proceso es progresivo y no se puede lograr un mayor nivel de normalización de la base de datos a menos que se hayan satisfecho los niveles anteriores. [10]

Eso significa que, teniendo datos en forma no normalizada (la menos normalizada) y apuntando a lograr el mayor nivel de normalización, el primer paso sería garantizar el cumplimiento de la primera forma normal , el segundo paso sería garantizar que se cumpla la segunda forma normal . y así sucesivamente en el orden mencionado anteriormente, hasta que los datos se ajusten a la sexta forma normal .

Sin embargo, vale la pena señalar que las formas normales más allá de 4NF son principalmente de interés académico, ya que los problemas que deben resolver rara vez aparecen en la práctica. [11]

Los datos del siguiente ejemplo fueron diseñados intencionalmente para contradecir la mayoría de las formas normales. En la práctica, a menudo es posible omitir algunos de los pasos de normalización porque los datos ya están normalizados hasta cierto punto. La reparación de una violación de una forma normal también suele solucionar una violación de una forma normal superior. En el ejemplo, se ha elegido una tabla para la normalización en cada paso, lo que significa que al final algunas tablas podrían no estar suficientemente normalizadas.

Datos iniciales

Deje que exista una tabla de base de datos con la siguiente estructura: [10]

Para este ejemplo se supone que cada libro tiene un solo autor.

Una tabla que se ajusta al modelo relacional tiene una clave principal que identifica de forma única una fila. Dos libros pueden tener el mismo título, pero un ISBN identifica de forma única un libro, por lo que puede usarse como clave principal:

1NF satisfactorio

En la primera forma normal, cada campo contiene un único valor. Un campo no puede contener un conjunto de valores o un registro anidado.

El asunto contiene un conjunto de valores del sujeto, lo que significa que no los cumple.

Para resolver el problema, los temas se extraen en una tabla de Asuntos separada : [10]

En Asunto , ISBN es una clave externa: se refiere a la clave principal en Libro y hace explícita la relación entre estas dos tablas.

En lugar de una tabla en forma no normalizada , ahora hay dos tablas conforme a la 1NF.

2NF satisfactorio

La siguiente tabla de libros tiene una clave compuesta de {Título, Formato} (indicada por el subrayado), que no satisfará 2NF si algún subconjunto de esa clave es un determinante. En este punto de nuestro diseño, la clave no está finalizada como clave principal , por lo que se denomina clave candidata . Considere la siguiente tabla:

Todos los atributos que no forman parte de la clave candidata dependen del Título , pero solo el Precio también depende del Formato . Para cumplir con 2NF y eliminar duplicados, cada atributo de clave que no sea candidata debe depender de la clave candidata completa, no solo de una parte.

Para normalizar esta tabla, haga de {Título} una clave candidata (simple) (la clave principal) para que cada atributo que no sea de clave candidata dependa de toda la clave candidata, y elimine Precio en una tabla separada para que su dependencia del Formato pueda ser preservado: