database normalization tutorial
Este tutorial explicará qué es la normalización de base de datos y varias formas normales como 1NF 2NF 3NF y BCNF con ejemplos de código SQL:
La normalización de la base de datos es una técnica bien conocida que se utiliza para diseñar el esquema de la base de datos.
El objetivo principal de aplicar la técnica de normalización es reducir la redundancia y dependencia de los datos. La normalización nos ayuda a dividir tablas grandes en múltiples tablas pequeñas definiendo una relación lógica entre esas tablas.
Lo que vas a aprender:
- ¿Qué es la normalización de la base de datos?
- Conclusión
¿Qué es la normalización de la base de datos?
La normalización de la base de datos o la normalización de SQL nos ayuda a agrupar los datos relacionados en una sola tabla. Cualquier dato atributivo o datos indirectamente relacionados se colocan en tablas diferentes y estas tablas están conectadas con una relación lógica entre tablas padre e hijo.
En 1970, Edgar F. Codd ideó el concepto de normalización. Compartió un artículo titulado “Un modelo relacional de datos para grandes bancos compartidos” en el que propuso “Primera forma normal (1NF)”.
Ventajas de la normalización DBMS
La normalización de la base de datos ofrece las siguientes ventajas básicas:
- La normalización aumenta la coherencia de los datos, ya que evita la duplicidad de datos al almacenar los datos en un solo lugar.
- La normalización ayuda a agrupar datos similares o relacionados bajo el mismo esquema, lo que resulta en una mejor agrupación de datos.
- La normalización mejora la búsqueda más rápido ya que los índices se pueden crear más rápido. Por lo tanto, la base de datos o tabla normalizada se utiliza para OLTP (procesamiento de transacciones en línea).
Desventajas de la normalización de la base de datos
La normalización de DBMS tiene las siguientes desventajas:
- No podemos encontrar los datos asociados para, digamos, un producto o empleado en un solo lugar y tenemos que unirnos a más de una mesa. Esto provoca un retraso en la recuperación de los datos.
- Por tanto, la normalización no es una buena opción en transacciones OLAP (procesamiento analítico en línea).
Antes de continuar, comprendamos los siguientes términos:
- Entidad: La entidad es un objeto de la vida real, donde los datos asociados con dicho objeto se almacenan en la tabla. El ejemplo de tales objetos son empleados, departamentos, estudiantes, etc.
- Atributos: Los atributos son las características de la entidad, que dan cierta información sobre la entidad. Por ejemplo, si las tablas son entidades, las columnas son sus atributos.
Tipos de formas normales
# 1) 1NF (Primera forma normal)
Por definición, una entidad que no tiene columnas repetidas o grupos de datos puede denominarse Primera forma normal. En la primera forma normal, cada columna es única.
A continuación se muestra cómo se vería nuestra tabla Empleados y Departamento si estuviera en la primera forma normal (1NF):
empNum | apellido | nombre de pila | deptName | deptCity | deptCountry |
---|---|---|---|---|---|
1001 | Andrews | Jacobo | Cuentas | Nueva York | Estados Unidos |
1002 | Schwatz | Miguel | Tecnología | Nueva York | Estados Unidos |
1009 | taza | Harry | HORA | Berlina | Alemania |
1007 | Harvey | Parker | Administración | Londres | Reino Unido |
1007 | Harvey | Parker | HORA | Londres | Reino Unido |
Aquí, todas las columnas de las tablas de Empleados y Departamentos se han agrupado en una y no hay necesidad de conectar columnas, como deptNum, ya que todos los datos están disponibles en un solo lugar.
Pero una tabla como esta con todas las columnas requeridas en ella, no solo sería difícil de administrar sino también difícil de realizar operaciones y también ineficiente desde el punto de vista del almacenamiento.
# 2) 2NF (Segunda forma normal)
Por definición, una entidad que es 1NF y uno de sus atributos se define como la clave principal y los atributos restantes dependen de la clave principal.
A continuación se muestra un ejemplo de cómo se vería la tabla de empleados y departamentos:
Tabla de empleados:
empNum | apellido | nombre de pila |
---|---|---|
1001 | Andrews | Jacobo |
1002 | Schwatz | Miguel |
1009 | taza | Harry |
1007 | Harvey | Parker |
1007 | Harvey | Parker |
Mesa de Departamentos:
deptNum | deptName | deptCity | deptCountry |
---|---|---|---|
1 | Cuentas | Nueva York | Estados Unidos |
2 | Tecnología | Nueva York | Estados Unidos |
3 | HORA | Berlina | Alemania |
4 | Administración | Londres | Reino Unido |
Tabla EmpDept:
empDeptID | empNum | deptNum |
---|---|---|
1 | 1001 | 1 |
2 | 1002 | 2 |
3 | 1009 | 3 |
4 | 1007 | 4 |
5 | 1007 | 3 |
Aquí, podemos observar que hemos dividido la tabla en forma 1NF en tres tablas diferentes. la tabla Empleados es una entidad sobre todos los empleados de una empresa y sus atributos describen las propiedades de cada empleado. La clave principal de esta tabla es empNum.
De manera similar, la tabla Departamentos es una entidad sobre todos los departamentos de una empresa y sus atributos describen las propiedades de cada departamento. La clave principal de esta tabla es deptNum.
En la tercera tabla, hemos combinado las claves primarias de ambas tablas. Las claves principales de las tablas Empleados y Departamentos se denominan claves externas en esta tercera tabla.
Si el usuario quiere una salida similar a la que teníamos en 1NF, entonces el usuario tiene que unir las tres tablas, usando las claves primarias.
Una consulta de muestra se vería como se muestra a continuación:
|_+_|# 3) 3NF (tercera forma normal)
Por definición, una tabla se considera en tercera normalidad si la tabla / entidad ya está en la segunda forma normal y las columnas de la tabla / entidad no dependen de forma transitiva de la clave primaria.
Comprendamos la dependencia no transitiva con la ayuda del siguiente ejemplo.
Digamos que una tabla llamada Cliente tiene las siguientes columnas:
donde conseguir videos de realidad virtual
Identificación del cliente - Clave principal que identifica a un cliente único
ClienteZIP - Código postal de la localidad en la que reside el cliente
CustomerCity - Ciudad en la que reside el cliente
En el caso anterior, la columna CustomerCity depende de la columna CustomerZIP y la columna CustomerZIP depende de CustomerID.
El escenario anterior se denomina dependencia transitiva de la columna CustomerCity en CustomerID, es decir, la clave principal. Después de comprender la dependencia transitiva, analicemos ahora el problema de esta dependencia.
Podría haber un escenario posible en el que se realice una actualización no deseada en la tabla para actualizar CustomerZIP a un código postal de una ciudad diferente sin actualizar CustomerCity, dejando así la base de datos en un estado inconsistente.
Para solucionar este problema, necesitamos eliminar la dependencia transitiva que podría hacerse creando otra tabla, por ejemplo, la tabla CustZIP que contiene dos columnas, es decir, CustomerZIP (como clave principal) y CustomerCity.
La columna CustomerZIP en la tabla Customer es una clave externa para CustomerZIP en la tabla CustZIP. Esta relación garantiza que no haya anomalías en las actualizaciones en las que se actualiza un CustomerZIP sin realizar cambios en CustomerCity.
# 4) Forma normal de Boyce-Codd (Forma normal 3.5)
Por definición, la tabla se considera la forma normal de Boyce-Codd, si ya está en la tercera forma normal y para cada dependencia funcional entre A y B, A debería ser una superclave.
Esta definición suena un poco complicada. Intentemos romperlo para entenderlo mejor.
- Dependencia funcional: Se dice que los atributos o columnas de una tabla son funcionalmente dependientes cuando un atributo o columna de una tabla identifica de forma única otro atributo (s) o columna (s) de la misma tabla.
Por ejemplo, la columna empNum o Employee Number identifica de forma única las otras columnas como el nombre del empleado, el salario del empleado, etc. en la tabla del empleado. - Super clave: Una sola clave o un grupo de varias claves que podrían identificar de forma única una sola fila en una tabla se puede denominar Super Clave. En términos generales, conocemos claves como claves compuestas.
Consideremos el siguiente escenario para entender cuándo hay un problema con la tercera forma normal y cómo llega la forma normal de Boyce-Codd al rescate.
empNum | nombre de pila | empCity | deptName | deptHead |
---|---|---|---|---|
1001 | Jacobo | Nueva York | Cuentas | Raymond |
1001 | Jacobo | Nueva York | Tecnología | Donald |
1002 | Harry | Berlina | Cuentas | Samara |
1007 | Parker | Londres | HORA | Elizabeth |
1007 | Parker | Londres | Infraestructura | Tomás |
En el ejemplo anterior, los empleados con empNum 1001 y 1007 trabajan en dos departamentos diferentes. Cada departamento tiene un jefe de departamento. Puede haber varios jefes de departamento para cada departamento. Al igual que en el departamento de Cuentas, Raymond y Samara son los dos jefes de departamento.
En este caso, empNum y deptName son superclaves, lo que implica que deptName es un atributo principal. Basándonos en estas dos columnas, podemos identificar cada fila de forma única.
Además, deptName depende de deptHead, lo que implica que deptHead es un atributo no principal. Este criterio descalifica a la mesa de formar parte del BCNF.
Para resolver esto, dividiremos la tabla en tres tablas diferentes como se menciona a continuación:
Tabla de empleados:
empNum | nombre de pila | empCity | deptNum |
---|---|---|---|
1001 | Jacobo | Nueva York | D1 |
1001 | Jacobo | Nueva York | D2 |
1002 | Harry | Berlina | D1 |
1007 | Parker | Londres | D3 |
1007 | Parker | Londres | D4 |
Tabla de departamento:
deptNum | deptName | deptHead |
---|---|---|
D1 | Cuentas | Raymond |
D2 | Tecnología | Donald |
D1 | Cuentas | Samara |
D3 | HORA | Elizabeth |
D4 | Infraestructura | Tomás |
# 5) Cuarta forma normal (4 forma normal)
Por definición, una tabla está en la cuarta forma normal, si no tiene dos o más datos independientes que describen la entidad relevante.
# 6) Quinta forma normal (5 forma normal)
Una tabla se puede considerar en Quinta Forma Normal solo si satisface las condiciones de la Cuarta Forma Normal y se puede dividir en varias tablas sin pérdida de datos.
Preguntas y respuestas frecuentes
P # 1) ¿Qué es la normalización en una base de datos?
Responder: La normalización de la base de datos es una técnica de diseño. Con esto podemos diseñar o rediseñar esquemas en la base de datos para reducir los datos redundantes y la dependencia de los datos al dividir los datos en tablas más pequeñas y relevantes.
P # 2) ¿Cuáles son los diferentes tipos de normalización?
Responder: A continuación se muestran los diferentes tipos de técnicas de normalización que se pueden emplear para diseñar esquemas de bases de datos:
- Primera forma normal (1NF)
- Segunda forma normal (2NF)
- Tercera forma normal (3NF)
- Forma normal de Boyce-Codd (3.5NF)
- Cuarta forma normal (4NF)
- Quinta forma normal (5NF)
P # 3) ¿Cuál es el propósito de la normalización?
Responder: El propósito principal de la normalización es reducir la redundancia de datos, es decir, los datos solo deben almacenarse una vez. Esto es para evitar cualquier anomalía de datos que pudiera surgir cuando intentamos almacenar los mismos datos en dos tablas diferentes, pero los cambios se aplican solo a una y no a la otra.
P # 4) ¿Qué es la desnormalización?
Responder: La desnormalización es una técnica para aumentar el rendimiento de la base de datos. Esta técnica agrega datos redundantes a la base de datos, contrariamente a la base de datos normalizada que elimina la redundancia de los datos.
Esto se hace en grandes bases de datos donde ejecutar JOIN para obtener datos de varias tablas es un asunto costoso. Por lo tanto, los datos redundantes se almacenan en varias tablas para evitar operaciones JOIN.
Conclusión
Hasta ahora, todos hemos pasado por tres formas de normalización de bases de datos.
En teoría, existen formas más altas de normalización de bases de datos como la forma normal de Boyce-Codd, 4NF, 5NF. Sin embargo, 3NF es la forma de normalización más utilizada en las bases de datos de producción.
¡¡Feliz lectura!!
Lectura recomendada
- Prueba de base de datos con JMeter
- MongoDB Create Database Backup
- Tutorial de creación de base de datos de MongoDB
- Las 10 mejores herramientas de diseño de bases de datos para crear modelos de datos complejos
- Rendimiento de MongoDB: rendimiento de bloqueo, fallos de página y creación de perfiles de base de datos
- Revisión de la base de datos relacional de código abierto Altibase
- Generador de perfiles de base de datos MongoDB para supervisar consultas y rendimiento
- Cómo probar la base de datos Oracle