2009-08-11 16 views
31

Podría alguien me ayude a saber lo que es la normalización en mysql y en cuyo caso, y cómo tenemos que usarlo ..Normalización en MySQL

Gracias de antemano.

Respuesta

65

trato de intentar explicar la normalización en términos simples aquí. En primer lugar, es algo que se aplica a la base de datos relacional (Oracle, Access, MySQL) por lo que no es solo para MySQL.

La normalización consiste en asegurarse de que cada tabla tenga los únicos campos mínimos y deshacerse de las dependencias. Imagine que tiene un registro de empleado, y cada empleado pertenece a un departamento. Si almacena el departamento como un campo junto con los demás datos del empleado, tiene un problema: ¿qué sucede si se elimina un departamento? Debe actualizar todos los campos del departamento y existe la posibilidad de error. ¿Y qué pasa si algunos empleados no tienen un departamento (recientemente asignado, quizás?). Ahora habrá valores nulos.

Por lo tanto, la normalización, en resumen, es evitar tener campos que serían nulos, y asegurarse de que todos los campos en la tabla solo pertenecen a un dominio de los datos que se describen. Por ejemplo, en la tabla de empleados, los campos podrían ser id, nombre, número de seguro social, pero esos tres campos no tienen nada que ver con el departamento. Solo el ID del empleado describe a qué departamento pertenece el empleado. Entonces, esto implica que el departamento en el que se encuentra un empleado debe estar en otra mesa.

Aquí hay un proceso de normalización simple.

EMPLOYEE (<employee_id>, name, social_security, department_name) 

Esto no está normalizado, como se explicó. Una forma normalizada podría verse como

EMPLOYEE (<employee_id>, name, social_security) 

Aquí, la tabla Empleado solo es responsable de un conjunto de datos. Entonces, ¿dónde almacenamos a qué departamento pertenece el empleado? En otra tabla

EMPLOYEE_DEPARTMENT (<employee_id>, department_name) 

Esto no es óptimo. ¿Qué pasa si el nombre del departamento cambia? (sucede en el gobierno de los Estados Unidos todo el tiempo). Por lo tanto, es mejor hacer esto

EMPLOYEE_DEPARTMENT (<employee_id>, department_id) 
DEPARTMENT (<department_id>, department_name) 

Hay primer formulario normal, segundo formulario normal y tercer formulario normal. Pero a menos que estés estudiando un curso de DB, por lo general solo busco la forma más normalizada que pueda entender.

Espero que esto ayude.

+0

gracias por ayudar al hombre ... – Fero

+0

"¿Qué pasa si el nombre del departamento cambia?" no tiene nada que ver con la normalización. (Por ejemplo, contactes tu propia "asegurarte de que cada tabla tenga los únicos campos mínimos y deshacerse de las dependencias".) Tampoco reemplaza las columnas por identificadores en general. Claramente tiene algo que ver con reemplazar una tabla por más tablas, pero esa noción general no es normalización, sino que la normalización es un ejemplo de ello. Usted está (a veces y a veces no) combinando los dos. – philipxy

13

La normalización no es solo para MYSql. Es un concepto de base de datos general.

normalización es el proceso de organizar los datos de manera eficiente en una base de datos . Hay dos objetivos del proceso de normalización : eliminar datos redundantes (por ejemplo, el almacenamiento los mismos datos en más de una tabla) y la garantía de dependencias de datos hacen que sentido (sólo almacenar datos relacionados en una tabla ). Ambos son objetivos valiosos , ya que reducen la cantidad de espacio que consume una base de datos y garantizan que los datos se guarden de forma lógica.

Las formas normales en SQL se dan a continuación.

forma Primero Normal (1NF): Una relación es dice que está en 1NF si tiene sólo atributos de un solo valor, ni repetir ni se permite arrays.

Segunda forma normal (2NF): Una relación se dice que es en 2NF si está en 1NF y cada atributo no clave es totalmente dependiente funcional en la clave principal .

Tercera forma normal (3NF): Decimos que una relación está en 3NF si está en 2NF y no tiene dependencias transitivas.

Forma normal de Boyce-Codd (BCNF): Una relación se dice que es en BCNF si y sólo si cada determinante en la relación es una clave candidata.

Cuarta forma normal (4NF): Se dice que una relación está en 4NF si está en BCNF y no contiene dependencia de varios valores.

Quinta Forma Normal (5NF): Una relación es dice que está en 5NF si y sólo si cada se unen en relación de dependencia se da a entender por las claves candidatas de relación.

Forma normal de clave de dominio (DKNF): Decimos que una relación está en DKNF si es sin anomalías de modificación. inserción, deleción, y actualizar anomalías sido objeto de modificación anomalías

Seel también

Database Normalization Basics

+4

Creo que tienes 4NF mal. ¿No debería ser "DEPENDENCIAS SIN VALORES MÚLTIPLES"? ¡Los atributos multivalor ya están prohibidos por 1NF! –

+2

Editado. @Thomas Padron-McCarthy, gracias por señalar – rahul

3

Es una técnica para asegurar que sus datos se mantiene constante, eliminando la duplicación.De modo que una base de datos en la que se almacena la misma información en más de una tabla no es normalizada.

Vea el artículo de Wikipedia en Database normalization.

(Es una técnica general para bases de datos relacionales, no es específico de MySQL.)

0

En el campo de la Relational Database Design , la normalización es una forma sistemática de asegurar que una estructura de base de datos es adecuado para consulta de uso general y libre de ciertas indeseable características-inserción, actualización y anomalías de eliminación, que podría conducir a una pérdida de integridad de datos. [1] E.F. Codd, el inventor del modelo relacional , introdujo el concepto de normalización y lo que ahora conocemos como la primera forma normal en 1970. [2] Codd pasó a definir la segunda y tercera formas normales en 1971, [3] y Codd y Raymond F. Boyce definió la forma normal Boyce-Codd en 1974. [4] Superior formas normales fueron definidos por otros teóricos en los años siguientes, la siendo la sexta forma normal introducido por Chris Fecha, Hugh Darwen, y Nikos Lorentzos más reciente en 2002. [5]

manera informal, una tabla relacional base de datos (la representación informatizada de una relación) se describe a menudo como "normalizado" si está en la tercera forma normal (3NF). [6] La mayoría de las tablas 3NF están libres de inserción, actualización y anomalías de eliminación, es decir, en la mayoría de los casos Las tablas 3NF se adhieren a BCNF, 4NF y 5NF (pero normalmente no a 6 NF).

Una pieza estándar de diseño de base de datos guía es que el diseñador debe crear un diseño completamente normalizado; desnormalización selectiva puede posteriormente realizarse por por motivos de rendimiento. [7] Sin embargo, algunos disciplinas de modelado, tales como el enfoque modelado dimensional a los datos diseño del almacén, recomienda explícitamente diseños no normalizados, es decir, diseños que en gran parte no se adhieren a 3NF. [8]

Editar: Fuente: http://en.wikipedia.org/wiki/Database_normalization

+0

@ Ali: Si va a cortar y pegar desde Wikipedia, proporcione un enlace a la fuente. – RichieHindle

+0

@RichieHindle; convenido. Acabo de editar la publicación. – Jonik

2

cheque this post tiene sugerencias útiles

Tutorial de Barry en la comprensión de un esquema de base de datos

http://www.youtube.com/watch?v=KqvIGYjcLQ4 
2

bien la creación de un esquema de base de datos para su aplicación, es necesario asegurarse de que evite cualquier información siendo almacenado en más de una columna en diferentes tablas.

Como cada tabla en su base de datos identifica una entidad significativa en su aplicación, un identificador único es una de las columnas imprescindibles para ellas.

Ahora, al decidir el esquema de almacenamiento, se identifican varios tipos de relaciones entre estas entidades (tablas), viz-a-viz, uno-a-uno, uno-a-muchos, muchos-a-muchos.

  1. Para que una relación uno-a-uno (por ejemplo. Un estudiante tiene una fila única en la clase ), misma mesa se podría utilizar para almacenar columnas (de ambas tablas).
  2. Para una relación de uno a varios (por ejemplo, Un semestre puede tener múltiples cursos ), se está creando una clave externa en una tabla principal.
  3. Para una relación de muchos a muchos (por ejemplo. A Prof. asiste a muchos estudiantes y vice-versa), una tercera tabla tiene que ser creado (con clave principal de ambas tablas como una clave compuesta) , y datos relacionados de ambas tablas serán almacenados.

Una vez que tenga en cuenta todos estos escenarios, su esquema db se normalizará a 4NF.

Cuestiones relacionadas