Normalización de Base de datos. La normalización es el proceso de organizar los datos en una base de datos. Esto incluye crear tablas y establecer relaciones entre las tablas según reglas diseñadas tanto para proteger los datos y para hacer que la base de datos sea más flexible eliminando redundancia y dependencias incoherentes. Los datos redundantes desperdician espacio en disco y crean problemas de mantenimiento. Si es necesario cambiar datos que aparecen en más de un sitio, el cambio deberá ser exactamente igual en todos estos sitios Las dependencias incoherentes pueden dificultar el acceso a los datos, ya que la ruta de acceso a los mismos puede estar rota o no encontrarse. Las bases de datos relacionales se normalizan para: Evitar la redundancia de los datos. Evitar problemas de actualización de los datos en las tablas. Proteger la integridad de los datos. En el modelo relacional es frecuente llamar tabla a una relación, aunque para que una tabla sea considerada como una relación tiene que cumplir con algunas restricciones: Cada tabla debe tener su nombre único. No puede haber dos filas iguales. No se permiten los duplicados. Todos los datos en una columna deben ser del mismo tipo. Terminología relacional equivalente Relación = tabla o archivo Registro = registro, fila o renglón Atributo = columna o campo código de identificación Clave Candidata = superclave mínima Clave Primaria = clave candidata elegida Clave Ajena = clave externa o clave foránea Clave = llave o Clave Alternativa = clave secundaria Dependencia Multivaluada = dependencia multivalor RDBMS = Del inglés Relational Data Base Manager System que significa, Sistema Gestor de Bases de Datos Relacionales. 1FN = Significa, Primera Forma Normal o 1NF del inglés First Normal Form. Claves Clave primaria es aquella columna (o conjunto de columnas) que identifica únicamente a una fila. La clave primaria es un identificador que va a ser siempre único para cada fila. Se acostumbra a poner la clave primaria como la primera columna de la tabla pero es más una conveniencia que una obligación. Muchas veces la clave primaria es numérica auto-incrementada, es decir, generada mediante una secuencia numérica incrementada automáticamente cada vez que se inserta una fila. En una tabla puede que tengamos más de una columna que puede ser clave primaria por sí misma. En ese caso se puede escoger una para ser la clave primaria y las demás claves serán claves candidatas. Una clave ajena (foreign key o clave foránea) es aquella columna que existiendo como dependiente en una tabla, es a su vez clave primaria en otra tabla. Una clave alternativa es aquella clave candidata que no ha sido seleccionada como clave primaria, pero que también puede identificar de forma única a una fila dentro de una tabla. Una clave compuesta es una clave que está compuesta por más de una columna. La visualización de todas las posibles claves candidatas en una tabla ayudan a su optimización. Podemos usar cualquiera de las dos opciones o incluso todas a la vez como clave primaria, pero es más óptimo en la mayoría de sistemas la elección del menor número de columnas como clave primaria. Formas Normales Existen unas cuantas reglas para la normalización de bases de datos. Cada regla se denomina "forma normal". Si se cumple la primera regla, se dice que la base de datos está en la "primera forma normal". Si se cumplen las tres primeras reglas, se considera que la base de datos está en la "tercera forma normal". Aunque existen otros niveles de normalización, se considera que la tercera forma normal es el máximo nivel necesario para la mayoría de las aplicaciones. Las formas normales son aplicadas a las tablas de una base de datos. Decir que una base de datos está en la forma normal N es decir que todas sus tablas están en la forma normal N. En general, las primeras tres formas normales son suficientes para cubrir las necesidades de la mayoría de las bases de datos. El creador de estas 3 primeras formas normales (o reglas) fue Edgar F.Codd. Primera Forma Normal (1FN) Crear una tabla diferente para cada conjunto de datos relacionados. Identificar cada conjunto de datos relacionados mediante una clave principal .No utilizar varios campos en una única tabla para almacenar datos similares. Esta forma normal elimina los valores repetidos dentro de una BD. Segunda Forma Normal (2FN) Crear tablas independientes para conjuntos de valores que se apliquen a varios registros. Relacionar dichas tablas mediante una clave externa. Los registros tan sólo deben depender de la clave principal de una tabla (si es necesario, puede ser una clave compuesta). Tercera Forma Normal (3FN) Eliminar los campos que no dependan de la clave. Los valores de un registro que no forman parte de la clave de dicho registro no pertenecen a esa tabla. En general, siempre que el contenido de un grupo de campos se puede aplicar a más de un registro de la tabla, debe tener en cuenta la posibilidad de incluir dichos campos en una tabla independiente. Una posibilidad es aplicar la tercera forma normal únicamente a los datos que cambien con frecuencia. Si aún quedan campos dependientes, diseñe la aplicación de forma que solicite al usuario que compruebe todos los campos relacionados cuando se produzca un cambio en cualquiera de ellos. Además el esquema debe cumplir necesariamente, con las condiciones de segunda forma normal. Otras formas de normalización Existe una cuarta forma normal, llamada también Forma normal de Boyce Codd (BCNF), y una quinta forma normal, pero pocas veces se consideran prácticas en un diseño. La omisión de estas reglas puede dar como resultado una tabla que no sea perfecta, pero no debería afectar a su funcionamiento. Normalizar una tabla de ejemplo En los pasos siguientes se demuestra el proceso de normalización de una tabla de alumnos ficticia. Tabla sin normalizar: # Alumno Profesor Salón Asignado Clase 1 Clase 2 Clase 3 1022 Darío Gómez 412 07-101 143-01 159-02 4123 Juan Zapeta 216 01-201 02-211 01-214 Primera forma normal: Sin grupos repetidos Tablas deben tener sólo dos dimensiones. Como cada alumno está inscrito en varias clases, éstas deben aparecer en una tabla independiente. Los campos Clase1, Clase2 y Clase3 de los registros anteriores indican que existe un problema en el diseño. En las hojas de cálculo se utiliza con frecuencia la tercera dimensión, pero no debe hacerse en las tablas. Otra forma de ver el problema es considerar una relación de uno a varios; no se debe poner en la misma tabla el lado en el que hay un elemento y el lado en el que hay varios elementos. En su lugar, cree otra tabla en la primera forma normal eliminando el grupo de repetición (Nº clase), como se muestra a continuación: Alumno # Profesor Salón Asignado Nº clase 1022 Darío Gómez 412 07-101 1022 Darío Gómez 412 143-01 1022 Darío Gómez 412 159-02 4123 Juan Zapeta 216 01-201 4123 Juan Zapeta 216 02-211 4123 Juan Zapeta 216 01-214 Segunda forma normal: Eliminar datos redundantes Tenga en cuenta los varios valores de Nº clase para cada valor de Nº alumno en la tabla anterior. Clase # no es funcionalmente dependiente de Nº alumno (clave principal), por lo que esta relación no es normal segundo formulario. Las dos tablas siguientes muestran la segunda forma normal: Alumnos # Alumno Profesor Salón Asignado 1022 Darío Gómez 412 4123 Juan Zapeta Registro # Alumno Nº clase 1022 07-101 1022 143-01 1022 159-02 4123 01-201 4123 02-211 216 4123 01-214 Tercera forma normal: Eliminar datos no dependientes en la clave. En el último ejemplo anticipado-sala (número de oficina del Asesor) depende funcionalmente en el atributo de Asesor. La solución es mover dicho atributo de la tabla Alumnos a la tabla Personal, como se muestra a continuación: Alumnos # Alumno Profesor 1022 Darío Gómez 4123 Juan Zapeta Profesores Nombre Salón Departamento Darío Gómez 412 42 Juan Zapeta 42 216