La normalización en las bases de datos relacionales es uno de esos temas que, por un lado es sumamente importante y por el otro suena algo esotérico. Vamos a tratar de entender las formas normales (FN) de una manera simple para que puedas aplicarlas en tus proyectos profesionales.
Primera Forma Normal (1FN)
Esta FN nos ayuda a eliminar los valores repetidos y no atómicos dentro de una base de datos.
Formalmente, una tabla está en primera forma normal si:
Todos los atributos son atómicos. Un atributo es atómico si los elementos del dominio son simples e indivisibles.
No debe existir variación en el número de columnas.
Los campos no clave deben identificarse por la clave (dependencia funcional).
Debe existir una independencia del orden tanto de las filas como de las columnas; es decir, si los datos cambian de orden no deben cambiar sus significados.
Se traduce básicamente a que si tenemos campos compuestos como por ejemplo “nombre_completo” que en realidad contiene varios datos distintos, en este caso podría ser “nombre”, “apellido_paterno”, “apellido_materno”, etc.
También debemos asegurarnos que las columnas son las mismas para todos los registros, que no haya registros con columnas de más o de menos.
Todos los campos que no se consideran clave deben depender de manera única por el o los campos que si son clave.
Los campos deben ser tales que si reordenamos los registros o reordenamos las columnas, cada dato no pierda el significado.
Segunda Forma Normal (2FN)
Esta FN nos ayuda a diferenciar los datos en diversas entidades.
Formalmente, una tabla está en segunda forma normal si:
Está en 1FN
Sí los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal. Es decir, que no existen dependencias parciales.
Todos los atributos que no son clave principal deben depender únicamente de la clave principal.
Lo anterior quiere decir que sí tenemos datos que pertenecen a diversas entidades, cada entidad debe tener un campo clave separado. Por ejemplo:
En la tabla anterior tenemos por lo menos dos entidades que debemos separar para que cada uno dependa de manera única de su campo llave o ID. En este caso las entidades son alumnos por un lado y materias por el otro. En el ejemplo anterior, quedaría de la siguiente manera:
Tercera Forma Normal (3FN)
Esta FN nos ayuda a separar conceptualmente las entidades que no son dependientes.
Formalmente, una tabla está en tercera forma normal si:
Se encuentra en 2FN
No existe ninguna dependencia funcional transitiva en los atributos que no son clave
Esta FN se traduce en que aquellos datos que no pertenecen a la entidad deben tener una independencia de las demás y debe tener un campo clave propio. Continuando con el ejemplo anterior, al aplicar la 3FN separamos la tabla alumnos ya que contiene datos de los cursos en ella quedando de la siguiente manera.
Cuarta Forma Normal (4FN)
Esta FN nos trata de atomizar los datos multivaluados de manera que no tengamos datos repetidos entre rows.
Formalmente, una tabla está en cuarta forma normal si:
Se encuentra en 3FN
Los campos multivaluados se identifican por una clave única
Esta FN trata de eliminar registros duplicados en una entidad, es decir que cada registro tenga un contenido único y de necesitar repetir la data en los resultados se realiza a través de claves foráneas.
Aplicado al ejemplo anterior la tabla materia se independiza y se relaciona con el alumno a través de una tabla transitiva o pivote, de tal manera que si cambiamos el nombre de la materia solamente hay que cambiarla una vez y se propagara a cualquier referencia que haya de ella.
De esta manera, aunque parezca que la información se multiplicó, en realidad la descompusimos o normalizamos de manera que a un sistema le sea fácil de reconocer y mantener la consistencia de los datos.
Algunos autores precisan una 5FN que hace referencia a que después de realizar esta normalización a través de uniones (JOIN) permita regresar a la data original de la cual partió.
1.- Determinar el problema a solucionar, la finalidad y los requerimientos.
Antes de comenzar un proyecto de Base de datos, es importante, determinar el eje a seguir para el diseño, ya que estas nos marcarán las pautas para tener un buen resultado.
2.- Modelado de Entidades
La idea es que se identifiquen los objetos de la base de datos, llamadas entidades.
Para el modelado de la base de datos se propone utilizar el “modelado de objetos”, ya que, la técnica propone una forma abstracta de pensamiento acerca de problemas a resolver, empleando conceptos del mundo real, y no conceptos técnicos informáticos.
En el proyecto se pueden identificar varios objetos que se relacionan y establecen un flujo de información, estos objetos se llegaran a transformar en tablas bidimensionales, las cuales son el fundamento de este tipo de base de datos relacional.
++A.- Definir entidades.++
Recordemos que las Entidades, son objetos o cosas que existen en nuestro alrededor, pensando en el proyecto ¿qué objetos intervienen en el proceso del proyecto?
Estos objetos surgen identificando todos los actores que tienen el proceso, posteriormente identifique las relaciones que tiene cada uno, sus responsabilidades, y el papel que tiene en el proceso.
++B.- Definir los atributos++
Recordemos que los objetos tienen apartados que son: identificador, atributos y métodos. Productos
Toda entidad tiene atributos que la describen, siendo el atributo las características de la Entidad.
.
3.- Modelado Relacional. Prototipo de BD sin normalizar.
Ahora bien, para el modelado ER, vamos a retomar las entidades, con sus respectivos atributos. En este paso hacemos énfasis en las relaciones de las entidades, mediante la cardinalidad, entendida por la cantidad de relaciones que tienen los objetos.
Para comprender la necesidad del proyecto se debe leer detenidamente y ver cómo interactúan los objetos y relaciones de conjuntos, delimitando la asociación.
Además, en el modelo ER, se utilizan figuras de relación y se hace uso de las claves principales y las claves foráneas.
++A) Diagrama E/R++
Diagrama de entidad- interrelación (E/R) perite representar gráficamente la estructura lógica de una base de datos. Para poder guiarnos y entender de mejor forma la base de datos a realizar.
Figuras:
• Rectángulos: entidades
• Elipsis: Atributos
• Rombos: Interrelaciones
• Líneas: enlazan los atributos a entidades, atributos a interrelaciones y entidades a interrelaciones.
++B) Cardinalidades++
La razón de cardinalidad, expresa el numero de entidades a las que otra entidad puede estar asociada por medio de una interrelación. Existen los siguientes tipos:
• Uno a uno (1:1).
• Uno a varios (1:N).
• Varios a uno (N:1) o la simétrica de la anterior.
• Varios a varios o muchos a muchos (N:M).
**4.- Base de datos Normalizada **
Continuamos con el paso de normalizar, ¿pero ¿qué es normalizar?
Para mejorar el desempeño de una base de datos, así como evitar redundancia en la información que contiene y en consecuencia, generar condiciones para un mejor diseño, se debe conocer las formas de normalización.
La normalización de datos es el proceso que permite refinar la construcción de modelos relacional con el objetivo de minimizar la redundancia de datos mediante ciertas normas y restricciones con el fin de evitar futuros problemas cuando nuestra base de datos sea mayor.
Su principal objetivo es reducir la redundancia de datos y simplificar las dependencias entre columnas, aplicándose de manera acumulativa.
Aplicación de Normalización
++a) Convertirlas en Tablas++
El modelado relacional, se deberá convertir en tablas, la siguiente imagen muestra las partes que la integran.
++b) Realizar algunos registros++
Para ayudarse a visualizar mejor los casos en los que estamos cayendo en redundancias, sirve hacer ejemplos de los registros, de esta manera nos podemos percatar en las situaciones donde tendremos problemas con la estructura de nuestra base de datos.
++c) Aplicaremos las reglas de Normalización++
----1FN: El valor de una columna debe ser una entidad atómica, indivisible, excluyendo así las dificultades que podría conllevar el tratamiento de un dato formado de varias partes.
----2FN: Una tabla se encuentra en 2FN cuando está en 1FN y no contiene dependencias parciales. Por consiguiente, una tabla 1FN automáticamente está en 2FN si su clave primaria está basada solamente en un atributo simple. Una tabla en 2FN aún puede contener dependencias transitivas.
----3FN: Cumple con la 1FN y 2FN y los campos que NO son clave, NO deben tener dependencias. Se debe seguir analizando la estructura de las tablas, para evitar que no haya registros con campos no dependientes.
----4FN: Cumple 1FN, 2FN, 3FN y los campos multivaluados se identifican por una clave única.
Muy buen resumen, más claro que esta última lectura. Super
Excelente resumen.. asi se consolida mejor lo aprendido
La normalización se emplea para hacer mas entendible los datos y para ello hay que entender y comprender el contexto general.
Se debe tener presente los siguientes conceptos
ENTIDAD (tabla)
CAMPO (Atributo de la tabla)
DATO (contenido del campo)
REGISTROS (filas dentro de una Tabla que contiene datos relacionados a los campos de la tabla)
ID (Identificador que se le asigna a un Registro para diferenciarlo de los demás),Por lo general suele ser la llave (o parte de ella) lo cual permite relacionar un registro con otro que se encuentre en otra Tabla cuyo identificador haga referencia al mismo registro y/o grupo de datos.
EJEMPLO
digamos que tienes una hoja de Excel con los datos Básicos de los estudiantes y los pagos que han realizado
Normalmente lo que harías en Excel es ir agregando una Columna Nueva para relacionar el nuevo pago (Columnas con encabezado en color Gris)
Ahora que estas aprendiendo Base de Datos sabes que esto no es Optimo y quieres normalizar y estructurar tus datos de forma adecuada
1. Entender La naturaleza de mis datos
- Viendo los datos puedo identificar que tengo información del ESTUDIANTE y de los PAGOS esto me indica que puedo crear 2 ENTIDADES
- También puedo analizar que la naturaleza de los datos que componen cada registro les permite ser cambiados o modificados en el tiempo, esto me indica que debo generar un IDENTIFICADOR el cual me permita relacionar e identificar el registro en cualquier momento
- La forma como actualmente se agrega cada pago me obligar a tener que estar alterando la TABLA, esto no se debe hacer, es necesario normalizarlo
2. Normalizando mis Datos
las formas normales en la práctica se suelen aplicar en conjunto
2.1. Asignación del Identificador
asigno el identificador del estudiante para diferenciar los registros antes de separar los DATOS en 2 ENTIDADES garantizando así que se mantenga su Integridad Referencial
2.2. Aplicando 1FN, 2FN,3FN Y 4FN
ya teniendo separadas las 2 ENTIDADES puedo realizar su respectiva normalización
2.2.1 Normalizando ENTIDAD ESTUDIANTES
Aquí podemos observar que el nombre del estudiante esta contenido en un solo CAMPO y lo adecuado es tenerlo separado
ya con la entidad normalizada podemos garantizar que si alguno de los campos cambia su contenido, esto no afecte a los demás campos y sus relaciones
2.2.2 Normalizando ENTIDAD PAGOS
Previamente se había identificado que para agregar un nuevo pago se agregaba una columna y la forma correcta es generar un registro relacionando el numero del pago
para solucionarlo se genera un registro por cada numero de pago y esta nueva estructura nos permite relacionar el estudiante con cada uno de sus numero de pago sin que esto nos altere la estructura de la TABLA
3. modelo Entidad Relación Normalizado
y este es el resultado con 2 ENTIDADES y una relación de 1 a muchos
espero sea de utilidad este aporte, saludos!!
hola, creo que podrias aplicar la 4FN para dejar pagos como una tabla y tener una tabla extra con las claves que seria la tabla PAGOS_REALIZADOS.
Muchas gracias, me ayudó a aterrizar el concepto
Yo lo entendí mas o menos así
1 Fn : Reduce las columnas redundantes
2Fn : Has que todo tenga un registro
3Fn : Ve que no haya atributos multivaluados (Ve si eso se puede quitar)
4 Fn : Has que todo sea único (Mirar las relaciones N:N)
Entendí tal cual como lo resumes.
Explicación simple y correcta!
¿Por qué se normalizan las bases de datos?
Evitar la redundancia de los datos.
Disminuir problemas de actualización de los datos en las tablas.
Proteger la integridad de los datos.
Facilitar el acceso e interpretación de los datos.
Reducir el tiempo y complejidad de revisión de las bases de datos.
Optimizar el espacio de almacenamiento.
Prevenir borrados indeseados de datos.
Excelente aporte, muchas gracias¡¡
A términos prácticos la normalización consiste en ir descomponiendo tu tabla en pequeñas tablas que hacen referencia a ciertas entidades que se empiezan a relacionar con otras, y acabamos relacionándolas por medio de su id, así las referenciamos, y esto trae muchas ventajas, de entre ellas, podemos cambiar un dato en un solo lugar y esto se propagará a todos los lugares a donde este apunte:D!
Genial!!!!
A mi forma de entender la tabla cursos tiene dos entidades que se deben separar
Por un lado se tiene el campo nivel_curso, que se puede formalizar en otra tabla llamada nivel_estudio, por si se requiere agregar mas niveles de estudios.
La tabla nivel_estudios se relacionaría con la tabla cursos por medio de su id
Hola comparto este video que me ayudo a entender mucho mejor:
Crack!!!. Esto me ayudó mas que el video y la lectura de aquí. Gracias
El ejemplo esta genial, aclaro las dudas que me habían quedado <3
Está excelente la explicación, queda todo más claro! No sé si sería ya abusar demasiado pero crearía una quinta tabla y la llamaría nivel_curso y sería así:
nivel_curso
id INTEGER PK
nivel VARCHAR(30) NN UNIQUE
Entonces haría una relación 1:N con la tabla cursos que quedaría finalmente:
cursos
id INTEGER PK
nivel_curso_id INTEGER FK
nombre_curso VARCHAR(30) NN UNIQUE
De hecho si seria interesante cada maestría tiene diferentes y variados cursos.
Básicamente debemos dividir el proyecto en secciones que no tengan datos repetidos y que sean accesibles unos con otros.
Creo que poder dominar este tema de FN requiere mucha práctica.
¿De casualidad alguien conocer alguna pagina donde se pueda practicar este tipo de problemas?
Donde te pongan el ejercicio y más adelante lo puedas encontrar ya resuelto para pura comprobación.
Saludos!
Formas Normales:
Primera forma normal (1FN):Con esta forma normal eliminamos los valores repetidos o no atómicos de nuestra base de datos. Cumple con las siguientes características:
Todos los datos son atómicos, todos los elementos del dominio son simples e indivisibles. Es decir dividimos (atomizamos) los elementos compuestos.
No hay variación del número de columnas. Las columnas deben ser las mismas para todos los registros. No hay registro que tenga más o menos columnas.
Los campos que no son calve deben ser identificados por los campos clave (dependencia funcional). Todo campo que no es clave debe identificarse por el campo que sí es clave.
Independencia en el orden tanto en las filas como en las columnas. Si los datos cambian de orden mo deben cambiar de significado, debemos ser capaces de reordenar los registros y las columnas sin cambiar el significado
Segunda forma normal (2FN): Esta forma normal nos ayuda a diferenciar los datos de diversas entidades. Cumplen con:
Cumple con 1FN
No existen dependencias parciales. Si tenemos datos que pertenecen a diversas entidades cada entidad debe tener un campo clave separado.
Todos los atributos que no son clave deben depender de una llave principal única
Tercera forma normal (3FN): En esta FN separamos conceptualmente entidades que no son dependientes. Cumple con las siguientes consideraciones:
Cumple la 2FN
No existe ninguna dependencia funcional transitiva en los atributos que no son clave. Aquellos datos que no pertenecen a la entidad deben tener independencia de las demás y les otorgamos un campo clave propio.
Cuarta Forma Normal (2FN): En esta FN atomizamos los datos multivaluados de manera que no tengamos datos repetidos en las columnas. Cumple con:
Se encuentra en 3FN
Los campos multivaluados se identifican de manera única. Eliminamos los campos repetidos en una entidad. Cada registro debe tener un contenido único. En caso de ser necesario repetir generamos una tabla pivote que contengan las llaves foráneas.
Aunque en apariencia la información se multiplicó, la hicimos más fácil de mantener y de reconocer a través de la computadora.
Nota:
Se considera una 5FN que hace referencia a que a través de uniones (JOIN) podamos regresar a la data original
Si normalizamos nuevamente y separamos la entidad curso de nivel.
Tendríamos una relacion Muchos a Muchos
Un curso tiene muchas materias
Una materia pertenece a muchos cursos
Tabla pivote cursos_materias
muy bien explicado. Si logras formar las relaciones graficamente, tendrias lo que falta a esta sesion :)
Si concuerdo con tu punto de vista.
En resumen, la normalización sirve para:
Facilitar el acceso e interpretación de los datos.
Reducir el tiempo y complejidad de revisión de las bases de datos.
Optimizar el espacio de almacenamiento.
Prevenir borrados indeseados de datos.
seguramente hay muchas ventajas más pero definitivamente es algo necesario
Algo que no se ha mencionado, quizás se haga más adelante. Es que por buenas practicas el nombre de las tablas debe ir en plural por ejemplo: "nombre_alumnos" y los campos o atributos de esa tabla en singular por ejemplo: "id_alumno, nombre_alumno, apellido_alumno, edad_alumno" y así.
Si se menciono [ero para los diagramas de entidad relación.
Si en efecto.
De hecho si revisa en detalle, aún es posible generar una tabla más que estaría relacionada con el nivel de los cursos que se están tomando, con esto se crearía una nueva Entidad llamada Nivel que tendría como atributos Maestría y Licenciatura.
Conceptualmente me confunde un poco, pero espero que en las siguientes clases ya llevandolo a la práctica todo sea tan claro como parece :)
Explicacion de normalizacion:
|
Primera forma normal (1FN):
*Atribubtosatomicos(Sin campos repetidos)
Luego de aplicar la primera forma normal: Entonces agregamos una llave foranea para identificar a cada estudiante y hacemos dos tablas para juanito y dos para pepito por que los doas estan viendo clases deacuerdo a su nivel de curso.
Segunda forma normal (2FN):
*Cumple 1FN y cada campo de la tabla debe depender de una clave unica
Luego de aplicar la segunda forma: En el siguiente ejemplo tenemos, que creamos una estrcutura para las materias, con un ID unico, de forma que el ID 1, 2 le pertenecen al mismo usuario pero el nombre o la asignatura de la materia cambia este tipo de cosas es lo que nos ayudan a entender la normalizacion pues que en la vida real el alumno y la materia no son una misma entidad y deben trabajar cada uno a parte
Tercera forma normal (3FN):
*Cumple 1FN y 2FN y los campos No son clave No debben tener dependencias
Luego de aplicar la tercera forma: Aqui separamos las entidades por ejemplo tenemos una entidad de alumnos que esta conformada por los alumnos, los cursos, pueden ser varios cursos y ademas no necesariamente tiene que tener a todos los alumnos o unos en especifico, puede variar. Por otra parte tenemos las materias que tambien son otra entidad y todo esto lo vamos a unir mediante a los ID de cada entidad
Cuarta forma normal (4FN):
*Cumple 1FN, 2FN y 3FN los campos multivaluados se identifican por una clave unica
Luego de aplicar la cuarta forma: Esto significa que a materias la vamos a separar nuevamente por que es un campo que tiene multivalores. Esto tambien aplica de esta forma por que en la vida real pueden existir muchas materias que tengan que ver con varios o pocos alumnos dependiendo del contexto, pero lo importante es que las materias como tal son entidades separadas a atributos por eran de multivalor.
IMPORTANTE Aunque parezca que estos pasos realizados son como mas rebuscados o sin mucho sentido, la finalidad de es que nuestro ordenador tenga una mejor ordenamiento de los datos que le vamos a pasar para tener un mayor tiempo de respuesta y nosotros como desarrolladores tener una jerarquia para un mejor orden del proyecto y evaluacion.