Vous êtes sur la page 1sur 191

Ricardo Timaran Pereira, Ph.D.

siritimar@gmail.com

BASES DE DATOS II

MODELO E-R

DIAGRAMA ENTIDAD-RELACIN

MODELO E-R -MER

MER es una herramienta para el


modelado de datos que describe las
entidades y asociaciones que existen
entre los datos de un sistema
MER est basado en un percepcin del
mundo real que consta de un conjunto
de objetos bsicos llamados entidades
y de relaciones entre estos objetos.

ENTIDADES

Una entidad es una cosa, objeto o suceso del


mundo real que es distinguible de otros objetos.
Pueden ser:

Concreta: una persona, una silla


Abstracta: juego de futbol, vacaciones

Conjunto de entidades es la agrupacin de


entidades del mismo tipo, que comparten las
mismas propiedades o atributos

Clientes de un banco

ATRIBUTOS

Una entidad se describe por un conjunto de atributos.


Los atributos son propiedades descriptivas de las
entidades.
Cada entidad tiene su propio valor para cada atributo.
Ejemplo de atributos de Clientes:

id_cliente, nom_cliente, ape_cliente, dir_cliente


Ciu_cliente, sex_cliente, ing_cliente

DOMINIO DE UN ATRIBUTO

Es el conjunto de valores permitidos


para cada atributo.
Por ejemplo:

atributo nom_cliente cadenas de 30


caracteres.
Ing_cliente numerico de 10 con 2
decimales

TIPOS DE ATRIBUTOS

Simples: son aquellos que no se han dividido en


subpartes.
Compuestos: son los que pueden dividirse en otros
atributos, por ejemplo el atributo nombre, puede
dividirse en nombre, apellido materno y apellido
paterno.
De un solo valor: Por ejemplo la edad del paciente es
nica.
Multivalor: Por ejemplo un paciente puede tener cero
o ms nmeros telefnicos.
Derivado: el valor de este tipo de atributo es
obtenido a partir de los valores de otro

RELACIONES

Una relacin es una asociacin entre


entidades. Por ejemplo un x paciente
tiene tal padecimiento.

PACIENTE

PADECIMENTO

Juan Lpez

Hepatitis

CARDINALIDAD

Es el nmero de entidades con la cual


otra entidad puede asociar mediante
una relacin
Considerando una relacin binaria
entre el juego de entidades A y el B, la
cardinalidad puede ser:

Uno a uno
Uno a muchos muchos a uno
Muchos a muchos

UNO A UNO

Una entidad en A esta asociada con


solo una entidad en B y viceversa

A1
A2
A3
A4

B1
B2
B3
B4
B5

EJEMPLO: Un paciente en un hospital tiene un solo cuarto y un cuarto pertenece


a un solo paciente (hospital privado)

UNO A MUCHOS

Una entidad en A esta asociada con


cualquier nmero (0 ms) de
entidades en B. Una entidad en B,
puede estar asociada a lo mucho con
una entidad en A
A1
A2
A3

B1
B2
B3
B4
B5

EJEMPLO: El titular de una cuenta de cheques puede tener cualquier nmero de


tarjetas, pero cada tarjeta pertenece a una sola persona

MUCHOS A MUCHOS

Una entidad en A esta asociada con


cualquier nmero de entidades en B
(0 ms) y viceversa
A1
A2
A3
A4

B1
B2
B3
B4
B5

EJEMPLO: En un proyecto de investigacin puede haber cualquier nmero


de mdicos, un mdico puede participar en cero o varios proyectos

ATRIBUTO IDENTIFICADOR (LLAVE PRIMARIA)

Son atributos que se usan para


diferenciar una entidad de otra, por
ejemplo un medicamento de otro, o un
paciente de otro. Puede haber varias
llave candidato.
La llave primaria debe ser nica y de
preferencia no cambie con el tiempo.
Cada conjunto de entidades (tabla)
debe tener una llave primaria.

CARDINALIDAD: OBLIGATORIA Y OPCIONAL


Uno a uno obligatorio: un empleado en
Una empresa tiene uno y solo un puesto, un
Puesto pertenece a un solo empleado
Uno a muchos opcional: un profesor en la
Fac. de Ingeniera puede dar 0 o varias clases y
una clase est dada por uno y solo un profesor
Muchos a muchos obligatorio: una materia puede
pertenecer a una o varias carreras, una carrera
est formada por varias materias.
Uno a uno opcional: Un paciente puede estar
asignado a un cuarto o a ninguno. En un cuarto
puede haber cero o un paciente

DIAGRAMAS ENTIDAD-RELACIN
(E-R)
Un diagrama E-R consiste de:
Rectngulos: representan juegos de
entidades
Elipses: representan atributos
Diamantes: representan juegos de relaciones
Lneas: son uniones entre atributos y
entidades y entre juegos de entidades y de
relaciones
Elipses dobles: son atributos multivalor
Elipses punteadas: son atributos derivados
Rectngulos dobles: representan juegos de
entidades dbiles.

METODOLOGA

Identificar entidades : Definir objetos


como personas, lugares o conceptos
sobre los que se quiere tener
informacin.
Identificar atributos: Definir las
propiedades de cada entidad
Determinar llave primaria de cada
entidad
Identificar relaciones entre las
entidades

EJEMPLO:

IDENTIFICACIN DE ENTIDADES EN IUCESMAG

facultades

programas

estudiantes

profesores

materias

notas

IDENTIFICACION DE ATRIBUTOS

nomfac
codfac

nomprog
codprog

facultades

programas

IDENTIFICACION DE ATRIBUTOS
nomprof

nomal
codprof

codal
edadal

estudiantes
fechal

ciudal
sexal

profesores

IDENTIFICACION DE ATRIBUTOS
nommat

parcial1
codmat
parcial2

notas

materias
efinal

estado
nfinal

IDENTIFICACION DE RELACIONES
Facultades y Programas
nomfac

nomprog

codfac

codprog

facultades

TIENE

programas

IMPLEMENTACIN DE LA RELACION
1:M

nomfac

nomprog

codfac

codprog

facultades

TIENE

Para implementar la relacin 1:M se


toma el atributo identificador de la
entidad uno (1) y se lo lleva como
atributo de la entidad varios (M)

programas

codfac

IDENTIFICACION DE RELACIONES
Facultades y Estudiantes
nomfac

nomal

codfac

codal

facultades

TIENE

estudiantes
codfac

IDENTIFICACION DE RELACIONES
Facultades y Profesores
nomfac

nomprof

codfac

codprof

facultades

TIENE

Profesores
codfac

IDENTIFICACION DE RELACIONES
Facultades y Materias
nomfac

nommat

codfac

codmat

facultades

TIENE

materias
codfac

IDENTIFICACION DE RELACIONES
Facultades y Notas
nomfac

parcial2

codfac

parcial1

facultades

existen

notas
codfac

IDENTIFICACION DE RELACIONES
Programas y Estudiantes
nomprog

nomal

codprog

codal

programas

codfac

estudiantes

TIENE

codprog

codfac

La entidad estudiantes tiene el atributo codfac de la relacion con


facultades. La entidad programas tiene el atributo codfac de la
relacion con facultades. Por lo tanto se elimina el atributo codfac
de estudiantes ya que programas tiene una relacion mas directa
con facultades

IDENTIFICACION DE RELACIONES
Programas y Profesores
nomprog

nomprof

codprog

codprof

codfac

programas

DICTAN

Profesores
codfac

Se elimina el atributo codfac


de profesores

IMPLEMENTACIN DE LA RELACION
N:M
nomprog
codprog

nomprof

codprog
codprof

codprof

codfac
progprof

programas

Siempre la implementar la relacin N:M


debe convertirse en una nueva entidad,
con los atributos identificadores de
cada una de las entidades y adicionar
unos nuevos si se desea

profesores

codfac

IDENTIFICACION DE RELACIONES
Programas y Materias
nomprog

nommat

codprog

codmat
codprog

codfac

programas

TIENE

materias
codfac

IDENTIFICACION DE RELACIONES
Programas y Notas
nomprog

parcial2

codprog

parcial1

codprog

codfac

programas

Asignan

notas
codfac

IDENTIFICACION DE RELACIONES
Estudiantes y Notas
nomal

Parcial 2

codal

parcial1

estudiantes

codprog

Notas

TIENE

codprog

codal

La entidad estudiantes tiene el atributo codprog y la relacion


Notas tambien. Como la relacin entre estas entidades es 1:M
entonces se elimina el atributo codprog de Notas por tener
alumnos una relacin mas directa con programas. A la entidad
Notas se le asigna el identificador nico codal.

IDENTIFICACION DE RELACIONES
Estudiantes y Materias
nomal
codal

codmat
codal

estudiantes

matricula

nommat
codmat

materias

estpormat

codprog

codprog

La entidad estudiantes tiene el atributo codprog y la relacion


materias tambin. Como la relacin entre estas entidades es N:M
entonces se elimina el atributo codprog de estudiantes por tener
materias una relacin mas directa con programas. Se destruye la
relacin N:M y se crea una nueva entidad estpormat con los
atributos identificadores de cada entidad

IDENTIFICACION DE RELACIONES
Estudiantes y Profesores
nomal
codal

codprof
codal

estudiantes

estudia

nomprof
codprof

profesores

estporprof

La relacin entre estas entidades es N:M Se destruye la relacin


N:M y se crea una nueva entidad estporprof con los atributos
identificadores de cada entidad

IDENTIFICACION DE RELACIONES
Materias y Profesores
nommat
codmat

codprof

codmat

materias

Es dictada

nomprof
codprof

profesores

matporprof
codprog

La relacin entre estas entidades es N:M Se destruye la relacin


N:M y se crea una nueva entidad matporprof con los atributos
identificadores de cada entidad

IDENTIFICACION DE RELACIONES
Materias y Notas
nommat

Parcial 2

codmat

parcial1

materias

codprog

Notas

TIENE

codmat

codal

La relacin entre estas entidades es 1:M . A la entidad Notas se le


asigna el identificador nico codmat.

IDENTIFICACION DE RELACIONES
Profesores y Notas
nomprof

Parcial 2

codprof

parcial1

profesores

Notas

Asigna

codmat

codal

La relacin entre estas entidades es 1:M . A la entidad Notas se le


asigna el identificador nico codprof.

codprof

EJEMPLO: UNO A UNO

Suponiendo que en Acadmica se tiene la entidad DECANO


La relacin entre Decano y Facultad es:
Nombre

codfac

Cdula

nomfac

Sexo

es

Decano
Fecha_ini

Fecha_fin

Facultad

codfac

La relacin entre estas entidades es 1:! . Se asigna el identificador


nico de una de ellas a la otra entidad. Depende de la importancia
de la entidad. En este caso codfac se le asigna a la entidad
decano

RELACIONES Y LLAVES PRIMARIAS VS CARDINALIDAD


cardinalidad Relacin entre entidades

Llave fornea

Uno a uno

No es necesario crear una


relacin entre las entidades

Se crea una llave fornea


en una de las entidades
relacionadas que
corresponde a la llave
primaria en la otra

Uno a muchos

No es necesario crear una


relacin entre las entidades

Se crea una llave fornea


del lado de la entidad
muchos que
corresponde a la llave
primaria del lado uno

Muchos a
muchos

Se crea una relacin con llave


primaria formada por las llaves
primarias de las entidades que
une la relacin y cada una es
llave fornea

En las entidades no hay


llave fornea.

DIAGRAMA E-R
programas
Codprog
Nomprog
Codfac

PK
FK

estudiantes

estpormat

Codal
PK
Nomal
Edadal
Fechal
Ciudal
Sexal
Codprog FK

Codal FK
Codmat FK
PK
(codal,codmat)

estporprof

facultades
Codfac
Nomfac

PK

notas
Codal
FK
Codmat FK
Codprof FK
parcial1
parcial2
efinal
Nfinal
Estado
PK
(codal,codmat,
codprof)

Codal FK
Codprof FK
PK
(codal,codprof)

materias
Codmat
Nommat
Codprog

PK
FK

matporprof
Codmat FK
Codprof FK
PK
(codmat,codprof)

profesores
Codprof
Nomprof
Codprog

PK
FK

DEL MODELO E-R AL MODELO FSICO RELACIONAL

Todas las entidades del diagrama E-R se


convierten en tablas
Todos los atributos del diagrama E-R se
convierten en atributos o campos de las tablas
El atributo identificador del diagrama E-R se
convierte en llave primaria de cada una de las
tablas
Las relaciones 1:1 y 1:M del diagrama E-R se
implementan a travs de la definicin de llaves
forneas.
Las relaciones N:M del diagrama E-R se
implementan como nuevas tablas
A cada atributo del modelo fsico se le asigna
un dominio

EJERCICIO 1

En la EPS ZHDAROVIA se
necesita construir una base de
datos que permita almacenar la
informacin del sistema de
solicitudes y atencin de citas de
sus afiliados

PROCESO DE NORMALIZACIN DE
RELACIONES

DEPENDENCIA FUNCIONAL

Dependencia funcional se da entre los atributos de una


relacin
Un atributo A depende funcionalmente de B cuando
conocido el valor de B se puede conocer el valor de A
Se denota BA, B determina a A o A depende
funcionalmente de B
B se le denomina determinante

Ej: cedula nombre

Existe dependencia funcional con la llave primaria de


una relacion
Existe dependencia funcional en un calculo:

Nfinal=Parcial1*0.30+Parcial2*30+efinal*0.40
Parcial1,parcial2,efinalNfinal

ANOMALAS EN UNA RELACIN


Una

anomala en una relacin es


una falla en su diseo
Hay tres tipos de anomalas
Insercin
Modificacin
Eliminacin

ANOMALAS DE INSERCIN
Una

relacin tiene anomala de insercin cuando para


conocer un valor de uno de sus atributos se necesita
insertar una tupla.
Sea la relacin Actividades(IdStu,Hobby,valor):
IdStu

Hobby

valor

1000

Tenis

50.000

2000

Bsquet

30.000

3000

Ftbol

25.000

4000

Tenis

50.000

5000

Ftbol

25.000

Existe una anomilia de insercin porque si deseamos conocer el valor de


natacin debe registrarse un estudiante para conocer cuanto cuesta

ANOMALAS DE MODIFICACIN
Una

relacin tiene anomala de modificacin cuando al


actualizar el valor de un atributo en una tupla no se
actualice este valor en otra con similares caracteristicas.
Sea la relacin Actividades(IdStu,Hobby,valor):
IdStu

Hobby

valor

1000

Tenis

80.000

2000

Bsquet

30.000

3000

Ftbol

25.000

4000

Tenis

50.000

5000

Ftbol

25.000

Existe una anomala de modificacin porque si modificamos el valor de


tenis existe esta actividad en otro estudiante que practica tenis cuyo valor
no ha sido actualizado.

ANOMALAS DE ELIMINACIN
Una

relacin tiene anomala de eliminacin cuando al


eliminar un tupla se pierde la informacin referente a los
valores de ciertos atributos.
Sea la relacin Actividades(IdStu,Hobby,valor):
IdStu

Hobby

valor

1000

Tenis

25.000

2000

Bsquet

30.000

3000

Ftbol

25.000

4000

Tenis

25.000

5000

Ftbol

25.000

Existe una anomala de eliminacin porque si se elimina el registro del


estudiante que practica basquet, se pierde la informacin acerca de la
actividad basquet.

SOLUCIN DE ANOMALAS
Si

una relacin tiene cualquier tipo de


anomala, esta se soluciona utilizando el
mtodo divide y conquistars
La relacin con anomalas se divide en otras
relaciones teniendo en cuenta la
dependencia funcional de los atributos.
Para el caso de Actividades(IdStu,Hobby,valor): las
dependencias funcionales son:

Idstu PK
IdStuHobby
Hobbyvalor

SOLUCIN DE ANOMALAS
Basado

en las dependencias funcionales la relacion


Actividades(IdStu,Hobby,valor) se divide en Pasatiempo(IdStu,Hobby)
y Precios (Hobby,valor)

Pasatiempos

Precios

IdStu

Hobby

Hobby

valor

1000

Tenis

Tenis

25.000

2000

Bsquet

Bsquet

30.000

3000

Ftbol

Ftbol

25.000

4000

Tenis

Natacin

75.000

5000

Ftbol

Danzas

40.000

EJERCICIO
Determinar

Que tipo de anomalas tiene la relacin BIBLIOTECA


Encontrar su solucin
Codlib PK

codlib

titulo

autor

nacionalidad

editorial

ciudad

1000

Bases Datos

Date J.

USA

Prentice

New York

2000

Ing Software

Pressma
n

USA

Omega

Bogota

3000

Mineria

Lopez A.

Espaa

MacGra
w

Madrid

4000

SQL

Date J.

USA

Prentice

New York

5000

Java

Salas

Colombia

Omega

Bogot

6000

C++

Deitel

Mexico

MacGra
w

Madrid

ANOMALIAS DE BIBLIOTECA
Anomala

de Insercin: para
determinar una nueva editorial se
necesita ingresar en Biblioteca una
libro impreso por esa editorial.
Anomalia de Modificacin: para
actualizar el nombre de un autor se
necesita modificar en todas las tuplas
en la cual aparezca este autor
Anomalia de Eliminacin: Al eliminar
una ciudad de una editorial (Miami)
se pierde toda la informacin del libro

SOLUCION ANOMALIAS
BIBLIOTECA
Dependencias

Funcionales:

codlibttulo
Codlib autor
Codlib editorial
Autornacionalidad
Editorial ciudad

DIVISIN RELACION BIBLIOTECA


Basado

en las dependencias funcionales la relacin

Biblioteca(codlib,titulo,autor,nacionalidad,editorial.ciudad) se
divide en: LIBROS (codlib,titulo,autor,editorial)
AUTORES
AUTORES(autor, Nacionalidad)
EDITORIALES(editorial,ciudad) Autor
Nacionalidad

LIBROS

Date J.

USA

Pressman

USA

Lopez A.

Espaa

Salas

Colombia

Deitel

Mexico

Codli
b

Titulo

Autor

editorial

1000

Bases Datos

Date J.

Prentice

2000

Ing Software

Pressman

Omega

3000

Mineria

Lopez A.

MacGraw

4000

SQL

Date J.

Prentice

Editorial

Ciudad

5000

Java

Salas

Omega

Prentice

New York

6000

C++

Deitel

MacGraw

MacGraw

Madrid

Omega

Bogot

EDITORIALES

NORMALIZACIN DE
RELACIONES
El

proceso de normalizacin de relaciones tiene por


objetivo solucionar problemas de anomalas.
Existen las siguientes formas normales en las cuales una
relacin puede estar:

Para

1FN
2FN
3FN
BCFN (Boyce-Codd Forma Normal)
4FN
5FN

llegar a una forma normal superior se debe cumplir


con las formas normales anteriores.
Ej. Si una relacin esta en 3FN, esta debe estar en 2FN y
lgicamente en 1FN.

PRIMERA FORMA NORMAL 1FN

Una

relacin esta en 1FN si esta es una relacin:

Filas y Columnas
Tplas sean nicas
Atributos atmicos
No tiene grupos repetidos

La

relacin Actividades(IdStu,Hobby,valor) esta en 1FN pero


tiene anomalas
IdStu

Hobby

valor

1000

Tenis

25.000

2000

Bsquet

30.000

3000

Ftbol

25.000

4000

Tenis

25.000

5000

Ftbol

25.000

NORMALIZACION 1FN
Al

existir un grupo comn: (Hobby,valor),(las tuplas se repiten ) no


esta en 1FN.
Basado en las dependencias funcionales la relacion
Actividades(IdStu,Hobby,valor) se divide en Pasatiempo(IdStu,Hobby)
y Precios (Hobby,valor)
Estas dos ltimas estarn en 1FN

Pasatiempos

Precios

IdStu

Hobby

Hobby

valor

1000

Tenis

Tenis

25.000

2000

Bsquet

Bsquet

30.000

3000

Ftbol

Ftbol

25.000

4000

Tenis

Natacin

75.000

5000

Ftbol

Danzas

40.000

SEGUNDA FORMA NORMAL 2


FN
Una

relacin esta en 2 FN si esta en 1FN y todos sus atributos que no son llaves
dependen totalmente de la llave.
Se recomienda verificar si la relacin tiene un PK compuesta
Sea la relacin Actividades(IdStu,Hobby,valor) donde PK(IdStu,Hobby).
Las dependencias funcionales:
IdStu,Hobby valor
Hobbyvalor
La dependencia de valor es parcial de la llave. Por eso no esta en 2FN
IdStu

Hobby

valor

1000

Tenis

25.000

1000

Bsquet

30.000

3000

Ftbol

25.000

3000

Tenis

25.000

5000

Ftbol

25.000

SEGUNDA FORMA NORMAL 2


FN
Para

que la relacin Actividades(IdStu,Hobby,valor) donde PK(IdStu,Hobby) este en


2FN se debe dividir por sus dependencias: funcionales en las relaciones:
Pasatiempos (IdStu,Hobby) PK (IdStu,Hobby)
Precios (Hobby,valor) PK(Hobby)

Pasatiempos

Precios

IdStu

Hobby

Hobby

valor

1000

Tenis

Tenis

25.000

1000

Bsquet

Bsquet

30.000

3000

Ftbol

Ftbol

25.000

3000

Tenis

Natacin

75.000

5000

Ftbol

Danzas

40.000

TERCERA FORMA NORMAL 3


FN
Una

relacin esta en 3 FN si esta en 2 FN y no tiene dependencias transitivas.


Sea la relacin Actividades(IdStu,Hobby,valor) donde PK(IdStu).
Las dependencias funcionales:
IdStu Hobby
Hobbyvalor
por transitividad
IdStuvalor
Hay una dependencia transitiva. Por eso no esta en 3FN
IdStu

Hobby

valor

1000

Tenis

25.000

2000

Bsquet

30.000

3000

Ftbol

25.000

4000

Tenis

25.000

5000

Ftbol

25.000

TERCERA FORMA NORMAL 3


FN
Para

que la relacin Actividades(IdStu,Hobby,valor) donde PK(IdStu) este en 3FN


se debe dividir por sus dependencias funcionales bsicas:
Pasatiempos (IdStu, Hobby) PK (IdStu)
Precios (Hobby,valor) PK (Hobby)

Pasatiempos

Precios

IdStu

Hobby

Hobby

valor

1000

Tenis

Tenis

25.000

2000

Bsquet

Bsquet

30.000

3000

Ftbol

Ftbol

25.000

4000

Tenis

Natacin

75.000

5000

Ftbol

Danzas

40.000

FORMA NORMAL BOYCE-CODD


Una

relacin esta en BCFN si esta en 3 FN y cada determinante es una llave


candidata.
Sea la relacin Asesores(IdStu,Asignatura,Profesor) donde PK(IdStu,Asignatura) y
llave candidata (IdStu,Profesor).
Las dependencias funcionales:
Profesor
IdStu,Profesor Asignatura
Profesor Asignatura
IdStu,Asignatura

La

relacin Asesores no esta en BCFN porque el determinante Profesor no es llave


candidata
IdStu
Asignatura
Profesor
1000

Base Datos

Timarn

1000

In.Software

Jaramillo

3000

Telemtica

Castillo

3000

Base Datos

Timarn

5000

Compiladores

Barn

FORMA NORMAL BOYCE-CODD


Para

que la relacin Asesores(IdStu,Asignatura,Profesor) este en BCFN se aplica la


divisin en:
Matricula (IdStu,Asignatura) PK (IdStu,Asignatura).
Docentes (Profesor,Asignatura) PK(Profesor,Asignatura)

Matricula
IdStu

Asignatura

1000

Base Datos

1000

In.Software

3000

Telemtica

3000

Base Datos

5000

Compiladores

Docentes
Profesor

Asignatura

Timarn

Base Datos

Jaramillo

Ing.Software

Castillo

Telematica

Barn

Compiladores

EJERCICIO
Normalizar

la siguiente relacin en la forma normal

adecauda:.
Sea la relacin
Ordenes(IDFAC,FECHA,IDCLI,NOMCLI,CIUDAD,IDITEM,DESC,CANT,VRUNIT
IdFac

Fecha

Idcli

Nomcli

Ciudad

Iditem

Desc

cant

vrunit

1000

2/04/12

100

Juan

Pasto

10

toalla

5000

1000

2/04/12

100

Juan

Pasto

20

mantel

10000

1000

2/04/12

100

Juan

Pasto

30

medias

8000

2000

3/04/12

200

Pedro

Bogota

60

camisa

30000

3000

4/04/12

300

Maria

Cali

20

mantel

10000

3000

4/04/12

300

Maria

Cali

10

toalla

5000

1 FN
Al examinar estos registros, estos contienen un grupo
repetido para IDITEM, DESC, CANT y VRUNIT.
La 1FN prohbe los grupos repetidos, por lo tanto se tiene
que convertir a la primera forma normal.
Los pasos a seguir son:
Eliminar los grupos repetidos.
Crear una nueva tabla con la PK de la tabla base y el
grupo repetido.
Los registros quedan ahora conformados en dos tablas :
ORDENES y ARTICULOS_ORDENES

1FN
ORDENES
IdFac

Fecha

Idcli

Nomcli

Ciudad

1000

2/04/12

100

Juan

Pasto

2000

3/04/12

200

Pedro

Bogota

3000

4/04/12

300

Maria

Cali

ARTICULOS_ORDENES
IdFac

Iditem

Desc

cant

vrunit

1000

10

toalla

5000

1000

20

mantel

10000

1000

30

medias

8000

2000

60

camisa

30000

3000

20

mantel

10000

3000

10

toalla

5000

2 FN
Se procede a aplicar la segunda formal normal: eliminar cualquier columna no
llave que no dependa de la llave primaria de la tabla.
Los pasos a seguir son:
Determinar cules columnas que no son llave no dependen de la llave primaria
de la tabla.
Eliminar esas columnas de la tabla base.
Crear una segunda tabla con esas columnas y la(s) columna(s) de la PK de la
cual dependen.
La tabla ORDENES est en 2FN:
Cualquier valor nico de IDFAC determina un slo valor para cada columna.
Todas las columnas son dependientes de la llave primaria IDFAC.
La tabla ARTICULOS_ORDENES no se encuentra en 2FN ya que las columnas
VRUNIT y DESC son dependientes de IDITEM, pero no son dependientes de
IDFAC
Pasos a seguir:
Se elimina estas columnas de la tabla ARTICULOS_ORDENES
crear una tabla ARTICULOS con dichas columnas y la llave primaria de
la que
dependen.

2FN
ORDENES
IdFac

Fecha

Idcli

Nomcli

Ciudad

1000

2/04/12

100

Juan

Pasto

2000

3/04/12

200

Pedro

Bogota

3000

4/04/12

300

Maria

Cali

ARTICULOS

ARTICULOS_ORDENES
IdFac

Iditem

cant

1000

10

1000

20

1000

30

Iditem

Desc

vrunit

2000

60

10

toalla

5000

3000

20

20

mantel

10000

3000

10

30

medias

8000

60

camisa

30000

3 FN
En la tercera forma normal se debe eliminar cualquier columna no llave
que sea
dependiente de otra columna no llave.
Los pasos a seguir son:
Determinar las columnas que son dependientes de otra columna no
llave.
Eliminar esas columnas de la tabla base.
Crear una segunda tabla con esas columnas y con la columna no llave
de la cual son dependientes.
Al observar las tablas creadas:
Las tablas ARTICULOS y ARTICULOS_ORDENES se
encuentran en 3FN.
La tabla ORDENES no lo est, ya que NOMCLI y CIUDAD son
dependientes de IDCLI, y esta columna no es la llave primaria.
Para normalizar esta tabla, se mueve las columnas no llave y la
columna llave de la cual dependen dentro de una nueva tabla
CLIENTES

3FN
ORDENES

CLIENTES

IdFac

Fecha

Idcli

1000

2/04/12

2000
3000

Idcli

Nomcli

Ciudad

100

100

Juan

Pasto

3/04/12

200

200

Pedro

Bogota

4/04/12

300

300

Maria

Cali

ARTICULOS

ARTICULOS_ORDENES

Iditem

Desc

vrunit

IdFac

Iditem

cant

10

toalla

5000

1000

10

20

mantel

10000

1000

20

30

medias

8000

1000

30

60

camisa

30000

2000

60

3000

20

3000

10

EJERCICIO
Normalizar

la siguiente relacin en la forma normal

adecauda:.
Sea la relacin
Biblioteca(codlib,titulo,autor,nacionalidad,editorial.ciudad) PK(codlib)
codlib

titulo

autor

nacionali
dad

editorial

ciudad

1000

Bases Datos

Date J.

USA

Prentice

New York

2000

Ing Software

Pressman

USA

Omega

Bogota

3000

Mineria

Lopez A.

Espaa

MacGraw

Madrid

4000

SQL

Date J.

USA

Prentice

New York

5000

Java

Salas

Colombia

Omega

Bogot

6000

C++

Deitel

Mexico

MacGraw

Madrid

ARQUITECTURA DE UN SISTEMA GESTOR DE BASES


DE DATOS
Consultas
(SQL)

Actualizaciones
Administrador de
Consultas
Operaciones
sobre BD

Administrador de
Transacciones

Administrador de buffers

Administrador de
Administrador de archivos Almacenamiento

Datos
Metadatos o Catalogo
bitcora

candados

ACID

Concurrencia

MDULOS
Administrador de Almacenamiento
Controla el acceso a la informacin del SGBD almacenada en el
disco, sea parte de la base de datos o del catlogo.

Administrador de Consultas
Encuentra la mejor manera de llevar a cabo una operacin
solicitada (consulta, actualizacin, alteracin ) y emite los
comandos al administrador de almacenamiento que los
ejecutar.

Administrador de Transacciones
Se encarga de conservar la integridad del sistema.
Controla que las consultas que se ejecutan al mismo tiempo no
interfieran entre ellas y de que el sistema no pierda informacin
cuando sobrevenga una falla.

Compilador de
consultas
Modificaciones
Plan de consulta

Motor de
ejecucin
Requerimientos

Administrador de
ndices, archivos

Compilador DDL

Administrador de
recuperaciones

Transacciones

Administrador de
transacciones
DML

Solicitud de pginas

Administrador de
Buffer

Administrador
de
concurrencia

Logs

Paginas lectura/escritura

Tabla de
candado

Administrador de
almacenamiento

Buffer
Almacenamiento

ADMINISTRACIN DE
ALMACENAMIENTO

ADMINISTRADOR DE ALMACENAMIENTO
Administrador de Archivos
Lleva un control de la localizacin de archivos en el disco.
A solicitud del administrador de buffer, recupera los bloques (4096
bytes) de disco que require y los lleva a memoria y viceversa.

Administrador de Buffer
Se encarga de la memoria principal.
Obtiene bloques de datos del disco a travs del administrador de
archivos y selecciona una pgina de la memoria principal donde
guardarlos.
Los bloques los devuelve a disco si se necesitan sus pginas de
memoria o si lo pide al administrador de transacciones

ADMINISTRADOR DE CONSULTAS

Log pages

ADMINISTRADOR DE CONSULTAS
Compilador de Consultas
Realiza un anlisis lxico, sintctico y semntico de una consulta
SQL y la convierte en un parse tree

Optimizador de Consultas
Convierte el parse tree en una serie de peticiones de registros
de datos o registros de ndices (query plan).
Selecciona un buen plan de consulta (query plan) para su
ejecucin

Motor de Ejecucin
Transfiere el plan de consulta para su ejecucin al administrador
de almacenamiento.

ADMINISTRACIN DE
TRANSACCIONES

Log pages

ADMINISTRADOR DE TRANSACCIONES
Transaccin
Un conjunto de operaciones SQL que se ejecutan secuencialmente
como una sola unidad.

Caractersticas de una Transaccin (ACID)


Atomicidad: deber realizarse la transaccin completa o nada de ella.
Consistencia:garantiza el estado coherente de la base de datos, i.e.
lainformacin cumple con las espectativas esperadas.
Aislamiento (isolation): aisla los efectos de una transaccin , cuando dos
o mas transacciones son ejecutadas al mismo tiempo.
Durabilidad: si la transaccin ha cumplido su funcin, su efecto no
deber perderse en caso de una falla del sistema, incluso si la falla
sobreviene apenas concluida la transaccin.

ADMINISTRADOR DE TRANSACCIONES
Administrador de Concurrencia
Es el encargado de aislar los efectos de las transacciones
concurrentes cerrando con candados los elementos a los que accede
la transaccin.
Mientras una transaccin tenga puesto el candado, las otras no
tendrn acceso a esos elementos de la base de datos.

Administrador de Recuperacin
Asegura la durabilidad de una transaccin, registrando cada
cambio en el disco, en la bitcora (archivo log), a travs de los
buffers.
En el caso de una falla, el administrador de recuperacin
examina la bitacora y restaura la base de datos al estado
consistente anterior.

ADMINISTRADOR DE CONSULTAS
Query
Compilador de
Consultas
Query Tree
Optimizador de
Consultas
Query Plan
Motor de ejecucin
de Consultas
Plan de Ejecucin
Data

Metadata

COMPILADOR Y OPTIMIZADOR DE CONSULTAS


Query
Parser
Query
Parser Tree
Preprocesador
Query Tree
Optimizador
Lgico
Query Tree Mejorado
Optimizador
Fsico
(Query Plan)

PARSER

Parser Query convierte una consulta escrita


en lenguaje SQL en un Parser Tree (rbol
sintctico)
Un Parser tree esta compuesto por nodos:

Atomos que son elementos lxicos tales como


keywords (palabras reservadas), nombres de
atributos, de relaciones, constantes, parentesis,
operadores y otros elementos
Categorias sintcticas porque se subdividen tal
como <SFW> (select from where), <condicion>.
Su composicin la define la gramtica.

GRAMTICA BSICA

<Query>::=<SFW>
<Query>::=( <Query>)
<SFW>::=SELECT <listatrib> FROM
<listrel> WHERE <condicion>
<listatrib>::=<atributo>,<listatrib>
<listatrib>::=<atributo>
<listrel>::=<relacin>,<listrel>
<listrel>::=<relacin>

GRAMTICA BSICA

<Condicion>::=<condicion> and <condicion>


<Condicion>::=<condicion> or <condicion>
<condicion>::=(<condicion>)
<Condicion>::=<tupla> in <query>
<condicion>::=<atributo> = <atributo>
<condicion>::=<atributo> > <atributo>
<condicion>::=<atributo> >= <atributo>
<condicion>::=<atributo> < <atributo>
<condicion>::=<atributo> <= <atributo>
<condicion>::=<atributo> <> <atributo>

GRAMTICA BSICA

<condicion>::=<atributo>
<condicion>::=<atributo>
<condicion>::=<atributo>
<condicion>::=<atributo>
<condicion>::=<atributo>
<condicion>::=<atributo>
<condicion>::=<atributo>
<tupla>::=<atributo>

= <valor>
> <valor>
>= <valor>
< <valor>
<= <valor>
<> <valor>
like <patron>

EJEMPLO 1

Construir el rbol sintctico para la


siguiente consulta

SELECT nomal,edadal,genal,nomprog
FROM tabalum,tabprog
WHERE
tabalum.codprog=tabprog.codprog and
edadal>20 and genal=F and nomprog
like %istem%

<QUERY>
<SFW>

SELECT <listatrib>

FROM

<atributo> , <listatrib>
nomal

<relacion> , <listrel>
tabalum <relacion>

<atributo> , <listatrib>
edadal
<atributo> , <listatrib>
genal

<listrel> WHERE

<atributo>
nomprog

tabprog

<condicion>

<condicion>
<condicion>
<atributo> = <atributo>
tabalum.
codprog

tabprog.
codprog

and

<condicion>

<condicion>

and

<condicion>

<atributo> > <valor>


edadal

20
<condicion>

<atributo> = <valor>
genal

and

<condicion>

<atributo> like <patron>


nomprog

%istem%

EJERCICIO 1

Construir el rbol sintctico para la


siguiente consulta
SELECT nomal,nommat,nfinal
FROM tabalum,tabmat,tabnot
WHERE tabalum.codal=tabnot.codal and
tabnot.codmat=tabmat.codmat and
nommat like %atos% and nfinal>=3.0
and nfinal<=4.0 and (ciudal like %asto%
or ciudal like %piale% or ciudal like
umaco% )

<QUERY>
<SFW>

SELECT <listatrib>

FROM

<atributo> , <listatrib>
nomal

<listrel> WHERE

<condicion>

<relacion> , <listrel>
tabalum <relacion> , <listrel>

<atributo> , <listatrib>

tabmat

<relacion>

nommat
tabnot

<atributo>
nfinal

<condicion>
<condicion>
<atributo> = <atributo>
tabalum.
codal

tabnot.
codal

and

<condicion>

<condicion>

and

<condicion>

<atributo> = <atributo>
tabnot.
codmat

Tabmat.
codmat
<condicion>

and

<condicion>

<atributo> like <patron> <condicion> and <condicion>


nommat

%atos%
<atributo> >=
nfinal

<valor>
3.0

<condicion>
<atributo> <= <valor>
nfinal

4.0

and

(<condicion>)

<condicion>

<atributo>
ciudal

or

<condicion>

like <patron>
%asto%
<condicion>

or

<condicion>

<atributo> like <patron>


<atributo>
ciudal

like <patron>

%piale%
ciudal

%umaco%

EJEMPLO 2

Construir el rbol sintctico para la


siguiente consulta

SELECT nomal,edadal,genal,nomprog
FROM tabalum,tabprog
WHERE
tabalum.codprog=tabprog.codprog and
codal not in (select distinct codal from
tabnot)

<QUERY>
<SFW>

SELECT <listatrib>

FROM

<atributo> , <listatrib>
nomal

<relacion> , <listrel>
tabalum <relacion>

<atributo> , <listatrib>
edadal
<atributo> , <listatrib>
genal

<listrel> WHERE

<atributo>
nomprog

tabprog

<condicion>

<condicion>
<condicion>
<atributo> = <atributo>
tabalum.
codprog

tabprog.
codprog

<and>

<condicion>

<tupla>

not in

<atributo>
codal
<SFW>

SELECT DISTINCT <listatrib>


<atributo>
codal

FROM

<listrel>
<relacion>
tabnot

(<query>)

EJERCICIO 2

Construir el rbol sintctico para la


siguiente consulta
SELECT nomal,ciudal,genal
FROM tabalum,tabnot,tabmat
WHERE tabalum.codal = tabnot.codal and
tabnot.codmat=tabmat.codmat and
nommat like %atos% and codal in
(select codal from tabnot, tabmat where
tabnot.codmat=tabmat.codmat and
nommat like %oftware%)

<QUERY>
<SFW>

SELECT <listatrib>

FROM

<atributo> , <listatrib>
nomal

<listrel> WHERE

<condicion>

<relacion> , <listrel>
tabalum <relacion> , <listrel>

<atributo> , <listatrib>

tabnot

<relacion>

ciudal
tabmat

<atributo>
genal

<condicion>
<condicion>
<atributo> = <atributo>
tabalum.
codal

tabnot.
codal

and

<condicion>

<condicion>

and

<condicion>

<atributo> = <atributo>
tabnot.
codmat

tabmat.
codmat
<condicion>

<atributo> like <patron>


nommat

and
<tupla>

%atos%
<atributo>
codal

<condicion>
in

(<query>)

<SFW>

SELECT <listatrib>

FROM

<listrel> WHERE

<condicion>

<relacion> , <listrel>
<atributo>
tabnot
codal

<relacion>
tabmat

<condicion>
<atributo> = <atributo>
tabnot.
codmat

tabmat.
codmat

and
<atributo>
nommat

<condicion>
like

<patron>
%oftware%

EJEMPLO 3

Construir el rbol sintctico en nodos


PostgreSQL para la siguiente consulta

SELECT nomal,nomprog
FROM tabalum,tabprog
WHERE
tabalum.codprog=tabprog.codprog and
edadal>20 and genal=F and nomprog
like %istem%

EJEMPLO 3 <TARGET LIST>


tabalum

nomal

tabprog

nomprog

EJEMPLO 3 <FROMCALUSE>

tabalum

tabprog

EJEMPLO 3 <WHERECLAUSE>
1

tabalum

codprog

tabprog

codprog

EJEMPLO 3 <WHERECLAUSE>
1

tabalum
tabalum

genal
edadal

EJEMPLO 3 <WHERECLAUSE>
2
like

tabprog

nomprog

%istemas%

EJERCICIO

Construir el rbol sintctico en nodos


PostgreSQL para la siguiente consulta:
Visualizar el nombre del alumno, la materia
y la nota final de todos aquellos
estudiantes de Ingeniera de Sistemas que
reprobaron la materia Bases de Datos

EJERCICIO
SELECT nomal,nommat,nfinal
FROM tabprog,tabalum,tabnot,tabmat
WHERE tabprog.codprog=tabalum.codprog
AND tabalum.codal=tabnot.codal
AND tabnot.codmat=tabmat.codmat
AND nomprog like %istema%
AND nommat like %ato%
AND nfinal <3.0

<SelectStmt>

SELECT <targetList> FROM <fromClause> WHERE


<ResTarget>
<Attr>

<RangeVar>

<ResTarget>

tabalum <Attr>
<Value>

<whereClause>

tabprog

<ResTarget>

tabmat

<Attr>

<Value>

tabnot

nomal
nommat
<Value>
nfinal

<RangeVar>
<RangeVar>
tabalum

<RangeVar>
tabnot
tabmat

<whereClause>
<A_Expr>
<A_Expr>
<Attr>
tabprog
<Value>
codprog

<A_Expr>

and

<Attr>

<A_Expr>
<Attr>

tabalum
<Value>
codprog

and

<Attr>
tabnot

tabalum
<Value>

<Value>

codal

codal
<A_Expr>

<Attr>
tabnot
<Value>
codmat

<A_Expr>

<Attr>
tabmat
<Value>
codmat

and

<A_Expr>

<A_Expr>
<A_Expr>
<Attr>
tabprog

like

<Value>
%istema%

<A_Expr>
<Attr>
tabmat

<Value>
nomprog

<A_Expr>

and

<Value>
nommat

and

<A_Expr>

like <Value>
%atos%
<Attr>
tabnot
<Value>
nfinal

<

<A_Const>
3.0

PREPROCESADOR

Convierte un Parser Tree en una Query tree


(rbol consulta)
Para convertir debe hacer un anlisis
semntico:

Determinar en el catlogo si las relaciones que se


encuentran en el <list rel> existen, sino error
Verificar en la metadata que los atributos
relacionados en el < list atrib>formen parte de las
relaciones, sino error
Se convierte a un rbol algebraico, compuesto por
operados algebraicos relacionales unarios o
binarios primitivos

EJEMPLO 4

Construir el rbol algebraico (query


tree inicial) para la siguiente consulta

SELECT nomal,edadal,genal,nomprog
FROM tabalum,tabprog
WHERE
tabalum.codprog=tabprog.codprog and
edadal>20 and genal=F and nomprog
like %istem%

nomal, edadal, genal,nomprog

edadal>20 ^ genal=F ^ nomprog like %istem%


^ tabalum.codprog=tabprog.codprog

X
tabalum

tabprog

OPTIMIZADOR LGICO

Convierte el Query tree inicial en


Querys mejorados utilizando leyes
algebraicas y heursticas de
transformacin
A cada rbol se le mide su costo
El menos costoso se convertir en el
plan de ejecucin de la consulta

Ejemplo 5: Transformar el query inicial en otros


mejorados

nomal, edadal, genal,nomprog

edadal>20 ^ genal=F ^ nomprog like %istem%


^ tabalum.codprog=tabprog.codprog

X
tabalum

tabprog

Opcion 1:Convertir el producto cartesiano en join


nomal, edadal, genal,nomprog

edadal>20 ^ genal=F ^ nomprog like %istem%


X

tabalum.codprog=tabprog.codprog

tabalum

tabprog

Opcion 2:Aplicar las restricciones en cada relacin con el


fin de disminuir cardinalidad

nomal, edadal, genal,nomprog

tabalum.codprog=tabprog.codprog

edadal>20 ^ genal=F nomprog like %istem%


tabalum

tabprog

Opcion 3:Aplicar las proyecciones necesarias en cada


relacin con el fin de disminuir grado

nomal, edadal, genal,nomprog

tabalum.codprog=tabprog.codprog

edadal>20 ^ genal=F nomprog like %istem%


nomal, edadal, genal,codprog
tabalum

nomprog,codprog (opcional)
tabprog

EJERCICIO 3

Construir el rbol algebraico inicial y


los optimizados para la siguiente
consulta
SELECT nomal,nommat,nfinal
FROM tabalum,tabmat,tabnot
WHERE tabalum.codal=tabnot.codal and
tabnot.codmat=tabmat.codmat and
nommat like %atos% and nfinal>=3.0
and nfinal<=4.0 and (ciudal like %asto%
or ciudal like %piale% or ciudal like
%umaco% )

Ejercicio 3 Query inicial


nomal,nommat,nfinal
tabalum.codal=tabnot.codal ^ tabnot.codmat=tabmat.codmat ^
nommat like %atos% ^nfinal>=3.0 ^nfinal<=4.0 ^
( ciudal like %asto% V ciudal like %piale% V ciudal like %umaco% )

X
tabmat

X
tabalum

tabnot

Ejercicio 3 Query mejorado


nomal,nommat,nfinal

nommat like %atos% ^nfinal>=3.0 ^nfinal<=4.0 ^


( ciudal like %asto% V ciudal like %piale% V ciudal like %umaco% )

IXI

tabnot.codmat=tabmat.codmat

tabmat

IXI

tabalum.codal=tabnot.codal

tabalum

tabnot

Ejercicio 3 Query optimizado


nomal,nommat,nfinal

IXI

tabnot.codmat=tabmat.codmat

IXI

tabalum.codal=tabnot.codal

ciudal

like %asto% V ciudal like


%piale% V ciudal like %umaco%

tabalum

nommat like %atos%

tabmat

nfinal>=3.0 ^ nfinal<=4.0

tabnot

Ejercicio 3 Query ptimo


nomal,nommat,nfinal
IXI

tabnot.codmat=tabmat.codmat

IXI

tabalum.codal=tabnot.codal

ciudal

like %asto% V ciudal like


%piale% V ciudal like %umaco%

codal, nomal,ciudal

tabalum

nommat like %atos%

tabmat

nfinal>=3.0 ^ nfinal<=4.0

codal, codmat nfinal

tabnot

LEYES ALGEBRAICAS DEL OPTIMIZADOR LGICO

Su objetivo es transformar una


expresin algebraica (Query inicial) en
una expresin algebraica (Query
transformado) que da como resultado
un plan de ejecucin eficiente

LEYES CONMUTATIVAS

R
R
R
R

xS=SxR
join S = S join R
S=SR
S=SR

EJEMPLO:

Sea R(A,B) y S(C,D) asi:


A SB
R
RxS C D

a1

b1

c1

d1

a1

b1

c1

d1

a2

b2

c2

d2

a1

b1

c2

d2

a2

b2

c1

d1

a2

b2

c2

d2

SxR

c1

d1

a1

b1

c1

d1

a2

b2

c2

d2

a1

b1

c2

d2

a2

b2

Luego R x S = SxR

LEYES ASOCIATIVAS

(R
(R
(R
(R

x S) x T = R x (S x T)
join S) join T = R join (S join T)
S) T= R (S T)
S) T= R (S T)

LEYES CON RESTRICCIONES

c1 and c2 (R) = c1 (c2 (R))

Ejemplo: edadal>20

and genal=F

(Tabalum)
edadal>20

edadal>20 and genal=F

Tabalum

genal=F

Tabalum

LEYES CON RESTRICCIONES

c1 or

Ejemplo: edadal>20

c2

(R) = c1 (R) (c2 (R)


or genal=F

(Tabalum)

edadal>20 or genal=F

Tabalum

edadal>20

Tabalum

genal=F

Tabalum

LEYES CON RESTRICCIONES

c1 or

Ejemplo: edadal>20

c2

(R) = c1 (R) (c2 (R)


or genal=F

(Tabalum)

edadal>20 or genal=F

Tabalum

edadal>20

Tabalum

genal=F

Tabalum

LEYES CON RESTRICCIONES

c1 (c2 (R) ) = c2 (c1 (R) )

Ejemplo: edadal>20 ( genal=F (Tabalum))


=
genal=F
(Tabalum))
edadal>20
(
genal=F
edadal>20

edadal>20

Tabalum

genal=F

Tabalum

EJERCICIO

Optimizar el query: mujeres de


Pasto e Ipiales mayores que 20 aos
edadal>20
edadal>20

genal=F

genal=F
ciudal=Pasto or ciudal=Ipiales

tabalum

ciudal=Pasto
tabalum

ciudal=Ipiales
tabalum

EN SQL

Normalmente:
Select * from tabalum
where genal=F and edadal>20 and (ciudal like
Pasto or ciudal like Ipiales)

Aplicando las leyes:


Select * from (select * from tabalum where ciudal
like Pasto union select * from tabalum where
ciudal like Ipiales) as t1
where genal=F and edadal>20

OPTIMA

Ciudal=Pasto
Genal=F
edadal>20
tabalum

ciudal=Ipiales
Genal=F
edadal>20
tabalum

EN SQL

Normalmente:
Select * from tabalum
where genal=F and edadal>20 and (ciudal like
Pasto or ciudal like Ipiales)

Aplicando las leyes:


select * from tabalum where edadal>20 and
genal=F and ciudal like Pasto
union
select * from tabalum where edadal>20 and
genal=F and ciudal like Ipiales

LEYES CON RESTRICCIONES

c (R U S) = c (R) U c (S)

Ejemplo: Sea tabalum(nomal,edadal) y


students(nomal,edadal)
edadal>20 (tabalum students) =

edadal>20 (tabalum) edadal>20 (students)


edadal>20

tabalum

edadal>20

students

tabalum

edadal>20

students

EN SQL

Normalmente:
Select * from (select * from tabalum union select
* from students) as t1
where edadal>20

Aplicando las leyes:


select * from tabalum where edadal>20
union
select * from students where edadal>20

LEYES CON RESTRICCIONES

c (R - S) = c (R) - (S)

c (R - S) = c (R) - c (S)

Ejemplo: Sea tabalum(nomal,edadal) y


students(nomal,edadal)

edadal>20 (tabalum - students) = edadal>20 (tabalum) (students)

edadal>20 (tabalum - students) = edadal>20 (tabalum) - edadal>20


(students)
edadal>20

tabalum

_
edadal>20

students

tabalum

students

edadal>20

edadal>20

tabalum

students

EN SQL

Primero:
Select * from (select * from tabalum except select * from
students) as t1
where edadal>20

Segundo:
select * from tabalum where edadal>20
except
select * from students

Tercero:
select * from tabalum where edadal>20
except
select * from students where edadal>20

EJERCICIO

Optimizar el query: estudiantes mujeres de Pasto e Ipiales


mayores que 20 aos que no estan en students

LEYES CON RESTRICCIONES

Si la condicin c contiene solo


atributos de R
c (R x S) = c (R) x (S)
c (R join S) = c (R) join (S)
c (R S) = c (R) (S)

LEYES CON RESTRICCIONES


Ej: Visualizar los estudiantes mayores que
20 aos y su programa
edadal>20(tabalum natural join tabprog)
edadal>20(tabalum) natural join (tabprog)

En SQL
Select * from (select * from tabalum where
edadal>20) as t1 natural join tabprog

LEYES CON RESTRICCIONES

Si la condicin c contiene solo


atributos de S
c (R x S) = (R) x c (S)
c (R join S) = (R) join c (S)
c (R S) = (R) c (S)

LEYES CON RESTRICCIONES


Ej: Visualizar los estudiantes del programa
de Ingenieria de Sistemas
nomprog=Ing.Sistemas(tabalum natural join
tabprog)
(tabalum) natural join
nomprog=Ing.Sistemas(tabprog)

En SQL
Select * from tabalum natural join (select *
from tabprog where nomprog like %istem
%) as t2

LEYES CON RESTRICCIONES

Si la condicin c contiene atributos de


R y S.
Sea c=c1 U c2 donde c1 attr(R) y c2
attr(S)
c (R x S) = c1 (R) x c2 (S)

c (R join S) = c1 (R) join c2 (S)

c (R S) = c1 (R) c2 (S)

LEYES CON RESTRICCIONES


Ej: Visualizar las mujeres de Ingeniera de
Sistemas
genal=F ^ nomprog=Ing.Sistemas (tabalum natural join
tabprog)
genal=F (tabalum) natural join nomprog=Ing.Sistemas
(tabprog)
En SQL
Select * from (select * from tabalum where
genal=F) as t1 natural join (select * from
tabprog where nomprog like %istem%) as
t2

EJERCICIO

Optimizar el query en SQL: estudiantes de Ingenieria de


Sistemas de las ciudades de Pasto, Ipiales y Tumaco que
hayan reprobado la asignatura Bases de Datos

LEYES QUE INVOLUCRAN PROYECCIONES

L(R JOIN S)= L(M(R) JOIN N(S))


donde M R, N S, L atrib(R) atrib(S) y (MN) con el
atributo comn
Ejemplo: Visualizar el nombre del estudiante y el programa al
cual pertenece:

nomal,nomprog

nomal,nomprog

join
codprog

join
codprog

tabalum

nomal,codprog
tabprog

tabalum

nomprog,codprog
tabprog

LEYES QUE INVOLUCRAN PROYECCIONES

Ejemplo: Visualizar el nombre del estudiante y el


programa al cual pertenece:
nomal,nomprog(tabalum Natural JOIN tabprog)
nomal,nomprog(nomal,codprog(tabalum) Natural JOIN
nomprog,codprog(tabprog))
En SQL
Select nomal,nomprog from (select nomal,codprog
from tabalum) as t1 natural join (select
nomprog,codprog from tabprog) as t2

LEYES QUE INVOLUCRAN PROYECCIONES

L(R THETA JOIN S)= L(M(R) THETAJOIN N(S))


donde M R, N S, L atrib(R) atrib(S) y en M y N deben
estar los atributos comparables.
Ejemplo: Visualizar los nombres de los estudiantes mayores
que los students:

nomal,name

nomal,name

Theta join
edadal>age

Theta join
edadal>age

tabalum

students

nomal,edadal
tabalum

name,age
students

LEYES QUE INVOLUCRAN PROYECCIONES

Ejemplo: Visualizar los nombres de los estudiantes


mayores que los students:

nomal,name(tabalum THETA JOIN Students)


nomal,name(nomal,edadal(tabalum) THETAJOIN
name,age(Student))

En SQL
Select nomal,name from (select nomal,edadal from
tabalum) as t1 join (select name,age from students)
as t2 on t1.edadal>t2.age

LEYES QUE INVOLUCRAN PROYECCIONES

Mediante un ejemplo demostrar si la siguiente


regla se cumple o no:
Sea R(A,B) y S(A,B) entonces
L(R S)= L(R) L(S)
Sea
R={(1,2),(3,4)} S={(1,3)}
A(R S)=

A(R)={(1),(3)}

A(S)={1}

A(R) A(S)={1}

No se cumple!!!!

LEYES QUE INVOLUCRAN PROYECCIONES

L(R EQUIJOIN S)= L(M(R) EQUIJOIN


N(S))

donde M R, N S, L R S y en M y N deben
estar los atributos comparables

L(R x S)= L(M(R) x N(S))

donde M R, N S y L R S

LEYES QUE INVOLUCRAN PROYECCIN Y


RESTRICCIN

L(c (R ) = L(c (M( R) ))

donde M L C
Ejemplo: Visualizar el nombre de los estudiantes de
Pasto mayores que 20 aos

nomal
nomal

ciudal=Pasto ^ edadal>20
tabalum

ciudal=Pasto ^ edadal>20

nomal,ciudal,edadal
tabalum

LEYES QUE INVOLUCRAN PROYECCIN Y


RESTRICCIN
Ejemplo: Visualizar el nombre de los estudiantes de
Pasto mayores que 20 aos
nomal(ciudal=Pasto ^ edadal>20 (tabalum ))

nomal(ciudal=Pasto ^ edadal>20 (nomal,ciudal,edadal( tabalum) ))

En SQL
Select nomal from (select nomal,ciudal,edadal from
tabalum) as t1 where ciudal like %asto% and
edadal>20

LEYES QUE INVOLUCRAN JOINS Y


PRODUCTOS

R THETA JOIN S = c (R x S)
R NaturalJOIN S = L(c (R x S))
donde c es la condicin de igualdad de los atributos comunes
y L contiene uno de los atributos comunes de R y S y el resto
de atributos de las relaciones tabalum.codprog,, * (resto atributos)
tabalum.codprog=tabprog.codprog
JOIN
codprog

tabalum

tabprog

tabalum

tabprog

EJERCICIO

Construir en SQL el rbol inicial y los


optimizados para la siguiente consulta
Visualizar el alumno, la materia y la nota
final de aquellos estudiantes de bases de
datos cuya nota final esta entre 3.0 y 4.0
de las ciudades de Pasto, Ipiales y
Tumaco

EJERCICIO . LA ORDEN SQL


SELECT nomal,nommat,nfinal
FROM tabalum natural join tabnot natural
join tabmat
WHERE nommat like %atos% and
nfinal>=3.0 and nfinal<=4.0 and (ciudal
like %asto% or ciudal like %piale% or
ciudal like %umaco% )

Ejercicio Query inicial


SELECT nomal,nommat,nfinal
FROM tabalum cross join tabnot cross
join tabmat
WHERE nommat like %atos% and
nfinal>=3.0 and nfinal<=4.0 and (ciudal
like %asto% or ciudal like %piale% or
ciudal like %umaco% ) and
tabalum.codal=tabnot.codal and
tabnot.codmat=tabmat.codamt

Ejercicio Query mejorado


SELECT nomal,nommat,nfinal
FROM tabalum natural join tabnot natural
join tabmat
WHERE nommat like %atos% and
nfinal>=3.0 and nfinal<=4.0 and (ciudal
like %asto% or ciudal like %piale% or
ciudal like %umaco% )

Ejercicio Query optimizado


SELECT nomal,nommat,nfinal
FROM (select * from tabalum where ciudal
like %asto% or ciudal like %piale% or ciudal
like %umaco% ) as t1 natural join (select
* from tabnot where nfinal>=3.0 and
nfinal<=4.0 ) as t2 natural join (select *
from tabmat where nommat like
%atos% ) as t3

Ejercicio Query ptimo


SELECT nomal,nommat,nfinal
FROM (select * from (select
codal,nomal,ciudal from tabalum) as
tmp1 where ciudal like %asto% or ciudal
like %piale% or ciudal like %umaco% ) as
t1 natural join (select * from (select
codal,codmat,nfinal from tabnot) as
tmp2 where nfinal>=3.0 and nfinal<=4.0 )
as t2 natural join (select
codmat,nommat from tabmat where
nommat like %atos% ) as t3

ESTIMACIN DE COSTOS DE LAS


OPERACIONES ALGEBRAICAS

Tener en cuenta los siguientes


parmetros:
B(R) = Numero de bloques necesarios
para contener todas las tuplas de R
T(R) = Numero de tuplas de R
V(R, a) = Numero de Valores distintos
del atributo a
V(R, a1, a2, a3, , an) Numero de
distintas tuplas de R

ESTIMACIN COSTOS DE LA PROYECCIN

El costo de se mide por B(R).


Ejemplo: Sea tabalum(codal char(4),nomal char

(20), edadal integer,fechal date, ciudal char(20),


genal char(1), codprog(char(3));

Sea

T(tabalum)=1000 tuplas, L(b)=4096 bytes tamao del


bloque.
Entonces: L(r)=60 bytes longitud del registro
t(b)=L(b)/L(r)=4096/60=68 tuplas por bloque

B(tabalum)=T(R)/t(b)=1000/68=15
bloques
Esto significa que se debe acceder al
disco 15 veces (bloque por lectura)

EJEMPLO
Calcular el costo de la consulta:

Select ciudal,genal,edadal from tabalum


Tener en cuenta T(tabalum)=1000, L(b)=4096.
Entonces:
L(r)=23 bytes t(b)=L(b)/L(r) =4096/23=178
t(b)=178 tuplas por bloque
B(tabalum)=1000/178=6 bloques
Esto significa que se necesitan 6 lecturas al disco.

ESTIMACIN COSTOS DE LA RESTRICCIN

Caso 1: S=A=c (R), donde A es un


atributo de R y C es const.
El costo se mide :T(S)=T(R)/V(R,a).
Sea:
T(tabalum)=1000 tuplas,
L(b)=4096 bytes,
L(r)=60 bytes
V(tabalum,edadal)=5

EJEMPLO
Calcular el costo de la consulta:

Select * from tabalum where edadal=20


Tener en cuenta T(tabalum)=1000, L(b)=4096,
V(tabalum,edadal)=5, L(r)=60 bytes,
Calculando t(b)=4096/60=68.
Entonces: T(where)=T(tabalum)/V(tabalum,edadal)
T(where edadal=20)=T(tabalum)/5=1000/5=200 tuplas
B(where edadal=20)= T(where
edadal=20)/t(b)=200/68=3 bloques
Significa que hace tres lecturas al disco

EJERCICIO
Calcular el costo de la consulta:

Select ciudal,genal,edadal from tabalum


where edadal=20
Tener en cuenta T(tabalum)=1000, L(b)=4096.
Entonces:
T(where edadal=20)=T(tabalum)/5=1000/5=200
tuplas
si
L(r)=23 bytes
t(b)=4096/23=178 tuplas por
bloque
Entonces
B(where edadal=20)= T(where
edadal=20)/t(b)=200/178=2 bloques

ESTIMACIN COSTOS DE LA RESTRICCIN

Caso 2: S=A<c (R), S=A>c (R), donde A


es un atributo de R y C es const.
El costo se mide :T(S)=T(R)/3
Sea:
T(tabalum)=1000 tuplas,
L(b)=4096 bytes,
L(r)=60 bytes

EJEMPLO
Calcular el costo de la consulta:

Select * from tabalum where


edadal<20
Tener en cuenta T(tabalum)=1000, L(b)=4096,
L(r)=60 bytes, t(b)=68.
Entonces:
T(where edadal<20)=T(tabalum)/3=1000/3=333
tuplas
B(where edadal<20)= T(where
edadal<20)/t(b)=333/68=5 bloques
Significa que hace cinco lecturas al disco

EJERCICIO
Calcular el costo de la consulta:

Select ciudal,genal,edadal from tabalum


where edadal>20
Tener en cuenta T(tabalum)=1000, L(b)=4096.
Entonces:
T(where edadal>20)=T(tabalum)/3=1000/3=333
tuplas
si
L(r)=23 bytes
t(b)=4096/23=178 tuplas por
bloque
Entonces
B(where edadal>20)= T(where
edadal>20)/t(b)=333/178=2 bloques

ESTIMACIN COSTOS DE LA RESTRICCIN


Caso 3: S=A<>c (R), donde A es un atributo de R y C
es const.
El costo se mide :
T(S)=T(R)- T(R)/V(R,a)
T(S)=T(R)(1-1/V(R,a)
Sea:
T(tabalum)=1000 tuplas,
L(b)=4096 bytes,
L(r)=60 bytes
V(tabalum,edadal)=5

EJEMPLO
Calcular el costo de la consulta:

Select * from tabalum where


edadal<>20
Tener en cuenta T(tabalum)=1000, L(b)=4096,
L(r)=60 bytes, t(b)=68, V(tabalum,edadal)=5
Entonces:
T(where edadal<>20)=T(tabalum)(11/V(tabalum,edadal))
= 1000(1-1/5)=1000(4/5)=800 tuplas
B(where edadal<>20)= T(where
edadal<>20)/t(b)=800/68=12 bloques
Significa que hace doce lecturas al disco

EJERCICIO 1
Calcular el costo de la consulta:

Select ciudal,genal,edadal from tabalum


where edadal<>20
Tener en cuenta T(tabalum)=1000, L(b)=4096, V(tabalum,edadal)=5

Entonces
L(r)=23 bytes y t(b)=178 tuplas por bloque
T(edadal<>20)=T(tabalum)(1-1/V(tabalum,edadal))
= 1000(1-1/5)=1000(4/5)=800 tuplas

B(tabalum)=T(edadal<>20)/t(b)=800/178=5
bloques
Significa que hace cinco lecturas al disco

COSTOS DE UNA CONSULTA CON CONJUNCIONES


Calcular el costo de la consulta:

S= Select ciudal,genal,edadal from


tabalum where edadal>20 and
genal=F and ciudal<>Pasto
Tener en cuenta T(tabalum)=1000, L(b)=4096,
V(tabalum,edadal)=5, V(tabalum,ciudal)=6
V(tabalum,genal)=2
Entonces
L(r)=23 bytes y t(b)=178 tuplas por bloque

COSTOS DE UNA CONSULTA CON


CONJUNCIONES
Se calcula el costo como si fuera una cascada de
restricciones:
T(edadal>20)=T(tabalum)/3=1000/3=333 tuplas
T(genal=F)=T(edadal>20)/V(tabalum,genal)=333/2=166 tuplas
T(ciudal<>Pasto)=T(genal=f)(1-1/V(tabalum,ciudal)
=166(1-1/6)=166*5/6=138 tuplas
B(S)=T(where)/t(b)=138/178=1 bloque
Se hace una lectura a disco

EJERCICIO
Calcular el costo de la consulta:

S= Select nomal,genal,edadal,ciudal
from tabalum where genal=M and
ciudal=Pasto and edadal >=20 and
edadal<=24
Tener en cuenta T(tabalum)=1000, L(b)=4096,
V(tabalum,edadal)=5, V(tabalum,ciudal)=6
V(tabalum,genal)=2

DESARROLLO
Inicialmente L(r)=43 bytes t(b)=4096/43= 95 tuplas
x bloque
Calcula el costo como si fuera una cascada de
restricciones:
T(genal=M)=T(tabalum)/V(tabalum,genal)=1000/2=500 tuplas
T(ciudal=Pasto)=T(genal=M)/V(tabalum,ciudal) =500/6=83
tuplas
T(edadal>=20)=T(ciudal=Pasto)*2/3=83*2/3=55 tuplas (ya que
la probabilidad de >= es de 2/3 de todas las tuplas)
T(edadal<=24)=T(edadal>=20)*2/3=55*2/3=36 tuplas (ya que
la probabilidad de <= es de 2/3 de todas las tuplas)
B(S)=T(where)/t(b)=36/95=1 bloque
Se hace una lectura a disco

COSTOS DE UNA CONSULTA CON RESTRICCIN


CON DISYUNCIONES

Sea S=c1 OR c2 (R) donde :


T(R) - # de tuplas de R
T(c1) - # de tuplas que satisfacen la condicin C1
T(c2) - # de tuplas que satisfacen la condicin C2
T(c1)/T(R) es la propabilidad que ocurra c1
T(c2)/T(R) es la propabilidad que ocurra c2
1- T(c1)/T(R) es la probabilidad que no ocurra c1
1- T(c2)/T(R) es la probabilidad que no ocurra c2
(1- T(c1)/T(R))(1- T(c2)/T(R)) es la probabilidad que no ocurra c1
ni c2
(1-(1 T(c1)/T(R)) (1 T(c2)/T(R))) es la probabilidad que ocurra
c1 y c2
La probabilidad de todas las ocurrencias

T(R) (1- (1 T(c1)/T(R)) (1 T(c2)/T(R)))

EJEMPLO DE COSTOS DE UNA CONSULTA CON


DISYUNCIONES
Calcular el costo de la consulta:

S= Select ciudal,genal,edadal from


tabalum where edadal>20 or
ciudal<>Pasto
Tener en cuenta T(tabalum)=1000, L(b)=4096,
V(tabalum,edadal)=5, V(tabalum,ciudal)=6
Entonces
L(r)=23 bytes y t(b)=178 tuplas por bloque

SOLUCIN
Se calcula el costo, inicialmente como si fuera las
condiciones independientes o solas:
T(edadal>20)=T(tabalum)/3=1000/3=333 tuplas
T(ciudal<>Pasto)=T(tabalum)(1-1/V(tabalum,ciudal)
=1000(1-1/6)=1000*5/6=833 tuplas
Aplicando la formula de probabilidad:
T(tabalum) (1- (1 T(edadal>20)/T(tabalum)) (1
T(ciudal<>pasto)/T(tabalum)))

T(S)=1000(1 (1-333/1000)(1-833/1000))
T(S)=1000(1-(1-0.333)(1-0.833))=1000(1-(0.667)
(0.167))
T(S)=1000(1-0.111389)=1000(0.888611)=889 tuplas
B(S)=T(where)/t(b)=889/178= 5 bloques
Se hace cinco lecturas a disco

EJERCICIO
Calcular el costo de la consulta:

S= Select nomal,genal,edadal,ciudal
from tabalum where ciudal= Ipiales
or ciudal=Pasto or ciudal =Tumaco
Tener en cuenta T(tabalum)=1000, L(b)=4096,
V(tabalum,edadal)=5, V(tabalum,ciudal)=6
V(tabalum,genal)=2

DESARROLLO
Inicialmente L(r)=43 bytes t(b)=4096/43= 95 tuplas x
bloque
Calcula el costo como si fueran restrcciones independientes:
T(ciudal=Ipiales)=T(tabalum)/V(tabalum,ciudal) =1000/6=166 tuplas
T(ciudal=Pasto)=T(tabalum)/V(tabalum,ciudal) =1000/6=166 tuplas
T(ciudal=Tumaco)=T(tabalum)/V(tabalum,ciudal) =1000/6=166 tuplas
Aplicando la formula de probabilidad:

T(tabalum) (1- (1 T(ciudal=Ipiales)/T(tabalum)) (1


T(ciudal=pasto)/T(tabalum)) (1 T(ciudal=Tumaco)/T(tabalum)))
T(S)=1000(1 (1-166/1000)(1-166/1000) (1-166/1000))
T(S)=1000(1-(1-0.166)(1-0.166)(1-0.166))=1000(1-(0.83)(0.83)(0.83))
T(S)=1000(1-0.5787)=1000(0.4212)=421 tuplas
B(S)=T(where)/t(b)=421/95= 5 bloques
Se hace cinco lecturas al disco

TAREA
Calcular el costo de la consulta:

Select nomal,genal,edadal,ciudal from


tabalum where (ciudal= Ipiales or
ciudal=Pasto or ciudal =Tumaco ) and
genal=F and edadal >=20 and
edadal<=24
Tener en cuenta T(tabalum)=1000, L(b)=4096,
L(r)=43
V(tabalum,edadal)=5, V(tabalum,ciudal)=6
V(tabalum,genal)=2

ESTIMACIN COSTOS DEL PRODUCTO


CARTESIANO
Sea R y S dos relaciones, el costo en # de tuplas es:
T(RxS)= T(R) T(S)
Calcular el costo de :Select * from tabalum cross join tabprog
Dado: T(tabalum)=1000, L(b)=4096, L(rtabalum)=60 bytes
T(tabprog)=10, L(rtabprog)=22
t(b tabalum x tabprog) = L(b) / (L(rtabalum)+L(rtabprog)=4096/82
t(b tabalum x tabprog)= 49 tuplas por bloque
B(tabalum x tabprog) = T(tabalum) T(tabprog) / T(b tabalum x
tabprog)
B(tabalum x tabprog) = 1000. 10/ 49 = 205 bloques

Se hacen 205 accesos a disco

ESTIMACIN COSTOS DEL NATURAL JOIN


Sea R(A,B) y S(B,D) dos relaciones, el costo es:
T(R join S)= T(R) T(S) / max(V(R,b),V(S,b))
Si se tiene joins naturales de varias relaciones:
Sea R(A,B) , S(B,D) y M(D,E) el costo es:
T(R join S join M) = T(R) T(S) T(M) / max(V(R.b),V(S.b))x max
(V(S.d),V(M.d))

EJERCICIO 1
Calcular el costo de la consulta:
Select * from tabalum natural join tabprog
Dado: T(tabalum)=1000, L(b)=4096, L(rtabalum)=60 bytes
V(tabalum,codprog)=5
T(tabprog)=10, L(rtabprog)=22 , V(tabprog,codprog)=10
t(b tabalum njoin tabprog) = L(b) / (L(rtabalum)
+L(rtabprog)=4096/82
= 49 tuplas por bloque
T(tabalum njoin tabprog) =
T(tabalum) T(tabprog) /
max(V(tabalum,codprog),V(tabprog,codprog))
= 1000 x 10 /max(5,10)=1000x10/10=1000 tuplas
B(tabalum njoin tabprog) = 1000/49 = 21 bloques
Se hacen 21 accesos a disco

EJERCICIO 2
Calcular el costo de la consulta:

S= Select nomal,nfinal from tabalum natural


join tabnot natural join tabmat
where nommat=Bases de Datos
Dado: L(b)=4096
T(tabalum)=1000, V(tabalum,codal)=1000
T(tabnot)=30000, V(tabnot,codal)=900, V(tabnot,codmat)=50
T(tabmat)=70, V(tabmat,codmat)=70, V(tabmat,nommat)=70

nomal varchar (20), nfinal decimal(3,1)


L(r nomal,nfinal)=(20+8)=28 bytes

DESARROLLO
Inicialmente t(b)=4096/28= 146 tuplas x bloque
Calcula el costo de los joins naturales:
T((tabalum njoin tabnot njoin tabmat))=
=1000 x 30000 x70/max(1000,900)x max(50,70)
=1000 x 30000 x 70 /1000 x 70 = 30000 tuplas
Calcula el costo de la restriccion
T(nommat=Bases de Datos)=
= T(tabalum join tabnot join tabmat )/V(tabmat,nommat)
=30000/70=428 tuplas
Calcula los bloques con la proyeccion
B((tabalum join tabnot join tabmat)=
=T(tabalum join tabnot join tabmat ) /t(b) =428/146= 3 bloques
Se hacen 3 accesos al disco