Articulo de referencia

Normalización de la base de datos

La normalización de bases de datos es el proceso de estructurar una base de datos relacional de acuerdo con una serie de formas normales para reducir la redundancia de datos y m...

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

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

Objetivos

Un objetivo fundamental de la primera forma normal definida por Codd en 1970 era permitir la consulta y manipulación de datos mediante un «sublenguaje de datos universal» basado en la lógica de primer orden . [ 1 ] Un ejemplo de dicho lenguaje es SQL , aunque Codd lo consideraba seriamente defectuoso. [ 2 ]

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

  1. Para liberar la colección de relaciones de dependencias indeseables de inserción, actualización y eliminación.
  2. Para reducir la necesidad de reestructurar la colección de relaciones a medida que se introducen nuevos tipos de datos y, por lo tanto, aumentar la vida útil de los programas de aplicación.
  3. Para que el modelo relacional sea más informativo para los usuarios.
  4. Para que la recopilación de relaciones sea neutral con respecto a las estadísticas de la consulta, ya que estas estadísticas pueden cambiar con el paso del tiempo.

EF Codd, "Normalización adicional del modelo relacional de la base de datos" [ 3 ]

Una anomalía de inserción . Hasta que el nuevo miembro del profesorado, el Dr. Newsome, sea asignado para impartir al menos un curso, sus datos no podrán registrarse.
Anomalía en la actualización . El empleado 519 aparece con direcciones diferentes en registros distintos.
Anomalía de eliminación . Toda la información sobre el Dr. Giddens se pierde si deja de estar asignado temporalmente 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
Existen circunstancias en las que ciertos datos no pueden registrarse. Por ejemplo, cada registro en una relación "Profesores y sus cursos" podría contener un ID de profesor, nombre del profesor, fecha de contratación del profesor y código del curso. Por lo tanto, se pueden registrar los datos de cualquier miembro del profesorado que imparta al menos un curso, pero no se pueden registrar los de un profesor recién contratado que aún no haya sido asignado a impartir ningún curso, salvo que se establezca el código del curso en nulo .
Anomalía de actualización
La misma información puede aparecer en varias filas; por lo tanto, las actualizaciones de la relación pueden generar inconsistencias lógicas. Por ejemplo, cada registro en una relación de "Habilidades de los empleados" podría contener un ID de empleado, una dirección y una habilidad; así, un cambio de dirección para un empleado en particular podría requerir aplicarse a varios registros (uno por cada habilidad). Si la actualización solo se realiza parcialmente (la dirección del empleado se actualiza en algunos registros, pero no en otros), la relación queda en un estado inconsistente. En concreto, la relación proporciona respuestas contradictorias a la pregunta de cuál es la dirección de ese empleado en particular.
Anomalía de eliminación
En determinadas circunstancias, la eliminación de datos que representan ciertos hechos requiere la eliminación de datos que representan hechos completamente diferentes. La relación "Profesores y sus cursos" descrita en el ejemplo anterior sufre este tipo de anomalía, ya que si un profesor deja temporalmente de estar asignado a algún curso, se debe eliminar el último registro en el que aparece dicho profesor, lo que implica la eliminación del profesor en sí, a menos que el campo Código de curso se establezca como nulo.

Minimice el rediseño al extender la estructura de la base de datos.

Una base de datos completamente normalizada puede ampliarse para admitir nuevos tipos de datos con cambios mínimos en su estructura existente. Como resultado, las aplicaciones que interactúan con la base de datos se ven mínimamente afectadas.

Las relaciones normalizadas y las relaciones entre ellas 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 (1FN) en 1970. [ 4 ] Codd pasó a definir la segunda forma normal (2FN) y la tercera forma normal (3FN) en 1971, [ 5 ] y Codd y Raymond F. Boyce definieron la forma normal de Boyce-Codd (BCFN) en 1974. [ 6 ]

Ronald Fagin introdujo la cuarta forma normal (4FN) en 1977 y la quinta forma normal (5FN) en 1979. Christopher J. Date introdujo la sexta forma normal (6FN) en 2003.

De manera informal, una relación de base de datos relacional se describe a menudo 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 (de menos normalizada a más normalizada) son:

Ejemplo

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 alcanzar una forma normal superior. [ 9 ] El proceso es progresivo y no se puede alcanzar un nivel superior 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 con el objetivo de alcanzar el nivel más alto de normalización, el primer paso sería asegurar el cumplimiento de la primera forma normal , el segundo paso sería asegurar el cumplimiento de 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, las formas normales más allá de la 4NF son principalmente de interés académico, ya que los problemas que existen para resolver rara vez aparecen en la práctica. [ 11 ]

Los datos del siguiente ejemplo se diseñaron intencionadamente para contradecir la mayoría de las formas normales. En la práctica, a menudo es posible omitir algunos pasos de normalización, ya que los datos ya están normalizados hasta cierto punto. Corregir una violación de una forma normal también suele corregir una violación de una forma normal de orden superior. En el ejemplo, se ha seleccionado 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

Supongamos que existe una tabla de base de datos con la siguiente estructura, que describe un libro: [ 10 ]

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

Una tabla que se ajusta al modelo relacional tiene una clave primaria que identifica de forma única una fila. En nuestro ejemplo, la clave primaria es una clave compuesta de {Título, Formato} , indicada mediante subrayado:

Satisfacer 1NF

En la primera forma normal, cada campo contiene un único valor. Un campo no puede contener un conjunto de valores ni un registro anidado. El campo Subject contiene un conjunto de valores de sujeto, lo que significa que no cumple con la condición. Para resolver el problema, los sujetos se extraen a una tabla de sujetos separada : [ 10 ]

En lugar de una tabla en forma no normalizada , ahora hay dos tablas que se ajustan a la primera forma normal (1NF).

Satisfacer 2NF

Recordemos que la tabla Libro que se muestra a continuación tiene una clave compuesta de {Título, Formato} , que no cumplirá con la 2NF si algún subconjunto de esa clave es un determinante. En este punto de nuestro diseño, la clave no está definida como clave primaria , por lo que se la denomina clave candidata . Consideremos la siguiente tabla:

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

Para normalizar esta tabla, convierta {Título} en una clave candidata (simple) (la clave primaria) de modo que cada atributo que no sea clave candidata dependa de la clave candidata completa, y elimine Precio y colóquelo en una tabla separada para que se pueda preservar su dependencia de Formato :

Ahora, tanto la tabla de Libros como la de Precios cumplen con la 2NF .

Satisfacer la 3NF

La tabla Libro aún presenta una dependencia funcional transitiva ({Nacionalidad del autor} depende de {Autor}, que a su vez depende de {Título}). Existen violaciones similares para la editorial ({País de la editorial} depende de {Editorial}, que a su vez depende de {Título}) y para el género ({Nombre del género} depende de {ID del género}, que a su vez depende de {Título}). Por lo tanto, la tabla Libro no está en 3NF. Para resolver esto, podemos colocar {Nacionalidad del autor}, {País de la editorial} y {Nombre del género} en sus respectivas tablas, eliminando así las dependencias funcionales transitivas.

Satisfacer a EKNF

La forma normal de clave elemental (EKNF) se sitúa estrictamente entre la 3NF y la BCNF y no se discute mucho en la literatura. Su objetivo es capturar las cualidades más destacadas de ambas, evitando sus problemas (a saber, que la 3NF es demasiado permisiva y la BCNF es propensa a la complejidad computacional). Dado que rara vez se menciona en la literatura, no se incluye en este ejemplo.

Satisfacer 4NF

Supongamos que la base de datos pertenece a una franquicia de librerías que cuenta con varios franquiciados con tiendas en diferentes ubicaciones. Por lo tanto, la librería decidió agregar una tabla que contiene datos sobre la disponibilidad de los libros en las distintas ubicaciones:

Como esta estructura de tabla consta de una clave primaria compuesta , no contiene ningún atributo que no sea clave y ya está en BCNF (y, por lo tanto, también satisface todas las formas normales anteriores ). Sin embargo, suponiendo que todos los libros disponibles se ofrecen en cada área, el título no está vinculado de forma inequívoca a una ubicación determinada y, por lo tanto, la tabla no satisface la 4NF .

Eso significa que, para satisfacer la cuarta forma normal , esta tabla también necesita ser descompuesta:

Ahora, cada registro se identifica inequívocamente mediante una superclave , por lo tanto, se cumple la 4NF .

Satisfacer el ETNF

Supongamos que los franquiciados también pueden pedir libros a diferentes proveedores. Sea la relación sujeta además a la siguiente restricción:

  • Si un determinado proveedor suministra un determinado título
  • y el título se entrega al franquiciado.
  • y el franquiciado está siendo abastecido por el proveedor,
  • Luego, el proveedor entrega el título al franquiciado . [ 12 ]

Esta tabla está en 4NF , pero el ID del proveedor es igual a la unión de sus proyecciones: {{ID del proveedor, Título}, {Título, ID del franquiciado}, {ID del franquiciado, ID del proveedor}} . Ningún componente de esa dependencia de unión es una superclave (la única superclave es el encabezado completo), por lo que la tabla no satisface la ETNF y puede descomponerse aún más: [ 12 ]

La descomposición produce conformidad con ETNF.

Satisfacer la 5NF

Para detectar una tabla que no cumple con la 5NF , generalmente es necesario examinar los datos minuciosamente. Supongamos la tabla del ejemplo de 4NF con una pequeña modificación en los datos y examinemos si cumple con la 5NF :

Al descomponer esta tabla se reducen las redundancias, lo que da como resultado las dos tablas siguientes:

La consulta que une estas tablas devolvería los siguientes datos:

La operación JOIN devuelve tres filas más de las que debería; al agregar otra tabla para aclarar la relación, se obtienen tres tablas separadas:

¿Qué devolverá ahora la operación JOIN? En realidad, no es posible unir estas tres tablas. Esto significa que no fue posible descomponer la tabla Franquiciado – Libro – Ubicación sin pérdida de datos, por lo tanto, la tabla ya cumple con la 5NF .

Descargo de responsabilidad : los datos utilizados demuestran el principio, pero no siempre se cumplen. En este caso, lo mejor sería descomponer los datos de la siguiente manera, con una clave sustituta que llamaremos "ID de tienda":

La operación JOIN ahora devolverá el resultado esperado:

CJ Date ha argumentado que solo una base de datos en 5NF está verdaderamente "normalizada". [ 13 ]

Satisfacer a DKNF

Echemos un vistazo a la tabla Book de los ejemplos anteriores y veamos si satisface la forma normal de clave de dominio :

Lógicamente, el grosor se determina por el número de páginas. Esto significa que depende de las páginas , que no son una clave. Por ejemplo, un libro de hasta 350 páginas se considera "delgado" y uno de más de 350 páginas se considera "grueso".

Esta convención es técnicamente una restricción, pero no es ni una restricción de dominio ni una restricción de clave; por lo tanto, no podemos confiar en las restricciones de dominio ni en las restricciones de clave para mantener la integridad de los datos.

En otras palabras, nada nos impide poner, por ejemplo, "Grueso" para un libro con solo 50 páginas, y esto hace que la tabla viole la DKNF .

Para solucionar esto, se crea una tabla que contiene una enumeración que define el grosor , y esa columna se elimina de la tabla original:

De esa forma, se ha eliminado la violación de la integridad del dominio y la tabla está en DKNF .

La normalización no evita todos los casos de resultados imposibles, contradictorios o impredecibles. En este ejemplo, usar páginas mínimas y máximas de 1/350 y 200/999.999.999.999 daría lugar a resultados impredecibles. Por lo tanto, sería mejor especificar y usar solo páginas mínimas.

Satisfacer 6NF

Una definición simple e intuitiva de la sexta forma normal es que "una tabla está en 6NF cuando la fila contiene la clave primaria y, como máximo, otro atributo".. [ 14 ]

Eso significa, por ejemplo, la tabla Publisher diseñada al crear la 1NF :

es necesario descomponerlo aún más en dos tablas:

La principal desventaja de la sexta forma normal (6NF) es la proliferación de tablas necesarias para representar la información de una sola entidad. Si una tabla en quinta forma normal (5NF) tiene una columna de clave primaria y N atributos, representar la misma información en 6NF requerirá N tablas; las actualizaciones de múltiples campos en un único registro conceptual requerirán actualizaciones en varias tablas; y las inserciones y eliminaciones requerirán operaciones en varias tablas. Por este motivo, en bases de datos destinadas al procesamiento de transacciones en línea (OLTP), no se recomienda utilizar la 6NF.

Sin embargo, en los almacenes de datos , que no permiten actualizaciones interactivas y están especializados en consultas rápidas sobre grandes volúmenes de datos, ciertos sistemas de gestión de bases de datos (DBMS) utilizan una representación interna en sexta forma normal (6NF), conocida como almacenamiento columnar . En situaciones donde el número de valores únicos de una columna es mucho menor que el número de filas de la tabla, el almacenamiento columnar permite un ahorro significativo de espacio mediante la compresión de datos. El almacenamiento columnar también permite la ejecución rápida de consultas de rango (por ejemplo, mostrar todos los registros donde una columna específica se encuentre entre X e Y, o sea menor que X).

En todos estos casos, sin embargo, el diseñador de la base de datos no tiene que realizar la normalización 6NF manualmente creando tablas separadas. Algunos sistemas de gestión de bases de datos (DBMS) especializados en almacenamiento de datos, como Sybase IQ , utilizan almacenamiento columnar por defecto, pero el diseñador sigue viendo solo una única tabla multicolumna. Otros DBMS, como Microsoft SQL Server 2012 y versiones posteriores, permiten especificar un "índice de almacén columnar" para una tabla en particular. [ 15 ]

Véase también

Notas y referencias

  1. "La adopción de un modelo relacional de datos... permite el desarrollo de un sublenguaje de datos universal basado en un cálculo de predicados aplicado. Un cálculo de predicados de primer orden es suficiente si la colección de relaciones está en forma normal. Dicho lenguaje proporcionaría un criterio de potencia lingüística para todos los demás lenguajes de datos propuestos, y sería en sí mismo un fuerte candidato para su integración (con la modificación sintáctica adecuada) en diversos lenguajes anfitriones (de programación, orientados a comandos o a problemas)." Codd, "Un modelo relacional de datos para grandes bancos de datos compartidos", archivado el 12 de junio de 2007 en Wayback Machine , pág. 381.
  2. Codd, EF Capítulo 23, "Graves fallos en SQL" , en El modelo relacional para la gestión de bases de datos: versión 2. Addison-Wesley (1990), págs. 371–389
  3. Codd, EF "Normalización adicional del modelo relacional de bases de datos", pág. 34
  4. 1 2 Codd, EF (junio de 1970). "Un modelo relacional de datos para grandes bancos de datos compartidos" . Communications of the ACM . 13 (6): 377– 387. doi : 10.1145/362384.362685 . S2CID 207549016 . 
  5. 1 2 3 4 Codd, EF «Mayor normalización del modelo relacional de bases de datos». (Presentado en Courant Computer Science Symposia Series 6, «Sistemas de bases de datos», Ciudad de Nueva York, 24-25 de mayo de 1971). Informe de investigación de IBM RJ909 (31 de agosto de 1971). Republicado en Randall J. Rustin (ed.), Data Base Systems: Courant Computer Science Symposia Series 6. Prentice-Hall, 1972.
  6. Codd, EF «Investigaciones recientes sobre sistemas de bases de datos relacionales». Informe de investigación de IBM RJ1385 (23 de abril de 1974). Republicado en las Actas del Congreso de 1974 (Estocolmo, Suecia, 1974), Nueva York: North-Holland (1974).
  7. Date, CJ (1999). Introducción a los sistemas de bases de datos . Addison-Wesley. pág. 290. 
  8. Darwen, Hugh; Date, CJ; Fagin, Ronald (2012). "Una forma normal para prevenir tuplas redundantes en bases de datos relacionales" (PDF) . Actas de la 15.ª Conferencia Internacional sobre Teoría de Bases de Datos . Conferencia Conjunta EDBT/ICDT 2012. Serie de Actas de Conferencias Internacionales de la ACM. Association for Computing Machinery . pág. 114. doi : 10.1145/2274576.2274589 . ISBN  978-1-4503-0791-8. OCLC 802369023 . Archivado (PDF) del original el 6 de marzo de 2016 . Recuperado el 22 de mayo de 2018 . 
  9. Kumar, Kunal; Azad, SK (octubre de 2017). "Patrón de diseño de normalización de bases de datos". 4.ª Conferencia Internacional de la Sección de Uttar Pradesh del IEEE sobre Ingeniería Eléctrica, Informática y Electrónica (UPCON) de 2017. IEEE. págs. 318–322 . doi : 10.1109/upcon.2017.8251067 . ISBN  9781538630044. S2CID 24491594 . 
  10. 1 2 3 "Normalización de bases de datos en MySQL: Cuatro pasos rápidos y sencillos" . ComputerWeekly.com . Archivado del original el 30 de agosto de 2017. Consultado el 23 de marzo de 2021 .
  11. "Normalización de bases de datos: quinta forma normal y más allá" . Base de conocimientos de MariaDB . Consultado el 23 de enero de 2019 .
  12. 1 2 Date, CJ (21 de diciembre de 2015). El nuevo diccionario de bases de datos relacionales: términos, conceptos y ejemplos . O'Reilly Media, Inc. pág. 138. ISBN  9781491951699.
  13. Date, CJ (21 de diciembre de 2015). The New Relational Database Dictionary: Terms, Concepts, and Examples . O'Reilly Media, Inc. p. 163. ISBN  9781491951699.
  14. "normalización: me gustaría entender la 6NF con un ejemplo" . Stack Overflow . Consultado el 23 de enero de 2019 .
  15. Microsoft Corporation. Índices de almacén de columnas: descripción general. https://docs.microsoft.com/en-us/sql/relational-databases/indexes/columnstore-indexes-overview . Consultado el 23 de marzo de 2020.

Lecturas adicionales

  • Date, CJ (1999), Introducción a los sistemas de bases de datos (8.ª ed.). Addison-Wesley Longman. ISBN 0-321-19784-4.
  • Kent, W. (1983) Una guía sencilla de cinco formas normales en la teoría de bases de datos relacionales , Communications of the ACM, vol. 26, pp.  120–125
  • H.-J. Schek, P. Pistor Estructuras de datos para un sistema integrado de gestión de bases de datos y recuperación de información
  • Kent, William (febrero de 1983). "Una guía sencilla de cinco formas normales en la teoría de bases de datos relacionales" . Communications of the ACM . 26 (2): 120– 125. doi : 10.1145/358024.358054 . S2CID 9195704 . 
  • Conceptos básicos de normalización de bases de datos. Archivado el 5 de febrero de 2007 en Wayback Machine por Mike Chapple (About.com).
  • Introducción a la normalización de bases de datos. Archivado el 28 de septiembre de 2011 en Wayback Machine . Parte 2. Archivado el 8 de julio de 2011 en Wayback Machine .
  • Introducción a la normalización de bases de datos, por Mike Hillyer.
  • Un tutorial sobre las tres primeras formas normales por Fred Coulson
  • Descripción de los fundamentos de la normalización de bases de datos por Microsoft
  • Normalización en sistemas de gestión de bases de datos por Chaitanya (beginnersbook.com)
  • Guía paso a paso para la normalización de bases de datos
  • ETNF – Forma normal de tupla esencial. Archivado el 6 de marzo de 2016 en Wayback Machine .