what database-design normalization relational

database design - what - ¿Qué es la normalización(o la normalización)?



what is xml (10)

¿Por qué los chicos de la base de datos continúan con la normalización?

¿Qué es? ¿Cómo ayuda?

¿Se aplica a algo fuera de las bases de datos?


¿Qué es la normalización?

La normalización es un proceso formal paso a paso que nos permite descomponer las tablas de la base de datos de tal manera que se reducen al mínimo tanto la redundancia de datos como las anomalías de actualización .

Proceso de normalización
Cortesía

Primera forma normal si y solo si el dominio de cada atributo contiene solo valores atómicos (un valor atómico es un valor que no se puede dividir), y el valor de cada atributo contiene solo un valor único de ese dominio (ejemplo: - dominio para el columna de género es: "M", "F").

La primera forma normal impone estos criterios:

  • Elimine la repetición de grupos en tablas individuales.
  • Crea una tabla separada para cada conjunto de datos relacionados.
  • Identificar cada conjunto de datos relacionados con una clave principal

Segunda forma normal = 1NF + sin dependencias parciales, es decir, todos los atributos no clave son totalmente funcionales, dependen de la clave primaria.

Tercera forma normal = 2NF + sin dependencias transitorias, es decir, todos los atributos no clave son totalmente funcionales y dependen DIRECTAMENTE solo de la clave primaria.

La forma normal de Boyce-Codd (o BCNF o 3.5NF) es una versión ligeramente más fuerte de la tercera forma normal (3NF).

Nota: - Las formas normales Second, Third y Boyce-Codd están relacionadas con las dependencias funcionales. Examples

Cuarta forma normal = 3NF + eliminar dependencias multivaluadas

Quinta forma normal = 4NF + eliminar dependencias de unión


Antes de abordar directamente el tema "Normalización de la base de datos y sus tipos", debemos comprender la redundancia de los datos, las anomalías de inserción / actualización / eliminación, la dependencia parcial y la dependencia funcional transitiva.

¿Qué es redundancia de datos y anomalía de actualización / modificación?

La redundancia de datos es la duplicación innecesaria de datos en múltiples tablas dentro de la base de datos o incluso dentro de la misma tabla. Aumenta innecesariamente el tamaño de la base de datos y disminuye la eficacia de la base de datos al causar inconsistencias en los datos.

Ejemplo:

Aquí el ''student_age'' para el alumno Alex se repite innecesariamente, lo que naturalmente aumenta la redundancia de datos. Cuando la columna ''student_age'' tiene que cambiarse en el futuro, entonces la actualización se debe realizar en ambas filas del alumno Alex como en la tabla anterior. Este escenario se conoce como anomalía de actualización. Si el usuario actualiza solo una fila y olvida actualizarla, la otra fila causará inconsistencia de datos.

¿Qué es la anomalía de inserción?

La anomalía de inserción ocurre cuando ciertos valores para un atributo * no pueden insertarse en una tabla sin la existencia de los datos adicionales relacionados con ese valor particular.

Ejemplo:

Aquí se supone que ''student_name'' y ''exam_registered'' son una clave primaria compuesta (clave principal que contiene múltiples columnas). La clave principal debe ser siempre única, no debe contener valores NULL y debe identificar de forma única cada fila en una tabla. Ahora suponga que la escuela secundaria está tratando de presentar un nuevo examen llamado Química. Al principio, ningún estudiante ha sido registrado en este curso. Dado que la tabla anterior no aceptará el valor NULL en la columna ''student_name'', debemos esperar hasta que se haya registrado al menos un estudiante para ingresar al examen Chemistry en la tabla anterior.

¿Qué es la anomalía de eliminación?

La anomalía de eliminación ocurre cuando ciertos valores importantes de un atributo * se pierden debido a la eliminación de otros valores no requeridos.

Ejemplo:

Aquí se supone que ''student_name'' y ''exam_registered'' son una clave primaria compuesta (clave principal que contiene múltiples columnas). La clave principal debe ser siempre única y no debe contener valores NULL y debe identificar de forma única cada fila en una tabla. Ahora suponga que el estudiante llamado John canceló su registro para el examen llamado inglés. Dado que la columna ''student_name'' no puede contener el valor NULL, nos veremos obligados a eliminar toda la fila que nos costó la pérdida del examen llamado English de nuestra tabla. Pero aún la escuela secundaria ofrece la posibilidad de tomar un examen de inglés a sus estudiantes.

¿Qué es la dependencia parcial?

Se dice que una tabla está en dependencia parcial cuando un atributo de clave no primaria en esa tabla depende completamente de una parte del atributo de clave primaria compuesta en esa tabla.

Ejemplo:

Considere una tabla que tenga 3 columnas llamadas ''student_name'', ''student_age'' y ''exam_registered'' como se indica arriba. Aquí ''student_name'' y ''exam_registered'' pueden formar juntos una clave primaria compuesta. Normalmente, cada columna de clave no primaria en una tabla bien normalizada siempre debe depender del conjunto completo de clave primaria compuesta. Aquí ''student_age'' depende solo del ''student_name'' y no está relacionado con ''exam_registered'', lo que hace que esta tabla tenga una dependencia parcial.

¿Qué es la dependencia funcional transitiva?

Se dice que una tabla está en dependencia funcional transitiva cuando un atributo de clave no primaria en esa tabla depende más fuertemente de otro atributo de clave no primaria en esa tabla.

Ejemplo:

En la tabla anterior, la relación entre el atributo de clave no primaria ''postal_code'' y otro atributo de clave no primaria ''City'' es mucho más fuerte que la relación entre el atributo de clave principal ''student_id'' y el atributo de clave no primaria ''postal_code''. Esto hace que la tabla anterior esté en dependencia funcional transitiva.

Con la mejor comprensión de los conceptos anteriores, ahora podemos sumergirnos en la normalización de tablas en bases de datos.

Los datos dependen de la clave [1NF], la clave completa [2NF] y nada más que la clave [3NF]

Tabla sin normalización

A continuación se proporciona una tabla de muestra desnormalizada que se normalizará en los pasos incrementales de este artículo.

En el ejemplo de abajo para el student_id = 2, hay 2 entradas debido a diferentes identificadores principales. Aquí podemos suponer que Parent_id = 1 representa el padre y Parent_id = 3 representa la madre de este alumno cuyo student_id = 2.

Ejemplo:

Primera forma normal (1NF)

Reglas: 1. Los atributos deben contener solo valores atómicos. 2. No deben existir dos filas de datos que contengan un grupo repetitivo de información. 3. Cada tabla debe tener una clave primaria.

Paso 1:

La regla 1 se cumple en el paso anterior, pero aún así no cumple con la regla 2 y la regla 3.

Paso 2: Las tablas a continuación ahora cumplen con la Regla 1, la Regla 2 y la Regla 3 de 1NF.

Segunda forma normal (2NF)

Reglas:

  1. Las tablas deben satisfacer la primera forma normal (1NF)
  2. No debería haber ninguna dependencia parcial dentro de las tablas

Excepto la primera tabla, todas las otras tablas de 1NF satisfacen 2NF. En la primera tabla, la columna "edad" depende solo de la columna "student_id". Esto viola la Regla 2 de 2NF. Porque todas las columnas que no son clave deben depender completamente de las columnas de la clave principal. Entonces las tablas normalizadas según 2NF se dan a continuación.

Tercera forma normal (3NF)

Por lo general, una tabla de base de datos relacional a menudo se describe como ''normalizada'' si cumple con 3NF. La mayoría de las tablas 3NF están libres de anomalías de inserción, actualización y eliminación.

Reglas:

  1. Las tablas deben satisfacer la segunda forma normal (2NF)
  2. No debería haber ninguna dependencia funcional transitiva dentro de las tablas

Excepto la última tabla, todas las otras tablas del 2NF satisfacen 3NF. Esto se debe a que la columna ''ciudad'' depende más de la columna ''postal_code'' que la clave primaria ''student_id'' que hace que la columna ''city'' sea funcional transitiva dependiendo de la columna ''student_id''. Entonces las tablas finales normalizadas según 3NF se dan como a continuación.

*Atributo:

- Considera una tabla de estudiantes. Aquí student_name, age etc., se consideran los atributos que serán el título de las columnas correspondientes.

=============================================== ====================== Ejemplos sencillos: normalización de la base de datos


Ayuda a evitar datos duplicados (y peores, conflictivos).

Sin embargo, puede tener un impacto negativo en el rendimiento.


Citando Fecha CJ: La teoría ES práctica.

Las desviaciones de la normalización darán lugar a ciertas anomalías en su base de datos.

Las salidas de First Normal Form causarán anomalías de acceso, lo que significa que debe descomponer y escanear valores individuales para encontrar lo que está buscando. Por ejemplo, si uno de los valores es la cadena "Ford, Cadillac" dada por una respuesta anterior, y estás buscando todas las ocurrencias de "Ford", vas a tener que abrir la cadena y mirar el subcadenas. Esto, hasta cierto punto, frustra el propósito de almacenar los datos en una base de datos relacional.

La definición de First First Form ha cambiado desde 1970, pero esas diferencias no tienen por qué preocuparse por el momento. Si diseña sus tablas SQL utilizando el modelo de datos relacionales, sus tablas estarán automáticamente en 1NF.

Las desviaciones de Second Normal Form y posteriores causarán anomalías de actualización, ya que el mismo hecho se almacena en más de un lugar. Estos problemas hacen que sea imposible almacenar algunos hechos sin almacenar otros hechos que pueden no existir, y por lo tanto tienen que ser inventados. O cuando los hechos cambian, es posible que tenga que localizar todos los lugares donde se almacena un hecho y actualizar todos esos lugares, para no terminar con una base de datos que se contradice. Y, cuando vaya a eliminar una fila de la base de datos, puede encontrar que, si lo hace, está eliminando el único lugar donde se almacena un hecho que aún se necesita.

Estos son problemas lógicos, no problemas de rendimiento o problemas de espacio. A veces puede evitar estas anomalías de actualización mediante una programación cuidadosa. A veces (a menudo) es mejor prevenir los problemas en primer lugar al adherirse a las formas normales.

A pesar del valor de lo que ya se ha dicho, debe mencionarse que la normalización es un enfoque de abajo arriba, no de arriba hacia abajo. Si sigue ciertas metodologías en su análisis de los datos y en su diseño inicial, se le puede garantizar que el diseño se ajustará a 3NF como mínimo. En muchos casos, el diseño estará completamente normalizado.

Donde realmente quiera aplicar los conceptos que se enseñan en la normalización es cuando se le proporcionan datos heredados, de una base de datos heredada o de archivos formados por registros, y los datos se diseñaron con total ignorancia de las formas normales y las consecuencias de partir de ellos. En estos casos, es posible que deba descubrir las desviaciones de la normalización y corregir el diseño.

Advertencia: la normalización a menudo se enseña con matices religiosos, como si cada desviación de la normalización completa fuera un pecado, una ofensa contra Codd. (pequeño juego de palabras allí). No compre eso. Cuando realmente aprenda realmente el diseño de la base de datos, no solo sabrá cómo seguir las reglas, sino también cuándo será seguro romperlas.


Está destinado a reducir la redundancia de datos.

Para una discusión más formal, vea la Wikipedia normalisation

Daré un ejemplo algo simplista.

Asumir la base de datos de una organización que generalmente contiene miembros de la familia

id, name, address 214 Mr. Chris 123 Main St. 317 Mrs. Chris 123 Main St.

podría ser normalizado como

id name familyID 214 Mr. Chris 27 317 Mrs. Chris 27

y una mesa familiar

ID, address 27 123 Main St.

La normalización casi completa (BCNF) generalmente no se usa en producción, pero es un paso intermedio. Una vez que haya puesto la base de datos en BCNF, el siguiente paso es normalmente desregularizarlo de una manera lógica para acelerar las consultas y reducir la complejidad de ciertas inserciones comunes. Sin embargo, no puedes hacer esto bien sin normalizarlo primero.

La idea es que la información redundante se reduce a una sola entrada. Esto es particularmente útil en campos como direcciones, donde el Sr. Chris envía su dirección como Unit-7 123 Main St. y Mrs. Chris enumera Suite-7 123 Main Street, que aparecería en la tabla original como dos direcciones distintas.

Por lo general, la técnica utilizada es encontrar elementos repetidos y aislar esos campos en otra tabla con identificadores únicos y reemplazar los elementos repetidos con una clave principal que haga referencia a la nueva tabla.


La normalización consiste básicamente en diseñar un esquema de base de datos para evitar datos duplicados y redundantes. Si una parte de los datos se duplica en varios lugares de la base de datos, existe el riesgo de que se actualice en un lugar pero no en el otro, lo que puede dañar los datos.

Hay una serie de niveles de normalización desde 1. forma normal hasta 5. forma normal. Cada forma normal describe cómo deshacerse de algún problema específico, generalmente relacionado con la redundancia.

Algunos errores típicos de normalización:

(1) Tener más de un valor en una celda. Ejemplo:

UserId | Car --------------------- 1 | Toyota 2 | Ford,Cadillac

Aquí la columna "Coche" (que es una cadena) tiene varios valores. Eso ofende la primera forma normal, que dice que cada celda debe tener solo un valor. Podemos normalizar este problema al tener una fila separada por auto:

UserId | Car --------------------- 1 | Toyota 2 | Ford 2 | Cadillac

El problema de tener varios valores en una celda es que es complicado de actualizar, complicado de consultar, y no se pueden aplicar índices, restricciones, etc.

(2) Tener datos no clave redundantes (es decir, datos repetidos innecesariamente en varias filas). Ejemplo:

UserId | UserName | Car ----------------------- 1 | John | Toyota 2 | Sue | Ford 2 | Sue | Cadillac

Este diseño es un problema porque el nombre se repite para cada columna, aunque el nombre siempre está determinado por UserId. Esto hace teóricamente posible cambiar el nombre de Sue en una fila y no en la otra, que es corrupción de datos. El problema se resuelve dividiendo la tabla en dos y creando una relación clave principal / clave externa:

UserId(FK) | Car UserId(PK) | UserName --------------------- ----------------- 1 | Toyota 1 | John 2 | Ford 2 | Sue 2 | Cadillac

Ahora puede parecer que todavía tenemos datos redundantes porque se repiten los UserId; Sin embargo, la restricción PK / FK asegura que los valores no se pueden actualizar de forma independiente, por lo que la integridad es segura.

¿Es importante? Si, es muy importante Al tener una base de datos con errores de normalización, se abre el riesgo de obtener datos inválidos o corruptos en la base de datos. Dado que los datos "viven para siempre", es muy difícil deshacerse de los datos corruptos cuando ingresan a la base de datos.

No tengas miedo de la normalización . Las definiciones técnicas oficiales de los niveles de normalización son bastante obtusas. Lo hace parecer que la normalización es un proceso matemático complicado. Sin embargo, la normalización es básicamente el sentido común, y encontrará que si diseña un esquema de base de datos utilizando el sentido común, normalmente estará completamente normalizado.

Hay una serie de conceptos erróneos sobre la normalización:

  • algunos creen que las bases de datos normalizadas son más lentas y la desnormalización mejora el rendimiento. Sin embargo, esto solo es cierto en casos muy especiales. Por lo general, una base de datos normalizada también es la más rápida.

  • a veces la normalización se describe como un proceso de diseño gradual y usted debe decidir "cuándo detenerse". Pero en realidad los niveles de normalización solo describen diferentes problemas específicos. El problema resuelto por las formas normales por encima de 3rd NF son problemas bastante raros en primer lugar, así que es probable que su esquema ya esté en 5NF.

¿Se aplica a algo fuera de las bases de datos? No directamente, no. Los principios de normalización son bastante específicos para las bases de datos relacionales. Sin embargo, el tema subyacente general, que no debe tener datos duplicados si las diferentes instancias pueden perder sincronía, se puede aplicar ampliamente. Este es básicamente el principio SECO .


La normalización es uno de los conceptos básicos. Significa que dos cosas no influyen el uno en el otro.

En bases de datos específicamente significa que dos (o más) tablas no contienen los mismos datos, es decir, no tienen redundancia.

A primera vista, eso es realmente bueno porque las posibilidades de que tengas problemas de sincronización son casi nulas, siempre sabes dónde están tus datos, etc. Pero, probablemente, tu número de tablas crecerá y tendrás problemas para cruzar los datos. y para obtener algunos resultados resumidos.

Entonces, al final terminará con el diseño de la base de datos que no está completamente normalizado, con cierta redundancia (estará en algunos de los niveles posibles de normalización).


Las reglas de normalisation (fuente: desconocido)

  • La clave ( 1NF )
  • La clave completa ( 2NF )
  • y nada más que la clave ( 3NF )

... Entonces ayúdame, Codd.


Lo más importante es que sirve para eliminar la duplicación de los registros de la base de datos. Por ejemplo, si tiene más de un lugar (tablas) donde podría aparecer el nombre de una persona, mueva el nombre a una tabla separada y haga referencia a él en cualquier otro lugar. De esta forma, si necesita cambiar el nombre de la persona más tarde, solo tiene que cambiarlo en un solo lugar.

Es crucial para el diseño adecuado de la base de datos y, en teoría, debe usarlo tanto como sea posible para mantener la integridad de sus datos. Sin embargo, al recuperar información de muchas tablas, está perdiendo rendimiento y es por eso que a veces puede ver tablas de base de datos desnormalizadas (también llamadas aplanadas) utilizadas en aplicaciones críticas para el rendimiento.

Mi consejo es comenzar con un buen grado de normalización y solo des-normalizar cuando realmente se necesite

PD también verifique este artículo: normalisation para leer más sobre el tema y sobre las llamadas formas normales


Normalización: procedimiento utilizado para eliminar la redundancia y las dependencias funcionales entre columnas en una tabla.

Existen varias formas normales, generalmente indicadas por un número. Un número más alto significa menos redundancias y dependencias. Cualquier tabla SQL está en 1NF (primera forma normal, casi por definición) Normalizar significa cambiar el esquema (a menudo particionando las tablas) de forma reversible, dando un modelo que es funcionalmente idéntico, excepto con menos redundancia y dependencias.

La redundancia y la dependencia de los datos no son deseables porque pueden generar inconsistencias cuando se modifican los datos.