GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES NORMALIZACIÓN DE BASES DE DATOS RELACIONALES El proceso de normalización fue introducido por Codd en el año 1974. Busca encontrar errores en el diseño de un esquema relacional debido a la presencia de redundancias que pueden originar anomalías de operaciones. Para eliminar los problemas, la normalización divide una relacion en dos o más relaciones que garanticen la eliminacion de anomalías, a costa de crear redundancia SOLO a nivel de claves. La teoría de la normalización tiene como fundamento el concepto de formas normales. Una relación está en una determinada forma normal si satisface un conjunto de restricciones. Codd introdujo tres formas normales como solución a las anomalías de operaciones: PRIMERA FORMA NORMAL (1FN), SEGUNDA FORMA NORMAL(2FN) y TERCERA FORMA NORMAL(3FN). Más adelante Boyce y Codd introducjeron una forma normal más restrictiva a la que llamaron FORMA NORMAL DE BOYCE Y CODD (BCNF). Posteriomente se ha extendido la teoría de la normalización para incluir otros tipos de dependencias funcionales y se definieron la CUARTA FORMA NORMAL (4FN), QUINTA FORMA NORMAL(5F) y otras formas normales. Se estudiarán las tres primeras formas normales y la forma normal de Boyce y Codd, porque son realmente las más utilizadas. Cuanto más alta sea la forma normal en la que se encuentran los esquemas de relación, menores serán los problemas que aparecerán en el mantenimiento de la base de datos. Para avanzar de una forma normal a otra, deben verificarse las restricciones de la actual y de la nueva forma normal. Una de las herramientas más utilizadas para alcanzar una nueva forma normal es la descomposición que debe tener las siguientes características: Debe realizarse sin pérdida Deben mantenerse las dependencias funcionales Se debe evitar o reducir hasta donde sea posible la redundancia. La definicion original de las formas normales tomaba en cuenta SOLO la clave primaria de una relación para efectuar la normalización y la verificación de cumplimiento de formas normales. Posteriormente, se cambió toda la teoría a una definición basada sobre todas las claves candidatas de una relación. Ésto se debe al hecho singular de que durante la vida de una base de datos puede ser cambiada la clave primaria original por otra clave candidata y por lo tanto, si la normalización se efectuó considerando sólo la clave primaria puede suceder que una base de datos inicialmente normalizada pudiese aparecer como desnormalizada al cambiar la definición de la clave primaria. Página 1 de 7 GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES DEPENDENCIAS FUNCIONALES Una dependencia funcional es una conexión entre uno o más atributos. Se dice que un conjunto de atributos (Y) depende funcionalmente de otro conjunto de atributos (X) si para cada valor de X hay un único valor posible para Y. Simbólicamente se denota por X→Y. Al conjunto X del que depende funcionalmente el conjunto Y se le llama determinante. Al conjunto Y se le llama implicado. EJEMPLO: En la relación TRABAJADOR, el campo CEDULA es la clave primaria, por lo tanto, actúa como determinante. Como las dependencias funcionales se establecen con los otros campos que no son clave (implicados), habría dos opciones para establecer dependencias: 1. Cedula −> nombre El NOMBRE depende funcionalmente de la cédula porque para un número concreto de cedula sólo hay un nombre posible. 2. Cedula −> ciudad La CIUDAD NO depende funcionalmente de la cédula porque para un mismo número de cédula puede haber más de una ciudad. De acuerdo con lo anterior, en la relacion TRABAJADOR solo existe una dependencia funcional: Cedula → nombre Determinante implicado La anterior dependencia se puede leer de las siguientes formas: nombre es funcionalmente dependiente de cédula o cédula determina a nombre TIPOS DE DEPENDENCIAS FUNCIONALES: Dependencia funcional completa Un conjunto de atributos (Y) tiene una dependencia funcional completa sobre otro conjunto de atributos (X) si Y tiene dependencia funcional de X y además no se puede obtener de X un conjunto de atributos más pequeño que consiga una dependencia funcional de Y. Ejemplo: CALIFICACIONES Cod_estudiante Cod_asignatura nota 10212 10909 28989 10989 12 12 10 11 4.6 4.7 2.7 3.2 En la relación CALIFICACIONES la clave primaria está compuesta por los atributos Cod_estudiante y Cod_asignatura. Se puede establecer la dependencia funcional: Codigo_estudiante,codigo_asignatura ⇒ nota porque la nota depende de ambos atributos de clave primaria. No hay dependencia parcial con alguno de los comonentes de la clave primaria. Página 2 de 7 GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES Dependencia funcional elemental Se produce cuando X e Y forman una dependencia funcional completa y además Y es un único atributo. Cedula → nombre Dependencia funcional transitiva Se produce cuando tenemos tres conjuntos de atributos X, Y y Z. Y depende funcionalmente de X (X→Y), Z depende funcionalmente de Y (Y→Z). Además X no depende funcionalmente de Y. Entonces ocurre que X produce una dependencia funcional transitiva sobre Z. Ejemplo 1: Numero_clase → codigo_tutor Codigo_tutor→Codigo_departamento Entonces: Numero_clase −→codigo_departamento El código del departamento depende transitivamente del código de la clase. NORMALIZACIÓN – Formas Normales PRIMERA FORMA NORMAL(1FN) Una tabla se encuenta en primera forma normal cuando cumple con las siguientes condiciones: 1. Los valores de los atributos deben ser atómicos1. 2. Dos filas no deben ser idénticas -una tabla no debe contener filas repetidas; si existen deben eliminarse asegurándose de que cada fila defina una sola entidad. Para lograrlo hay que asegurarse de que cada registro(fila) esté identificado a través de una clave primaria-. 3. No hay valores nulos 4. Se impide que un atributo de una fila tome más de un valor -evitar atributos multivalorados-. Esta forma normal elimina los valores repetidos dentro de una BD EJEMPLO: En la relación EMPLEADOS, se puede ver que el atributo emails contiene más de un valor, por lo que viola 1FN. La solución es crear una nueva tabla con los atributos email e identificacion: Clave primaria → identificación clave primaria → identificacion, emails. 1 Un dominio es atómico si los elementos del dominio se consideran unidades indivisibles. Por ejemplo, el conjunto de los enteros es un dominio atómico.. Página 3 de 7 GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES SEGUNDA FORMA NORMAL (2FN) Una tabla se encuenta en segunda forma normal cuando cumple con las siguientes condiciones: - Está en 1FN - Cada atributo que no sea clave (no-primo), es totalmente dependiente de toda clave(primo). - Toda clave principal debe hacer dependientes al resto de los atributos. Si hay atributos que dependen solo de parte de la clave, entonces esa parte de la clave y esos atributos formarán otra tabla. EJEMPLO 1: Clave primaria: codigo, cod_curso Dependencias funcionales: codigo,cod_curso → nota Codigo → nombre, apellido La tabla estudiantes no está en 2FN porque no todos los atributos no-primos dependen de la clave primaria. En la relación ESTUDIANTES, los atributos no-primos nombre y apellido dependen parcialmente de la clave codigo,cod_curso proque la dependencia funcional Codigo → nombre, apellido es parcial. Por lo tanto ESTUDIANTES no está en 2FN. Para que la relación ESTUDIANTES alcance la 2FN se debe descomponer considerando que: - La unica clave de estudiantes es codigo,cod_curso - Los atributos no-primos de estudiantes son nombre, apellido y nota - Para el atributo no-primo Nota, hay una dpependencia total con la clave codigo, cod_curso. - Para los atributos no-primos nombre, apellido existen dependencias funcionales parciales de codigo,cod_curso lo que obliga a descomponer ESTUDIANTES en dos relaciones: ESTUDIANTE = {codigo, nombre, apellido} con dependencias funcionales : codigo → nombre codigo→apellido ASISTENCIA_CURSOS = {codigo, Cod_curso, nota} Con dependencias funcionales: codigo, cod_curso → nota Página 4 de 7 GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES EJEMPLO 2: {DNI, ID_PROYECTO} HORAS_TRABAJO Porque con el DNI de un empleado y el ID de un proyecto sabemos cuántas horas de trabajo por semana trabaja un empleado en dicho proyecto. Es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO HORAS_TRABAJO mantienen la dependencia por separado. Sin embargo {DNI, ID_PROYECTO} NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia. TERCERA FORMA NORMAL (3FN) Una relacion está en tercera forma normal si cumple que está en segunda forma normal y ningún atributo no-primo depende transitivamente de alguna clave. EJEMPLO Considérese la relación ESTUDIANTE con clave primaria CODIGO y sus demás atributos : ESTUDIANTE = {codigo, nombre, codigo_carrera, descripcion_carrera} codigo 10219 10982 17687 21234 Dependencias funcionales: nombre Ana Juan Beto Diana ESTUDIANTE Codigo_carrera 12 13 11 13 Descripcion_carrera Ingeniería alimentos Ingeniería industrial Ingeniería sistemas Ingeniería industrial a) codigo → nombre b) codigo → codigo_carrera c) codigo →descripcion_carrera Primero hay que verificar si ESTUDIANTE se encuentra en 2FN: Los atributos no-primos de estudiante son: nombre, codigo_carrera,descripcion_carrera. La única clave de estudiante es codigo y existen dependencias funcionales a, b y c que son dependencias totales porque la clave primaria está compuesta por un solo abtributo. - no puede quitarse ningún atributo determinante-. En este caso estudiante está en 2FN. Ahora se verifica si ESTUDIANTE está en 3FN: A parte de las dependencias funcionales a,b y c, se puede definir otra dependencia funcional que no involucra la clave primaria: d) codigo_carrera →descripcion_carrera Tomando en cuenta las dependencias funcionales b y d, y considerando que NO se da la dependencia funcional codigo_carrera → codigo, se puede decir que descripcion_carrera depende transitivamente de codigo a través de codigo_carrera, por lo que ESTUDIANTE no está en 3FN. codigo → codigo_carrera codigo_carrera →descripcion_carrera por lo tanto… codigo − →descripcion_carrera Para que ESTUDIANTES esté en 3FN es necesario descomponerla de la siguiente manera: Página 5 de 7 GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES ESTUDIANTE = {codigo, nombre, codigo_carrera} Con dependencias funcionales : codigo →nombre codigo →codigo_carrera CARRERA = { codigo_carrera,descripcion_carrera} Con dependencias funcionales : codigo_carrera →descripcion_carrera. codigo 10219 10982 17687 ESTUDIANTE nombre Codigo_carrera Ana 12 Juan 13 Beto 11 Codigo_carrera 12 13 11 CARRERA Descripcion_carrera Ingeniería alimentos Ingeniería industrial Ingeniería sistemas FORMA NORMAL DE BOYCE Y CODD (BCNF) Una relación está en BCNF si está en 3FN y todo determinante es una clave candidata. EJEMPLO 1: Considere la relación PACIENTE con los atributos: PACIENTE = {num_historia, nombre, dirección, cédula} Con las dependencias funcionales: Num_historia →nombre, dirección, cedula Cédula →num_historia, nombre, dirección Encontramos que existen dos claves candidatas (num_historia, cédula) y dos atributos no-primos (nombre, dirección). PACIENTE está en FNBC porque los determinantes de todas sus dependencias funcionales (num_historia, cedula) son claves candidatas. EJEMPLO 2: Considérese la relación TUTORIAS = {código-tutoria, nombre-asignatura_tutor} Con dependencias funcionales: código_tutoria,nombre-asignatura →tutor tutor → nombre-asignatura. TUTORIAS está en tercera forma normal (no hay dependencias transitivas), pero no está en forma Boyce y Codd, porque el determinante tutor no es clave candidata. La redundancia de la asignatura se puede resolver descomponiendo la relación: TUTORIAS = {codigo_tutoria, tutor} ASIGNATURAS_TUTOR = { tutor ,nombre-asignatura } Algunas relaciones no se pueden llevar a al BCNF manteniendo las dependencias funcionales. Como regla general, se debe tratar siempre la BCNF si es posible, es preferible preservar las dependencias funcionales y dejar una relación en 3FN. Página 6 de 7 GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES REFERENCIAS BIBLIOGRÁFICAS https://www.u-cursos.cl/diplomados/2009/0/DGIINTELNEG/1/material_docente/objeto/218445 http://www.utplonline.edu.ec/cursos/diretorio/apoio_7069_16206/1FN.pdf http://www.jorgesanchez.net/bd/bdrelacional.pdf http://es.wikipedia.org/wiki/Normalizaci%C3%B3n_de_bases_de_datos Página 7 de 7