31
El término normalización se refiere a la manera en que los atributos son agrupados en los esquemas de relaciones de una base de datos, a fin de evitar anomalías y problemas que pueden ocurrir con los datos. JUAN I NG E N IE R IA M 4500

Curso BD (05-1) Normalizacion1

  • Upload
    adrian

  • View
    219

  • Download
    4

Embed Size (px)

DESCRIPTION

Curso de normalizacion 2

Citation preview

Page 1: Curso BD (05-1) Normalizacion1

El término normalización se refiere a la manera en que los atributos son agrupados en los esquemas de relaciones de una base de datos, a fin de evitar anomalías y problemas que pueden ocurrir con los datos. JU

AN

ING

EN

IER

IA

M

4500

Page 2: Curso BD (05-1) Normalizacion1

Cuando se agrupa atributos para formar un esquema de relación, buscaremos que exista un significado asociado a los atributos escogidos.

La semántica especifica que relación hay entre los valores de los atributos de una fila.

Cuanto más fácil sea explicar la semántica de la relación, mejor será el diseño del esquema correspondiente.

Page 3: Curso BD (05-1) Normalizacion1

EJEMPLO :

El significado del esquema de relación empleado es sencillo : cada fila representa a un empleado, con valores para su código, nombre, fecha de nacimiento, sexo, sueldo y para el número de departamento al que pertenece (numDep). El atributo numDep es una clave foránea que representa un vínculo implícito entre empleado y departamento, es decir un empleado pertenece a un departamento.

numDep nom codJefefe fechIniJefe

DEPARTAMENTO

codEm nom fechNac direc sexo suel numDep

EMPLEADO

Page 4: Curso BD (05-1) Normalizacion1

Son problemas que se presentan en el manejo de los datos, ocasionados por un mal diseño de la base de datos. Estas anomalías pueden clasificarse en :

Anomalías de Inserción

Anomalías de Eliminación

Anomalías de Modificación

Page 5: Curso BD (05-1) Normalizacion1

Aquí vemos un mal diseño, donde hay datos de empleado y de departamento juntos.

codEm nom fechNac direc suel nDep nomDep codJefe

EMPLEADO

100 Soler Ana 10-06-65 Flores 129 3400 5 Ingeniería 800

200 Alva Juan 19-03-67 Valles 722 6200 5 Ingeniería 800

250 Jobe Alan 11-09-69 Mar 1824 3600 4 Ventas 900

300 Vall Kate 05-02-75 Jaén 181 2400 4 Ventas 900

800 Com Ivan 15-03-72 Grau 485 7600 5 Ingeniería 999

900 Kori Rony 07-12-59 Lomas 18 7200 4 Ventas 999

999 Pita Inés 25-03-72 Liz 1151 9500 1 Gerencia 999

Datos del empleado

Datos del departamento

A continuación veremos mediante dos casos, los problemas derivados con la inserción :

Page 6: Curso BD (05-1) Normalizacion1

INSERCIóN DE UN NUEVO EMPLEADO : Al insertar un nuevo empleado, debemos también incluir los atributos del departamento al que pertenece, en caso el empleado todavía no sea asignado a ningún departamento colocaremos nulos.El problema que puede presentarse es cuando ingresemos mal los datos del departamento de algún empleado. Así tendremos empleados que trabajan en el mismo departamento, donde la información del departamento es inconsistente.

codEm nom fechNac direc suel nDep nomDep codJefe

EMPLEADO

100 Soler Ana 10-06-65 Flores 129 3400 5 Ingeniería 800

200 Alva Juan 19-03-67 Valles 722 6200 5 Ingeniería 800

250 Jobe Alan 11-09-69 Mar 1824 3600 4 Ventas 900

300 Vall Kate 05-02-75 Jaén 181 2400 4 Ventas 900

800 Com Ivan 15-03-72 Grau 485 7600 5 Ingeniería 999

900 Kori Rony 07-12-59 Lomas 18 7200 4 Ventas 999

999 Pita Inés 25-03-72 Liz 1151 9500 1 Gerencia 999

350 More Ann 15-11-75 Onda 156 3500 5 Ventas 800

malmal

Page 7: Curso BD (05-1) Normalizacion1

INSERCIóN DE UN NUEVO DEPARTAMENTO : cuando se inserta un nuevo departamento, debemos tener en cuenta que todavía no tiene empleados . Por tanto debemos colocar valores nulos en los atributos de empleado

Un problemaUn problema es que la clave primaria codEm del empleado no puede ser nulaOtra anomalíaOtra anomalía es que al querer eliminar un departamento se eliminarán tambien los empleados.

codEm nom fechNac direc suel nDep nomDep codJefe

EMPLEADO

100 Soler Ana 10-06-65 Flores 129 3400 5 Ingeniería 800

200 Alva Juan 19-03-67 Valles 722 6200 5 Ingeniería 800

250 Jobe Alan 11-09-69 Mar 1824 3600 4 Ventas 900

300 Vall Kate 05-02-75 Jaén 181 2400 4 Ventas 900

800 Com Ivan 15-03-72 Grau 485 7600 5 Ingeniería 999

900 Kori Rony 07-12-59 Lomas 18 7200 4 Ventas 999

999 Pita Inés 25-03-72 Liz 1151 9500 1 Gerencia 999

7 Finanzas 950

nulosnulos Nuevo Nuevo departamentodepartamento

Page 8: Curso BD (05-1) Normalizacion1

Este problema se relaciona con el segundo caso de anomalía de inserción. Por ejemplo, si en un departamento trabajan tres empleados y estos deciden renunciar, como es natural debemos eliminarlos de la relación, ocurrirá entonces que se perderá toda la información de ese departamento.

codEm nom fechNac direc suel nDep nomDep codJefe

EMPLEADO

100 Soler Ana 10-06-65 Flores 129 3400 5 Ingeniería 800

200 Alva Juan 19-03-67 Valles 722 6200 5 Ingeniería 800

250 Jobe Alan 11-09-69 Mar 1824 3600 4 Ventas 900

300 Vall Kate 05-02-75 Jaén 181 2400 4 Ventas 900

800 Com Ivan 15-03-72 Grau 485 7600 5 Ingeniería 999

900 Kori Rony 07-12-59 Lomas 18 7200 4 Ventas 999

999 Pita Inés 25-03-72 Liz 1151 9500 1 Gerencia 999

codEm nom fechNac direc suel nDep nomDep codJefe

100 Soler Ana 10-06-65 Flores 129 3400 5 Ingeniería 800

200 Alva Juan 19-03-67 Valles 722 6200 5 Ingeniería 800

800 Com Ivan 15-03-72 Grau 485 7600 5 Ingeniería 999

999 Pita Inés 25-03-72 Liz 1151 9500 1 Gerencia 999

Ventas

Ventas

Ventas

Page 9: Curso BD (05-1) Normalizacion1

En el ejemplo dado, si alteramos el valor de alguno de los atributos de un departamento ( por ejemplo el código del jefe de Ingeniería de Ana soler )

codEm nom fechNac direc suel nDep nomDep codJefe

100 Soler Ana 10-06-65 Flores 129 3400 5 Ingeniería 800

950

Nos veríamos obligados a actualizar todas las tuplas de todos los empleados del departamento de Ingeniería. De lo contrario la base de datos se tornaría inconsistente.

SOLUCION A LAS ANOMALIAS SOLUCION A LAS ANOMALIAS : Descomponer la relación, separando la parte que es responsable de la generación de las anomalías. En este ejemplo serían los atributos del departamento que pasarían a formar una nueva relación :

numDep nomDep codJefefe

DEPARTAMENTO

codEm nom fechNac direc suel nDep

EMPLEADO

Asegurarse de crear el vínculo necesario :

FK - PK

Page 10: Curso BD (05-1) Normalizacion1

Fue Edgar F. Codd quien en 1972 propuso el proceso de normalización, así cualquier esquema de relación se puede someter a una serie de pruebas para certificar si pertenece o no a cierta forma normal, que originalmente fueron tres : primera, segunda y tercera formas normales.

Posteriormente Boyce y Codd replantearon la tercera forma normal que se conoce hoy como Boice - Codd Norm Form ( BCNF). La segunda y tercera formas se fundamentan en el concepto de dependencias funcionales.

Después se formularon la cuarta y quinta forma normal, basados en dependencias multivaluadas y dependencias de reunión.

Page 11: Curso BD (05-1) Normalizacion1

Se implementó para prohibir atributos compuestos, multivaluados y sus combinaciones. Entonces debemos evitar grupos repetitivos de datos.

EJEMPLO :EJEMPLO :

numDep nomDep codJefefe lugaresDep

DEPARTAMENTO

Un departamento puede estar distribuido en varios lugares. Por ejemplo el Departamento de Ingeniería ( numDep=5) puede tener oficinas en Cuzco y Tacna (lugaresDep)

numDep nomDep codJefefe lugaresDep

5 Ingeniería 400 Tacna

5 Ingeniería 400 Cuzco

4 Administración 200 Trujillo

El atributo multivaluado obliga a replicar la información del departamento,

generando redundancia. Esta solución ya esta en 1FN , pero no es aceptable

porque genera anomalías de modificación.

Para este ejemplo el esquema

departamento no esta en

1FN

Grupo Grupo repetitivorepetitivo

Page 12: Curso BD (05-1) Normalizacion1

LA SOLUCIÓN :LA SOLUCIÓN :

Es eliminar de la relación departamento el atributo lugaresDep ( grupo repetitivo) que viola la 1FN y colocarlo en otra relación aparte que llamaríamos lugares_depa . Esta nueva relación tendría como atributos : la clave primaria de la relación departamento ( para asegurar el vínculo entre estas dos relaciones ) y lugarDep ( contiene los nombres de los lugares )

La clave primaria de esta nueva relación es la combinación :

{ numDep , lugarDep }

DEPARTAMENTO

numDep nomDep codJefefe

numDep lugarDep

LUGARES_DEPA

numDep nomDep codJefefe

5 Ingeniería 400

4 Administración 200

DEPARTAMENTO

numDep lugarDep

4 Trujillo

5 Tacna

5 Cuzco

LUGARES_DEPA

Page 13: Curso BD (05-1) Normalizacion1

EJEMPLO :EJEMPLO :

OBRERO

codObr nom fechNac direc jornal codJefe oficio añosExp

Se tiene el esquema OBRERO. Cada obrero puede tener mas de un oficio, así, el obrero Jorge Huamaní es carpintero, albañil y pintor y posee 3, 8 y 2 años de experiencia en esos oficios.Esto quiere decir que los atributos oficio y añosExp forman una unidad multivaluada, con lo que se esta violando la 1FNDicho de otro modo {oficio, añosExp} ocurren varias veces en una tupla. De esta forma la tupla ya no es plana.

Grupo Grupo repetitivorepetitivo

OBRERO

codObr nom fechNac direc jornal codJefe oficio añosExp

300 Huamaní Jorge 10-05-67 Surco 25 800 carpintero 3

300 Huamaní Jorge 10-05-67 Surco 25 800 albañil 3

300 Huamaní Jorge 10-05-67 Surco 25 800 pintor 2

350 Sulca Américo 22-11-70 Comas 30 900 electrónico 5

Page 14: Curso BD (05-1) Normalizacion1

SOLUCION :SOLUCION :

Es eliminar el grupo repetitivo {oficio, añosExp} de la relación obrero, que viola la 1FN y colocarlo en otra relación aparte que llamaríamos habilidades . Esta nueva relación tendría como atributos : la clave primaria codObr de la relación obrero ( para asegurar el vínculo entre estas dos relaciones ) , además de oficio y añosExp.La clave primaria de la nueva relación habilidadeshabilidades estaría conformada por :

{ codObr , oficio }

OBRERO

codObr nom fechNac direc jornal codJefe

codObrcodObr oficiooficio añosExp

HABILIDADES

Page 15: Curso BD (05-1) Normalizacion1

Sea el esquema de relación R :

R (( A1 , A2 , A3 , . . . Ak , Ak+1 , . . . Am , Am+1 , . . . At , At+1 , . . . An-1 , An ))

x yY los subconjuntos

Se dice que Y depende funcionalmentedepende funcionalmente de X , ó que X determina Y

x y

Si y solo si , cada valor de X tiene asociado en todo momento un únicoun único valor de Y

ó que X implica Yimplicante

implicado

Page 16: Curso BD (05-1) Normalizacion1

EJEMPLO : EJEMPLO : Tenemos la relación :

LIBRO ( cod_Lib, titulo, editorial )

Se puede decir que el código de un libro determina su título.

GRAFICAMENTE : GRAFICAMENTE : Podemos mostrar gráficamente la dependencia funcional :

Cod_Lib

Cod_Lector

Titulo , editorial

Fech_prestamo , fecha_devol

nombre , direc , fono

determina

determina

determina

Aquí se dice que titulo depende funcionalmente de codLibtitulo depende funcionalmente de codLib

Este concepto de dependencia funcional también nos dice que el titulo es una información acerca del libro o también que para algún código de libro existe un único título que le corresponde.

Page 17: Curso BD (05-1) Normalizacion1

EJEMPLO : EJEMPLO : Veamos las DFDF en el siguiente esquema de relación :

codEmp numProy nomEmp nomProy lugarProy

EMP_PROY

codEmp nomEmp

numProy { nomProy , lugarProy }Se lee :Se lee :

EMP_PROY ( codEmp, numProy, nomEmp, nomProy, lugarProy )

El valor del número de proyecto ( numProy ) determina de manera única el nombre del proyecto ( nomProy ) y su lugar ( lugarProy ).

El valor de código del empleado ( codEmp ) determina de manera única el nombre de ese empleado ( nomEmp ). Para un codEmp existe un único nombre de empleado.

Page 18: Curso BD (05-1) Normalizacion1

EJEMPLO : EJEMPLO : Veamos las DFDF en este otro esquema de relación :

codEmp nomEmp fechNac direc numDep nomDep codJefe

EMP_DEPTO

codEmp { nomEmp , fechNac , direc }

numDep { nomDep , codJefe }

EMP_DEPTO ( codEmp, nomEmp, fechNac, direc, numDep, nomDep. codJefe )

Page 19: Curso BD (05-1) Normalizacion1

EJEMPLO : EJEMPLO : Veamos cuando no existe dependencia funcional :

PROFESOR CURSO TEXTOBASE

Canales Julio Algoritmos II Cairo

Canales Julio Base de Datos Korth

Arias Freud Visual Basic Joyanes

Pacheco Rosa Leng. Prog I Vasquez

DICTAR

Se puede decir que profesor determina funcionalmente curso ?

RESPUESTA : RESPUESTA :

El hecho de que Canales Julio dicta Algoritmos II así como Base de Datos nos lleva a concluir que profesor no determina funcionalmente curso

Page 20: Curso BD (05-1) Normalizacion1

EJEMPLO : EJEMPLO : Veamos cuando no existe dependencia funcional :

Código de empleado (codEmp) no es funcionalmente dependiente de sueldo, porque mas de un empleado podría tener el mismo sueldo

codEmp numProy nomEmp sueldo nomProy fechFin

EMPLE-PROY

codEmp no es funcionalmente dependiente de numProy, ya que mas de un empleado puede trabajar para el mismo proyecto

EMP_PROY ( codEmp, numProy, nomEmp, sueldo, nomProy, fechFin )

Pero fecha de fin de proyecto ( fechFin) si es funcionalmente dependiente de número de proyecto (numProy)

Page 21: Curso BD (05-1) Normalizacion1

x y

Una simple dependencia funcional se define así :

Si X es un subconjunto de dos atributos : X ( X1 , X2 )

Se dice que Y tiene dependencia funcional completa de X si depende funcionalmente de X pero no depende de X1 ni de X2 , esto es :

x y

x1 y

x2 y

Lo que se representa como :

x y

Conocida también

como TOTAL

Page 22: Curso BD (05-1) Normalizacion1

EJEMPLO : EJEMPLO : Veamos las DFDF en el siguiente esquema de relación :

codEmp numProy horas nomEmp nomProy lugarProy

EMP_PROY

codEmp nomEmp

numProy { nomProy , lugarProy }

La combinación de valores de ( codEmp ) y ( numProy ) determinan de manera única el número de horas ( horas ) que el empleado trabaja en un proyecto cada semana. Ni código de empleado, ni tampoco número de proyecto, determinan por si solos, las horas trabajadas, ya que un empleado puede tener diferentes horas trabajadas en diferentes proyectos, asi como un proyecto tiene diversas horas de trabajo de diferentes empleados. Por tanto, respecto al atributo HORAS tenemos una dependencia funcional completa :

{ codEmp , numProy } horas

Dependencia funcional completa

Dependencia funcional parcial

Dependencias funcionales parciales

Page 23: Curso BD (05-1) Normalizacion1

EJEMPLO : EJEMPLO : Analizemos el siguiente esquema de relación :

codLibcodLib codLectorcodLector titulo editorial nombre direc fono fechPrest

PRESTAR

Dado un código de libro ( codLib ) y un código de lector ( codLector ) existe una única fecha de préstamo ( fechPrest ) para ese libro. Ni código de libro, ni tampoco código de lector, determinan por si solos, la fecha de préstamo, ya que un libro se puede prestar en diversas fechas, asi como un lector puede recibir libros prestados en diferentes fechas. Por tanto, tenemos una dependencia funcional completa :

{ codLib , codLector } fechPrest

PRESTAR ( codLib, codLector, titulo, editorial, nombre, direc, fono, fechPrest )

Dependencia funcional completa

Page 24: Curso BD (05-1) Normalizacion1

EJEMPLO : EJEMPLO : Indique gráficamente las dependencias funcionales del siguiente esquema de relación :

PROGRAM(codProgramador, codModulo, nomProgramador, nomModulo, horasTrab )

RESPUESTA : RESPUESTA :

codProgramador codModulo nomProgramador nomModulo horasTrab

PROGRAM

Dependencia funcional completa

Dependencia funcional parcial

Dependencia funcional parcial

Page 25: Curso BD (05-1) Normalizacion1

Es aquel atributo que forma parte de cualquier clave primaria o es clave candidata de una relación.

EMP_PROY

Atributos NO

PRIMOSAtributo PRIMO

Atributo PRIMO

codEmp numProy horas nomEmp nomProy lugarProy

Clave primaria

Page 26: Curso BD (05-1) Normalizacion1

Un esquema de relación esta en segunda forma normal , si esta en primera forma normal y todo atributo no primotodo atributo no primo posee una dependencia funcional completacompleta de la clave primaria de la relación.

EJEMPLO : EJEMPLO : El siguiente esquema representa un mal diseño, el cual si bien no tiene atributos compuestos ni grupos repetitivos y por tanto esta en 1FN , sin embargosin embargo no esta en 2FN.

El atributo no primo nomEmp viola la 2FN debido a que su dependencia funcional de la clave primaria es solo parcial. Es decir, depende funcionalmente solo parcialmente de la clave primaria ( solo de codEmp ).

codEmp numProy horas nomEmp nomProy lugarProy

EMP_PROY

Clave primaria

Dependencia funcional parcial

nomEmp

NOTA :NOTA : el único atributo no primo que tiene dependencia funcional completa es horas

NOTA :NOTA : el único atributo no primo que tiene dependencia funcional completa es horas

Page 27: Curso BD (05-1) Normalizacion1

El atributo no primo nomProy viola la 2FN debido a que su dependencia funcional de la clave primaria es solo parcial. Es decir, depende funcionalmente solo parcialmente de la clave primaria ( solo de numProy ).

codEmp numProy horas nomEmp nomProy lugarProy

EMP_PROY

Clave primaria

Dependencia funcional parcial

nomProy

El atributo no primo lugarProy viola la 2FN debido a que su dependencia funcional de la clave primaria es solo parcial. Es decir, depende funcionalmente solo parcialmente de la clave primaria ( solo de numProy ).

codEmp numProy horas nomEmp nomProy lugarProy

EMP_PROY

Clave primaria

Dependencia funcional parcial

lugarProy

codEmp numProy horas nomEmp nomProy lugarProy

EMP_PROYDependencias funcionales parciales

lugarProynomProy

ESTO SE ACOSTUMBRA GRAFICAR ASI :

Page 28: Curso BD (05-1) Normalizacion1

SOLUCION : SOLUCION :

Como el esquema de relación no esta en 2FN, debemos normalizar a varias relaciones en 2FN en las que los atributos no primos originales presenten una dependencia funcional total respecto a las nuevas claves primarias formadas :

EMP_PROY

soluciónsolución

codEmp numProy horas nomEmp nomProy lugarProy

Identificadas las dependencias, quedan definidas las nuevas relaciones

codEmp numProy horas

HORAS_TRAB

codEmp nomEmp

EMPLE

numProy numProy lugarProy

PROYEC

Page 29: Curso BD (05-1) Normalizacion1

EJERCICIO : EJERCICIO :

Una empresa comercializadora posee varias sucursales en diversas ciudades del país. Donde cada sucursal es identificada por su código de sucursal.

Cada sucursal tiene su staff de empleados, a los cuales se les reconoce por un código de empleado en la sucursal , el cual siempre empieza con el número 100.Lo que significa que para distinguir a un empleado de otro es necesario conocer el código de la sucursal y el código que el empleado tenga en la sucursal. Es importante registrar el DNI , la hora de ingreso al trabajo y el nombre de la sucursal.

codigoDeSucursal codigoEnSucursal DNI nom sueldo horaIngre nomSucursal

EMPLEADO

Atributo primo

Atributos no primos

Clave primaria

Entonces se pide normalizar el siguiente esquema de relación :

( Clave candidata )

Page 30: Curso BD (05-1) Normalizacion1

Aquí de hecho están combinados datos de sucursal y datos de empleado. Descartando el atributo primo DNI, por que presenta la propiedad de unicidad ( clave candidata ) , nos centraremos en los atributos no primos : sueldo, horaIngre y nomSucursal.

SOLUCIÓN : SOLUCIÓN :

Datos de sucursal : horaIngre , nomSucursal

Datos de empleado : DNI , sueldo

1.1. Construyendo esquema para la sucursal :

codigoDeSucursal horaIngre nomSucursal

sucursal Ya esta en 1FN ( no hay grupos repetitivos ) y esta en 2FN ya que no hay clave múltiple. Por tanto horaIngre y nomSucursal dependen totalmente de la clave primaria

Page 31: Curso BD (05-1) Normalizacion1

El sueldo de un empleado no depende únicamente del código del empleado en la sucursal, porque como ya sabemos estos códigos se repiten en cada sucursal. Por tanto :

2.2. Construyendo esquema para el empleado :

{codigoDeSucursal , codigoEnSucursal} sueldo

En consecuencia :

Ya esta en 1FN y en 2FN

codigoDeSucursal codigoEnSucursal DNI sueldo

EMPLEADO

EMPLEADOcodigoDeSucursal horaIngre nomSucursal

SUCURSAL

codigoDeSucursal codigoEnSucursal DNI sueldo