Normalización de tablas
El presente es una guía para seguir los estándares de base de datos SQL. Incluye normalizaciones de tablas, nombres y nomenclaturas de tablas y columnas. Así como tipos de datos, respaldos de base de datos, aspectos de seguridad entre otros puntos. Siguiendo los pasos de esta guía puedes crear tu base de datos siguiendo los estándares de GM para SQL y no caer en problemas de auditorías en base de datos 💀.
Normalización de tablas
La normalizacion de tablas es importante para evitar la redundancia de datos y mantener la integridad de los mismos, para ello se deben seguir las siguientes reglas:
Primera forma normal (1FN)
La primera forma normal se cumple cuando cada columna de una tabla contiene valores atómicos, es decir, valores que no se pueden dividir en partes más pequeñas, manteniendo la simpleza de la tabla para evitar una redundancia en los datos.
Ejemplo
Supongamos el caso de la creacion de una tabla llamada Usuarios donde en esta tabla contamos con las siguientes columnas:
| IdUsuario | NombreCompleto | Telefono | Direccion | Ciudad | Pais | CodigoPostal | FechaNacimiento | |
|---|---|---|---|---|---|---|---|---|
| Row 1 | Cell 2 | Cell 3 | Cell 4 | Cell 5 | Cell 6 | Cell 7 | Cell 8 | Cell 9 |
| Row 2 | Cell 5 | Cell 6 | Cell 7 | Cell 8 | Cell 9 | Cell 10 | Cell 11 | Cell 12 |
| Row 3 | Cell 8 | Cell 9 | Cell 10 | Cell 11 | Cell 12 | Cell 13 | Cell 14 | Cell 15 |
A primera impresión, la tabla Usuarios parece estar bien estructurada, pero si analizamos la tabla, podemos ver que la columna direccion se puede dividir en calle, numero, colonia, estado y pais. Pero, ¿por qué es importante dividir la columna direccion en partes más pequeñas? La respuesta es simple, para evitar la redundancia de datos, aumenta su simpleza y facilita la lectura de los datos.
Entonces, visualizando una forma mejorada, de la tabla Usuarios debemos agregar ademas la creacion de una nueva tabla llamada Direcciones:
ProUsuarios
| IdUsuario | NombreCompleto | Telefono | IdDireccion | FechaNacimiento | |
|---|---|---|---|---|---|
| Row 1 | Cell 2 | Cell 3 | Row 1 | Cell 8 | Cell 9 |
| Row 2 | Cell 5 | Cell 6 | Row 2 | Cell 11 | Cell 12 |
ProDirecciones
| IdDireccion | Calle | Numero | Colonia | Estado | Pais | CodigoPostal |
|---|---|---|---|---|---|---|
| Row 1 | Cell 4 | Cell 5 | Cell 6 | Cell 7 | Cell 8 | Cell 9 |
| Row 2 | Cell 7 | Cell 8 | Cell 9 | Cell 10 | Cell 11 | Cell 12 |
Segunda forma normal (2FN)
La segunda forma normal debe cumplir con la primera forma normal y que todos los campos que no son llave dependan de la llave primaria únicamente. En otras palabras, se deben desaclopar las propiedades no relacionadas con la llave primaria.
Por ejemplo
| IdMaestro | NombreMaestro | RFC | NombreEscuela | RFCEscuela | Sueldo | NoSemanaNomina |
|---|---|---|---|---|---|---|
| 1 | Andre Evans | CALB3434342Q4 | ITM | SOPE3498573E4 | 7120 | 10 |
| 2 | Connor Hogan | XXXD3454652W4 | UABC | FFGLH7887983R4 | 9566 | 11 |
En esta tabla la llave primaria es IdMaestro, entonces NombreEscuela, RFCEscuela, Sueldo y NoSemanaNomina no dependen estrictamente de ella. Así que estas columnas se saldrían de la tabla, se crearían nuevas tablas y se relacionarían con ésta tabla.
ProMaestros
| IdMaestro | NombreMaestro |
|---|---|
| 1 | Andre Evans |
| 2 | Connor Hogan |
ProEscuelas
| IdEscuela | NombreEscuela | RFCEscuela |
|---|---|---|
| 1 | ITM | SOPE3498573E4 |
| 2 | UABC | FFGLH7887983R4 |
ProSueldos
| IdSueldo | Sueldo | NoSemanaNomina |
|---|---|---|
| 1 | 7120 | 10 |
| 2 | 9566 | 11 |
Tercera forma normal (3FN)
La tercera forma normal debe cumplir con la segunda forma normal y que todos los campos que no son llave dependan de la llave primaria únicamente. En otras palabras, se deben desacoplar las propiedades no relacionadas con la llave primaria.
Ejemplo
Supongamos el caso de la creacion de una tabla llamada Usuarios donde en esta tabla contamos con las siguientes columnas:
| IdUsuario | NombreCompleto | Telefono | IdDireccion | FechaNacimiento | |
|---|---|---|---|---|---|
| 1 | Omar Flores | 1234567890 | 1 | omar@correo.com | 1990-01-01 |
| 2 | Juan Perez | 0987654321 | 2 | juan@correo.com | 1995-01-01 |
Esta tabla a simple vista podemos confirmar que cumple con la primera y segunda forma normal, pero si analizamos la tabla, podemos ver que la columna Email se puede dividir en NombreUsuario y Dominio. Pero, ¿por qué es importante dividir la columna Email en partes más pequeñas? La respuesta es simple, para evitar la redundancia de datos, aumenta su simpleza y facilita la lectura de los datos. Entonces, visualizando una forma mejorada, de la tabla Usuarios debemos agregar ademas la creacion de una nueva tabla llamada Emails:
ProUsuarios
| IdUsuario | NombreCompleto | Telefono | IdDireccion | FechaNacimiento |
|---|---|---|---|---|
| 1 | Omar Flores | 1234567890 | 1 | 1990-01-01 |
| 2 | Juan Perez | 0987654321 | 2 | 1995-01-01 |
ProEmails
| IdEmail | IdUsuario | NombreUsuario | Dominio |
|---|---|---|---|
| 1 | 1 | omar | correo |
| 2 | 2 | juan | correo |
Otras formas
En esta guia se mencionan las tres formas normales debido que es hasta donde abarca la Guia de Estándares de GM, pero existen otras formas normales como la cuarta forma normal (4FN), quinta forma normal (5FN), sexta forma normal (6FN) y la forma normal de Boyce-Codd (BCNF). Aunque no se observara aqui, es importante mencionar que estas formas normales son importantes para la normalizacion de tablas.
Puede consultar más información sobre las formas normales en el siguiente enlace.