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. En nuestro ejemplo, la clave principal es una clave compuesta de {Título, Formato} (indicado por el subrayado):

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 lugar de una tabla en forma no normalizada , ahora hay dos tablas conforme a la 1NF.

2NF satisfactorio

Recuerde que la siguiente tabla Libro tiene una clave compuesta de {Título, Formato} , 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:

Ahora, tanto la tabla de Libros como la de Precios se ajustan a 2NF .

3NF satisfactorio

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

Satisfacer EKNF

La forma normal de clave elemental (EKNF) se encuentra estrictamente entre 3NF y BCNF y no se analiza mucho en la literatura. Su objetivo es "captar las cualidades destacadas tanto de 3NF como de BCNF" evitando al mismo tiempo los problemas de ambos (es decir, que 3NF es "demasiado indulgente" y BCNF es "propenso a la complejidad computacional"). Dado que rara vez se menciona en la literatura, no se incluye en este ejemplo.

4NF satisfactorio

Supongamos que la base de datos es propiedad de una franquicia minorista de libros que tiene varios franquiciados que poseen tiendas en diferentes ubicaciones. Y por eso el minorista decidió agregar una tabla que contiene datos sobre la disponibilidad de los libros en diferentes 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 ofrezcan en cada área, el Título no está vinculado inequívocamente a una Ubicación determinada y, por lo tanto, la tabla no satisface 4NF .

Eso significa que, para satisfacer la cuarta forma normal , esta tabla también debe descomponerse:

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

ETNF satisfactorio

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

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 el ETNF y puede descomponerse aún más: [12]

La descomposición produce el cumplimiento de ETNF.

5NF satisfactorio

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

Descomponer esta tabla reduce las redundancias, lo que da como resultado las dos tablas siguientes:

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

JOIN devuelve tres filas más de las que debería; agregar otra tabla para aclarar la relación da como resultado tres tablas separadas:

¿Qué devolverá JOIN ahora? En realidad, no es posible unir estas tres mesas. Eso significa que no fue posible descomponer el Franquiciado - Libro - Ubicación sin pérdida de datos, por lo tanto, la tabla ya satisface 5NF .

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

DKNF satisfactorio

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

Lógicamente, el Grosor viene determinado por el número de páginas. Eso significa que depende de Pages , que no es una clave. Pongamos un ejemplo de convención que diga que un libro de hasta 350 páginas se considera "delgado" y un libro de más de 350 páginas se considera "grueso".

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

En otras palabras, nada nos impide poner, por ejemplo, "Grueso" para un libro de sólo 50 páginas, y esto hace que la tabla infrinja el DKNF .

Para resolver 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 manera, se elimina la violación de la integridad del dominio y la tabla está en DKNF .

6NF satisfactorio

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 el 1NF:

debe descomponerse aún más en dos tablas:

El inconveniente obvio de 6NF es la proliferación de tablas necesarias para representar la información de una sola entidad. Si una tabla en 5NF tiene una columna de clave principal y N atributos, representar la misma información en 6NF requerirá N tablas; las actualizaciones de varios campos de un único registro conceptual requerirán actualizaciones de varias tablas; y las inserciones y eliminaciones requerirán de manera similar operaciones en varias tablas. Por este motivo, en bases de datos destinadas a satisfacer las necesidades de procesamiento de transacciones en línea (OLTP), no se debe utilizar 6NF.

Sin embargo, en los almacenes de datos , que no permiten actualizaciones interactivas y que están especializados en consultas rápidas sobre grandes volúmenes de datos, ciertos DBMS utilizan una representación 6NF interna, conocida como almacén de datos en columnas . En situaciones en las que el número de valores únicos de una columna es mucho menor que el número de filas de la tabla, el almacenamiento orientado a columnas permite ahorros significativos de espacio mediante la compresión de datos. El almacenamiento en columnas también permite la ejecución rápida de consultas de rango (por ejemplo, mostrar todos los registros donde una columna en particular está entre X e Y, o menos que X).

Sin embargo, en todos estos casos, el diseñador de la base de datos no tiene que realizar la normalización 6NF manualmente creando tablas separadas. Algunos DBMS especializados en almacenamiento, como Sybase IQ , utilizan almacenamiento en columnas de forma predeterminada, pero el diseñador todavía ve solo una tabla de varias columnas. Otros DBMS, como Microsoft SQL Server 2012 y posteriores, le permiten especificar un "índice de almacén de columnas" para una tabla en particular. [15]

Ver 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. Tal lenguaje proporcionaría un criterio de poder lingüístico para todos los demás lenguajes de datos propuestos, y sería en sí mismo un fuerte candidato para su incorporación (con modificaciones sintácticas apropiadas) en una variedad de lenguajes anfitriones (programación, comandos u orientados 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. 381
  2. ^ Codd, EF Capítulo 23, "Defectos graves 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 "Mayor normalización del modelo relacional de base de datos", p. 34
  4. ^ ab Codd, EF (junio de 1970). "Un modelo relacional de datos para grandes bancos de datos compartidos". Comunicaciones de la ACM . 13 (6): 377–387. doi : 10.1145/362384.362685 . S2CID  207549016.
  5. ^ abcd Codd, EF "Mayor normalización del modelo relacional de base de datos". (Presentado en Courant Computer Science Symposia Series 6, "Data Base Systems", Nueva York, 24 al 25 de mayo de 1971.) IBM Research Report RJ909 (31 de agosto de 1971). Publicado nuevamente en Randall J. Rustin (ed.), Sistemas de base de datos: Serie de simposios de informática de Courant 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 Proc. Congreso de 1974 (Estocolmo, Suecia, 1974), Nueva York: Holanda Septentrional (1974).
  7. ^ Fecha, CJ (1999). Introducción a los sistemas de bases de datos . Addison-Wesley. pag. 290.
  8. ^ Darwen, Hugh; Fecha, CJ; Fagin, Ronald (2012). "Una forma normal para prevenir tuplas redundantes en bases de datos relacionales" (PDF) . Actas de la XV Conferencia Internacional sobre Teoría de Bases de Datos . Conferencia conjunta EDBT/ICDT 2012. Serie de actas de conferencias internacionales de ACM. Asociación para Maquinaria de Computación . pag. 114. doi : 10.1145/2274576.2274589. ISBN 978-1-4503-0791-8. OCLC  802369023. Archivado (PDF) desde el original el 6 de marzo de 2016 . Consultado 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". 2017 Cuarta Conferencia Internacional de la Sección IEEE Uttar Pradesh sobre Electricidad, Computación y Electrónica (UPCON) . IEEE. págs. 318–322. doi :10.1109/upcon.2017.8251067. ISBN 9781538630044. S2CID  24491594.
  10. ^ abc "Normalización de bases de datos en MySQL: cuatro pasos sencillos y rápidos". ComputerWeekly.com . Archivado desde el 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. ^ ab Fecha, CJ (21 de diciembre de 2015). El nuevo diccionario de bases de datos relacionales: términos, conceptos y ejemplos. "O'Reilly Media, Inc.". pag. 138.ISBN 9781491951699.
  13. ^ Fecha, CJ (21 de diciembre de 2015). El nuevo diccionario de bases de datos relacionales: términos, conceptos y ejemplos. "O'Reilly Media, Inc.". pag. 163.ISBN 9781491951699.
  14. ^ "normalización: me gustaría comprender 6NF con un ejemplo". Desbordamiento de pila . Consultado el 23 de enero de 2019 .
  15. ^ Corporación Microsoft. Í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.

Otras lecturas

enlaces externos