Respuestas:
La normalización consiste básicamente en diseñar un esquema de base de datos tal que se eviten datos duplicados y redundantes. Si algún dato 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 da lugar a la corrupción de los datos.
Hay varios niveles de normalización desde 1. forma normal hasta 5. forma normal. Cada formulario 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 un solo valor. Podemos normalizar este problema al tener una fila separada por automóvil:
UserId | Car
---------------------
1 | Toyota
2 | Ford
2 | Cadillac
El problema de tener varios valores en una celda es que es difícil de actualizar, difícil 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 en cada columna, aunque el nombre siempre está determinado por el UserId. Esto hace que sea teóricamente posible cambiar el nombre de Sue en una fila y no en la otra, lo cual es corrupción de datos. El problema se resuelve dividiendo la tabla en dos y creando una relación de clave primaria / 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 los UserId se repiten; Sin embargo, la restricción PK / FK garantiza que los valores no se puedan 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, corre 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 por primera vez a la base de datos.
No tengas miedo a la normalización . Las definiciones técnicas oficiales de los niveles de normalización son bastante obtusas. Parece 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 usando 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. Normalmente, 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 hay que decidir "cuándo parar". Pero en realidad, los niveles de normalización solo describen diferentes problemas específicos. El problema resuelto por las formas normales por encima de la 3ª NF son problemas bastante raros en primer lugar, por lo 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 debería tener datos duplicados si las diferentes instancias pueden desincronizarse, se puede aplicar ampliamente. Este es básicamente el principio DRY .
Las reglas de normalización (fuente: desconocida)
... Así que 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 (mesas) 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 manera, si necesita cambiar el nombre de la persona más adelante, solo tiene que cambiarlo en un 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 algo de rendimiento y es por eso que a veces puede ver tablas de bases 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 hacer la desnormalización cuando sea realmente necesario
PD también consulte este artículo: http://en.wikipedia.org/wiki/Database_normalization 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 de 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, prácticamente por definición) Normalizar significa cambiar el esquema (a menudo particionando las tablas) de manera reversible, dando un modelo que es funcionalmente idéntico, excepto con menos redundancia y dependencias.
La redundancia y dependencia de los datos no es deseable porque puede dar lugar a inconsistencias al modificar los datos.
Está destinado a reducir la redundancia de datos.
Para una discusión más formal, consulte Wikipedia http://en.wikipedia.org/wiki/Database_normalization
Daré un ejemplo algo simplista.
Suponga 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 normalizarse 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 suele ser Des-normalizarla de forma lógica para acelerar las consultas y reducir la complejidad de ciertas inserciones comunes. Sin embargo, no puede hacer esto bien sin normalizarlo correctamente primero.
La idea es que la información redundante se reduzca 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 la Sra. Chris enumera Suite-7 123 Main Street, que aparecería en la tabla original como dos direcciones distintas.
Normalmente, 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.
Citando a CJ Fecha: La teoría ES práctica.
Las desviaciones de la normalización resultarán en ciertas anomalías en su base de datos.
Las desviaciones de la primera forma normal 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" como se indica en una respuesta anterior, y está buscando todas las ocurrencias de "Ford", tendrá que abrir la cadena y mirar la subcadenas. Esto, hasta cierto punto, frustra el propósito de almacenar los datos en una base de datos relacional.
La definición de Primera Forma Normal ha cambiado desde 1970, pero esas diferencias no tienen por qué preocuparle por ahora. Si diseña sus tablas SQL utilizando el modelo de datos relacionales, sus tablas estarán automáticamente en 1NF.
Las desviaciones de la Segunda Forma Normal y más allá causarán anomalías de actualización, porque el mismo hecho se almacena en más de un lugar. Estos problemas hacen que sea imposible almacenar algunos hechos sin almacenar otros que pueden no existir y, por lo tanto, deben inventarse. O cuando los hechos cambian, es posible que tenga que ubicar todos los lugares donde se almacena un hecho y actualizar todos esos lugares, para que no termine con una base de datos que se contradiga. Y, cuando va 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 todavía es necesario.
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 adhiriéndose 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 hacia arriba, no un enfoque de arriba hacia abajo. Si sigue ciertas metodologías en su análisis de los datos y en su diseño inicial, puede estar seguro de que el diseño se ajustará a 3NF como mínimo. En muchos casos, el diseño se normalizará por completo.
Donde realmente puede querer aplicar los conceptos enseñados bajo la normalización es cuando se le brindan datos heredados, de una base de datos heredada o de archivos formados por registros, y los datos se diseñaron con total ignorancia de los formularios 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 connotaciones religiosas, 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 el diseño de bases de datos, no solo sabrá cómo seguir las reglas, sino que también sabrá cuándo es seguro romperlas.
La normalización es uno de los conceptos básicos. Significa que dos cosas no se influyen entre sí.
En bases de datos específicamente significa que dos (o más) tablas no contienen los mismos datos, es decir, no tienen ninguna redundancia.
A primera vista eso es realmente bueno porque tus posibilidades de hacer algunos problemas de sincronización son cercanas a cero, 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ás con el diseño de la base de datos que no es puramente normalizado, con algo de redundancia (estará en algunos de los posibles niveles de normalización).
¿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 minimizan tanto la redundancia de datos como las anomalías de actualización .
Cortesía del proceso de normalización
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 de ese dominio (ejemplo: - dominio para el la columna de género es: "M", "F".).
La primera forma normal hace cumplir estos criterios:
Segunda forma normal = 1NF + sin dependencias parciales, es decir, todos los atributos que no son clave son completamente funcionales dependiendo de la clave principal.
Tercera forma normal = 2NF + sin dependencias transitivas, es decir, todos los atributos que no son de clave son totalmente funcionales y dependen DIRECTAMENTE solo de la clave principal.
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 segunda, tercera y Boyce-Codd se refieren a las dependencias funcionales. Ejemplos
Cuarta forma normal = 3NF + eliminar dependencias multivalor
Quinta forma normal = 4NF + eliminar dependencias de unión
Como dice Martin Kleppman en su libro Designing Data Intensive Applications:
La literatura sobre el modelo relacional distingue varias formas normales diferentes, pero las distinciones tienen poco interés práctico. Como regla general, si está duplicando valores que podrían almacenarse en un solo lugar, el esquema no se normaliza.
Ayuda a prevenir datos duplicados (y peor aún, contradictorios).
Sin embargo, puede tener un impacto negativo en el rendimiento.