sql >> Base de Datos >  >> RDS >> Mysql

Normalización en MYSQL

Intento intentar explicar la normalización en términos sencillos 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 se trata de asegurarse de que cada tabla tenga los únicos campos mínimos y deshacerse de las dependencias. Imagine que tiene un registro de empleados 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? Tiene que actualizar todos los campos del departamento y existe la posibilidad de error. ¿Y si algún empleado no tiene un departamento (¿recién asignado, quizás?). Ahora habrá valores nulos.

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

Aquí hay un proceso de normalización simple.

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

Esto no está normalizado, como se explica. 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 mesa

EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )

Esto no es óptimo. ¿Qué sucede si cambia el nombre del departamento? (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 primera forma normal, segunda forma normal y tercera forma normal. Pero, a menos que esté estudiando un curso de base de datos, normalmente busco la forma más normalizada que pueda entender.

Espero que esto ayude.