Está en la página 1de 66

[75.

15] Bases de Datos

Mara Ins Parnisari


3 de marzo de 2015

ndice
I

Introduccin a las Bases de Datos

II

Diseo de bases de datos

22

III

SQL

38

IV

Procesamiento de Consultas

43

Control de Concurrencia

52

VI

Tcnicas de Recuperacin

61

Parte I

Introduccin a las Bases de Datos


1 Modelo de datos
Un fenmeno o idea usualmente reere a un objeto y a algn aspecto del objeto, el cual captura un determinado
valor en un cierto momento.

Dato

tupla <nombre de objeto, propiedad de objeto, valor de la propiedad del objeto, instante>.

Dato elemental

terna <nombre de objeto, propiedad de objeto, valor de la propiedad del objeto>.

Modelo de datos

herramienta intelectual que provee una interpretacin del mundo real. Es un dispositivo de abs-

traccin.

Figura 1: Datos, informacin y conocimiento

Ejemplos de modelos de representacin simblica de la informacin: lenguaje natural, frmulas matemticas, mapas,
partituras.
La pieza ms elemental de informacin es el

dato.

Un dato solo es de utilidad si est vinculado a otros datos. La

estructura y el contexto le dan signicado a los datos.

2 BDs y SGBDs
Sistema de Base de Datos

est formado por cuatro componentes:

1. Hardware
2. Software
3. Datos
4. Personas
a)

Administradores: denen el

esquema de la base de datos, denen permisos de acceso, ejecutan mante-

nimientos de rutina (backups, ampliando la capacidad de los discos, monitoreando la performance)


b)

Usuarios
Tipo de usuario
Ingenuos

Descripcin
Consultan la base de datos

Interfaz que utiliza


Rellenando formularios de
consulta, o leyendo reportes
generados de la base de datos.
Usan aplicaciones

Sosticados

Consultan la base de datos


mediante un lenguaje, sin
programar aplicaciones

Herramientas OLAP (Online


Analytical Processing )
Herramientas de data mining

Programador de

Crean programas para acceder a

Herramientas RAD (Rapid

aplicaciones

la base de datos

Application Development )

Especializados

Programan aplicaciones especiales


(knowledge bases, sistemas
expertos, etc.)

Sistema de Gestin de Base de Datos (SGBD)

Ejemplos: Oracle, MySQL, SQL Sever, DB2, Access, PosgreSQL.

Sistema formado por datos y los programas que acceden a los datos. Su objetivo es almacenar y permitir
consultas en formas convenientes y ecientes.
Est formado por tres capas, las

abstracciones:

1. Nivel exterior : vistas que ven los usuarios. Solo ven una parte de la base de datos, la que les interesa
2. Nivel lgico: cmo se agrupan lgicamente los datos, las entidades y sus relaciones. Ejemplo: tablas,
grafos.
3. Nivel fsico: como se organizan fsicamente los datos. Ejemplos: bitmaps, rboles.

Gestin de Base de Datos

est formada por las siguientes herramientas:

1. Compiladores : proveen el lenguaje de consulta.


2. Catlogo: provee informacin de la base de datos; por ejemplo, para sacar estadsticas de consultas.
3. Optimizador de consultas
4. Manejador de transacciones : asegura que una transaccin se ejecute completamente o permita una vuelta atrs.
5. Manejador de concurrencia: asegura la integridad de la base de datos ante usuarios concurrentes.
6. Manejador de seguridad :
a) Contra hechos no intencionales. Ejemplo: fallas de energa.
b) Contra hechos intencionales. Ejemplo: ataques de terceros para robar informacin.

(a) Los datos se almacenan en una base de datos, que es administrada por un (b) Estructura general de un sistema de base de datos
sistema de gestin de bases de datos
Figura 2: SGBD

2.1 Base de datos


Base de Datos (BD)

conjunto de datos interrelacionados.

Instancia de la base de datos

coleccin de informacin en la base de datos en un momento particular.

Esquema de la base de datos

descripcin de la base de datos. La base de datos fsica vara con el tiempo (porque

se producen altas, bajas y modicaciones), pero el esquema es jo (o se cambia en raras ocasiones).
Modelo conceptual: representacin de alto nivel, que concentra los requerimientos del cliente. Utiliza el
modelo Entidad-Relacin.
Modelo lgico: representacin de bajo nivel. Utiliza el modelo relacional.

Modelo fsico: utiliza

SQL.

Figura 3: Base de datos

2.2 Por qu una base de datos y no un sistema de archivo?


Desventajas de usar un sistema de archivo:
Inconsistencia y redundancia, porque se usan muchos archivos, y tal vez tienen distintos formatos
Dicultad para acceder a los datos, porque se necesitan programas para acceder a los archivos
Problemas de integridad, porque es difcil cambiar todos los programas para que adopten restricciones de
consistencia
Dicultad para asegurar la atomicidad de las transacciones
Problemas para garantizar el acceso concurrente
Problemas de seguridad

2.3 Diseo de una base de datos

Figura 4: Metodologa de diseo de una base de datos

2.4 Modelos de datos


Modelo de datos

gua para organizar los datos de una base de datos. Formado por tres componentes:

1. la estructura de los datos (tablas, rboles, redes, etc.),


2. las operaciones sobre las estructuras, y
3. las restricciones sobre las estructuras o sobre las operaciones (para que los datos mantengan su integridad
semntica).
La

potencia semntica

de un modelo de datos est determinada por su capacidad de representar, adems de la

estructura de los datos, el signicado de los mismos y sus interrelaciones.

2.4.1 Operaciones en una base de datos


Estado de una BD
Operadores

valor de todos los atributos de todos los objetos de la base de datos.

los hay de dos tipos:

1. De consulta (no modican el estado de la base de datos)


2. De actualizacin (modican el estado de la base de datos)

Transaccin

conjunto de operaciones elementales. Ejemplo: la transferencia a una cuenta.

leer ( cuenta_a )
cuenta_a <- cuenta_a + 100
escribir ( cuenta_a )
leer ( cuenta_b )
cuenta_b <- cuenta_b - 100
escribir ( cuenta_b )

2.4.2 Restricciones
Tipos de restricciones sobre una base de datos:

Inherentes: determinado por la estructura de la base de datos


Explcitas: provienen del mundo real
Implcitas: se derivan de las explcitas
De estado:

restringen los posibles valores de los atributos. Ejemplo: la edad de una persona no puede ser

negativa.

De actualizacin:

restringen las posibles operaciones sobre los atributos. Ejemplo: no se puede disminuir la

edad de una persona.

De entidad: Ejemplo: no puede haber dos objetos iguales en la misma base de datos.
De integridad referencial: Ejemplo: no se puede referenciar a un objeto que no existe en la base de datos.

2.5 Modelos de bases de datos


1. Entidad-Interrelacin: para el diseo conceptual
2. Relacional: para el modelo lgico. La relaciones se representan a travs de claves forneas
3. Jerrquico (rbol): el acceso a niveles inferiores slo es posible a travs de sus padres
4. De red: las relaciones entre los datos se representan con referencias fsicas
5. De objetos: existe una persistencia de los objetos ms all de la existencia en memoria

3 Modelo Entidad-Interrelacin (E-R)


Nota importante: no podemos tener nombres de entidades o interrelaciones repetidos.

3.1 Entidades
El modelo entidad-interrelacin se basa en la idea de que el mundo real est compuesto por objetos (las entidades )
y las interrelaciones que hay entre las entidades.

Entidad

algo que existe, concreto o abstracto. Ejemplo: una persona Juan, la cuenta bancaria n 4500011.

Conjunto de entidades / tipo de entidad

conjunto de entidades del mismo tipo. Ejemplo: el conjunto de entida-

des cliente abarca todas las personas que tienen cuenta en un banco.
Un conjunto de entidades

tiene un predicado asociado

para probar si una entidad

pertenece al conjunto.

E = {e/p(e)}
Los conjuntos de entidades no necesitan ser disjuntos. Ejemplo: animales y mamferos no son disjuntos.
Un tipo de entidad queda denido por:
1.
2.

Nombre: en singular o frase simple en singular. Ejemplos: cliente, cuenta corriente


Signicado: texto preciso, conciso y claro. Debe indicar, si existieran, dependencias con

otros tipos de

entidades
3.

Atributos:

caractersticas de todas las entidades de ese tipo. Ejemplo: para el conjunto de entidades

cliente, posibles atributos son nombre, DNI, calle, ciudad, etc. Cada atributo tiene un conjunto de

valores

dominio del atributo. Ejemplo: el DNI debe ser un nmero positivo.


atmicos (es decir, que no se pueden descomponer), y no pueden estar repetidos.
Formalmente, un atributo es una funcin que hace corresponder un conjunto de entidades a un dominio o
permitidos, denominado el

Los atributos deben ser

producto cartesiano de dominios. Ejemplo: una entidad empleado est descrita por el conjunto {(nombre,
Juan), (apellido, Cancela), (DNI, 5.678.901)}.
Un atributo puede tener el valor

nulo, por varias razones:

a) No aplica
b) Faltante
c ) Desconocido
Tipos de atributos:
a) Simple vs compuesto. Ejemplo: nombre puede descomponerse en primer nombre, segundo nombre, y
apellido.
b) Un valor vs Multivaluado: se repite varias veces en la entidad. Ejemplo: nmero de telfono.
c ) Derivable : su valor puede calcularse a partir de otros atributos. Debe evitarse. Ejemplo: si tengo el
atributo fecha de nacimiento, edad es un atributo derivable.
4.

Identicador: atributo o conjunto de atributos que permiten distinguir a cada entidad dentro del conjunto
de entidades del mismo tipo.

3.2 Interrelaciones
Interrelacin

asociacin entre dos o ms conjuntos de entidades.

Conjunto de interrelaciones / tipo de interrelacin

E1 , E2 , . . . , En
R es un subconjunto del producto cartesiano

conjunto de interrelaciones del mismo tipo. Si

son conjuntos de entidades, entonces el conjunto de interrelaciones

{(e1 , e2 , . . . , en ) /e1 E1 , e2 E2 , . . . , en En }
donde la tupla

(e1 , e2 , . . . , en )

es una interrelacin.

Figura 5: Tenencia es una interrelacin entre dos entidades

Un tipo de interrelacin puede tener atributos descriptivos. Ejemplo: la interrelacin tenencia puede tener un
atributo fecha ltimo movimiento.
Caractersticas:

Grado de una interrelacin

cantidad de tipos de entidades que participan en la relacin.

Figura 6: Grado de una interrelacin

Cardinalidad de una interrelacin


Rol

cantidad de tipos de entidades con las que puede estar relacionado.

funcin que desempea una entidad en una interrelacin. Normalmente no se especica porque est implcito.
Ejemplos: un cliente tiene una cuenta, un empleado es jefe de

Instancia de una interrelacin

empleados.

asociacin entre dos o ms entidades. Debe ser unvocamente identicable sin usar

los atributos descriptivos de la interrelacin.


Un tipo de interrelacin puede identicarse por:
1. Un atributo propio, o
2. Una clave primaria, formada por los atributos de las claves primarias de los tipos de entidad que asocian.
Ejemplo: DNI es la clave primaria de cliente, y nro cuenta es la clave primaria de cuenta. La clave
primaria del tipo de interrelacin tenencia es (DNI, nro cuenta)
La estructura de la clave primaria de una interrelacin

depende de las restricciones de cardinalidad del conjunto

de interrelaciones.

3.2.1 Tipos de interrelaciones


Especializacin

un conjunto de entidades se divide en grupos de entidades que son distintivas. Ejemplo: en el

contexto de un banco, una persona puede ser especializada en un empleado o un cliente, o ambas, o ninguna

Generalizacin

la inversa de especializacin. Existe una superclase y una o ms subclases.

Puede haber restricciones de pertenencia:


1. Qu tipos de entidades pueden ser miembros de una subclase?
a) Denido por condicin: existe una condicin o predicado explcito que decide la pertenencia o no
pertenencia.
b) Denido por el usuario: el usuario de la BD asigna entidades a una subclase.
2. Las entidades pueden pertenecer a ms de una subclase dentro de una superclase?

= Generalizaciones superpuestas
No = Generalizaciones disjuntas

a) S
b)

3. Una entidad en la superclase debe pertenecer a al menos una entidad en la subclase?


a) S
b) No

= Generalizacin total
= Generalizacin parcial

En la especializacin y en la generalizacin, las subclases heredan atributos de la superclase.

Agregacin

abstraccin mediante la cual un conjunto de interrelacin es tratado como una superclase.

3.3 Restricciones
3.3.1 Restricciones de participacin
Se dice que la participacin de un conjunto de entidades
entidad en

parcial.

participa en al menos una interrelacin en

E en un conjunto de interrelaciones R es total cuando cada


R. Si solo algunas entidades participan, la participacin es

3.3.2 Restricciones de cardinalidad de correspondencia


Cardinalidad de correspondencia

cantidad mnima y mxima de entidades a las cuales puede asociarse una entidad

a travs de un tipo de interrelacin.


Para una interrelacin binaria
1. Uno a uno

(1 : 1):

entre dos tipos de entidades

Una entidad en

B,

la cardinalidad puede ser:

est asociada como mximo a una entidad en

est asociada como mximo a una entidad en

Figura 7:

B,

y una entidad en

A.

1:1

(1 : M ): Una entidad en A est asociada como mximo con cualquier cantidad de entidades
B est asociada como mximo a una entidad en A.
existe la restriccin muchos a uno (M : 1).

2. Uno a muchos
en

B,

y una entidad en

Tambin

1:M

Figura 8:

3. Muchos a muchos
entidades en

B,

(M : M ):

Una entidad en

y una entidad en

est asociada como mximo con cualquier cantidad de

est asociada como mximo con cualquier cantidad de entidades en

A.

Figura 9:

Para una interrelacin ternaria

M :M

entre tres tipos de entidades

10

A, B

C,

la cardinalidad puede ser:

N:N:N

Figura 10: Las fbricas le compran insumos a proveedores.

Claves candidatas de Compra:

{idf abrica , idinsumo , idproveedor }

N:N:1

Figura 11: Las fbricas le compran insumos a proveedores. Una fbrica no puede comprar el mismo insumo a ms de
un proveedor.

Claves candidatas de Compra:

{idf abrica , idinsumo }

N:1:1

Figura 12: Las fbricas le compran insumos a proveedores. Una fbrica no puede comprar el mismo insumo a ms de
un proveedor. Un proveedor no puede venderle el mismo insumo a ms de una fabrica.

Claves candidatas de Compra:

{idf abrica , idinsumo } ; {idproveedor , idinsumo }

1:1:1

Figura 13: Las fbricas le compran insumos a proveedores. Una fbrica no puede comprar el mismo insumo a ms
de un proveedor. Un proveedor no puede venderle el mismo insumo a ms de una fabrica. Una fbrica no puede
comprarle ms de un insumo a cada proveedor.

Claves candidatas de Compra:

Teorema:

{idf abrica , idinsumo } ; {idproveedor , idinsumo } ; {idf abrica , idproveedor }

en las relaciones ternarias, las restricciones de cardinalidad no imponen restricciones en las relaciones

binarias. En el ejemplo anterior, una fbrica puede comprar

proveedores. Un proveedor puede proveer

insumos.

11

insumos. Una fbrica puede comprarle a

3.3.3 Restricciones de dependencia existencial


Si la existencia de la entidad

depende de la existencia de la entidad

existencial de D. Operacionalmente, esto signica que si D


entidad dominante y S es la entidad subordinada.

D,

entonces se dice que

es borrado, tambin

tiene

dependencia

es borrado. La entidad

es la

3.3.4 Restricciones de identicacin


Superclave

conjunto de uno o ms atributos que, tomados en conjunto, permiten identicar unvocamente una

entidad o una interrelacin en el conjunto de entidades o interrelaciones del mismo tipo.


Si

es una superclave, cualquier superconjunto de

Clave candidata
Sea

tambin es una superclave.

superclaves minimales; aquellas para las cuales ningn subconjunto propio es una superclave.

un esquema de relacin con atributos

clave candidata de

A1 , . . . , A n .

El conjunto de atributos

1. Unicidad : en todo momento, no existen dos tuplas distintas de


donde

es una

que tengan el mismo valor para

Ai ,

i [1, k].

2. Minimalidad : ningn atributo de

Clave primaria

K = (A1 , . . . , Ak )

s y slo s satisface:

puede ser eliminado sin que se pierda la propiedad de unicidad.

aquella clave candidata que es elegida por el diseador del modelo de datos para identicar entidades

dentro del conjunto de entidades. Esta clave no debera cambiar en el tiempo. Ejemplo: la direccin de un cliente
no es una buena clave primaria, porque se puede mudar

Clave fornea

atributo o conjunto de atributos que es clave primaria en otra relacin. Ejemplo: en una relacin

autos, puede haber una clave fornea DNI que es la clave primaria en otra relacin personas, y que indica
el dueo de ese auto

Entidad dbil

entidad que tiene

dependencia de identicacin, porque no es identicable por sus propios atributos.

Est subordinada a otro tipo de entidad, la entidad fuerte.

Entidad fuerte

entidad que tiene una clave primaria propia.

El concepto de entidades fuertes y dbiles est relacionado con el concepto de dependencia de existencia. Una
entidad dbil es, por denicin, una entidad subordinada a la entidad dominante de la cual depende su identidad.
Toda dependencia de identidad es una dependencia de existencia, pero una dependencia de existencia no implica
necesariamente una dependencia de identidad.

Discriminador

atributo o conjunto de atributos de una entidad dbil que lo distingue de otras entidades dbiles que

dependen de la misma entidad fuerte.


Para una entidad dbil, su clave primaria est formada por su identicador ms la clave primaria de la entidad fuerte
de la cual depende.

12

3.4 Diagramas E-R

Figura 14: Simbologa en los diagramas E-R

Figura 15: Simbologa en los diagramas E-R para entidades fuertes (cuenta) y dbiles (transaccin). La clave primaria
de la entidad fuerte se identica con el atributo subrayado (nro. cuenta). La dependencia a la entidad fuerte se
identica con arcos dobles. El discriminador de la entidad dbil se identica con el atributo subrayado a medias (nro.
transaccin). El identicador de la entidad dbil es la suma de su discriminador y de la clave primaria de la entidad
fuerte (nro. cuenta + nro. transaccin)

3.5 Cuestiones de diseo


1. Conjuntos de entidades vs Atributos?
a) Algunos atributos no pueden transformarse en entidades. Ejemplo: el nombre de una persona
b) Algunos atributos estn mejor representados como entidades, para permitir atributos. Ejemplo: telfonos
de una persona
2. Conjuntos de entidades vs Conjuntos de interrelaciones?
Las interrelaciones modelan acciones que ocurren entre entidades.
3. Conjuntos de interrelaciones binarias vs n-arias?

Teorema

es posible reemplazar cualquier conjunto de interrelaciones

naria

interrelaciones binarias.
4. Localizacin de atributos de interrelaciones
a) Relaciones

1 : 1 = en

cualquiera de las dos entidades participantes

b) Relaciones

1 : N = en

la segunda entidad

c ) Relaciones

N : N = en

la interrelacin

13

(con

n > 2)

con un nmero de

3.6 Reduccin de un esquema E-R a un modelo relacional


Para cada entidad y para cada interrelacin, se construye una nica tabla. Cada tabla contiene mltiples columnas.
Representacin de conjuntos de entidades fuertes
Sea

E
el

con

a1 , . . . , an . Se representa a la misma con una tabla llamada

un conjunto de entidad fuerte con atributos

columnas. Cada la de la tabla es una entidad. El conjunto de todas las posibles las de la tabla es

producto cartesiano

entre los dominios de cada atributo:

D1 . . . Dn
Representacin de conjuntos de entidades dbiles
Sea

un conjunto de entidad dbil con atributos

A. La clave primaria de B est formada


m + n columnas a1 , . . . , am , b1 , . . . , bn .

depende
con

a1 , . . . , am .

B el conjunto de entidad fuerte del cual


b1 , . . . , bn . Se representa a A con una tabla

Sea

por los atributos

Representacin de conjuntos de interrelaciones


Sea

E1 , . . . , E n

un conjunto de interrelaciones entre las entidades

con atributos

r1 , . . . , rm .

Sean

a1 , . . . , an

el conjunto de atributos formado por la unin de las claves primarias de cada entidad participante. Se representa
a

con una tabla con columnas

a1 , . . . , an , r1 , . . . , rm .

Si la interrelacin relaciona un conjunto de entidades dbil y otro fuerte, la tabla de

no es necesaria, es

redundante.
Representacin de interrelaciones

Si la participacin de
unir las tablas de

1:N

A en R
R

entre entidades

es total (i.e. cada entidad en

debe participar en la relacin

R),

se pueden

Representacin de atributos compuestos


Sea el atributo compuesto
no para

x formado por x1 , . . . , xn . Se debe generar una columna para cada x1 , . . . , xn , pero

x.

Representacin de atributos multivaluados


Sea el atributo multivaluado

x.

Se debe crear una tabla

con una columna

que corresponde a

de las columnas son la clave primaria del conjunto de entidades o interrelacin del cual

y el resto

es un atributo.

Representacin de generalizacin
Hay dos mtodos:
1. Una tabla para la superclase + una tabla para cada subclase, que incluya una columna con la clave
primaria de la superclase
2. Si la generalizacin es disjunta y completa, no se crea una tabla para la superclase. Se crea una tabla para
cada subclase, que incluya todos los atributos de la superclase.
Representacin de agregacin
La tabla de la interrelacin
cada clave primaria de

R
A.

entre la agregacin

y el conjunto de entidades

incluye una columna por

4 Modelo Relacional
4.1 Estructura del modelo relacional
El modelo relacional es un ejemplo de modelo basado en registros. Usa un grupo de tablas para representar los datos
y las relaciones entre los datos. Cada tabla tiene mltiples columnas. Cada tabla contiene registros de un tipo en
particular. Cada registro tiene atributos (las columnas).

14

Figura 16: Tablas

Dominio

valores posibles de un conjunto. Ejemplo:

Dpadron = {1, 2, . . . 100000}

Existe un valor que es posible en cualquier dominio: el valor

nulo.

Este valor signica atributo desconocido

o atributo inexistente. Se puede prohibir, para un atributo, que este tenga el valor nulo, ya que puede causar
problemas al realizar consultas.

Esquema de relacin

descripcin de una relacin. Es el nombre de la relacin seguido de la lista de los atributos

con sus dominios. Ejemplo: Estudiante (Padrn, nombre, direccin, fechaIngreso)

Relacin

instancia de un esquema. Subconjunto del producto cartesiano de una lista de dominios. Sea el esquema

de relacin

Tabla

R,

denotamos a la instancia

mediante

r(R).

representacin de una relacin. Se pueden relacionar entre s al compartir atributos. Una tabla de

es un subconjunto de

Atributo

D1 D2 Dn .

atributos

Notar que al ser un conjunto, el orden no interesa.

nombre de cada columna de una tabla.

Esquema de BD relacional
Tupla

conjunto de esquemas de relacin.

miembro de una relacin. Son las las de una tabla.

4.2 Restricciones del modelo relacional


Regla de integridad de entidad
Ningn atributo de la clave primaria de un esquema de relacin puede tomar valor nulo.
Regla de integridad referencial
Si la relacin
de

en

incluye una clave fornea

que es la clave primaria

debe ser totalmente nulo o ser igual al valor de

de una relacin

en alguna tupla de

s,

entonces todo valor

s.

4.3 Operaciones del modelo relacional: lgebra relacional


Es un lenguaje

formal

procedural

que permite realizar consultas sobre un conjunto de relaciones, y produce

relaciones como resultado.

4.3.1 Operadores bsicos


Los siguientes operadores son linealmente independientes. Se utilizan para ltrar, cortar y combinar relaciones.
1. Operaciones unarias:

15

a)

Proyeccin (a1 ,...,an (r)).


Dados los atributos

a1 , . . . , an

que pertenecen a

r,

devuelve una relacin de esquema

{a1 , . . . , an }.

Se eliminan las tuplas repetidas.


b)

Seleccin (p (r)).
r0

Devuelve una relacin

con el mismo esquema que

p.

que satisfacen la condicin o el predicado

r,

en la que las tuplas son aquellas pertenecientes a

La condicin puede ser de dos estilos:

1) Atmica: expresin lgica simple del tipo que utiliza un operador de comparacin

{=, 6=, <, >, , }.


a

Atributo

Atributo

tal que

Se permiten dos tipos de expresiones:

atributo
constante

2) Compuesta: utiliza conectores and, or, not.


c)

Renombre (R(A1 ,A2 ,...,An ) (E)).


Cambia el nombre de la relacin

R,

y tambin cambia el nombre de sus atributos a

A1 , A2 , . . . , An .

2. Operaciones binarias:
a)

Unin (r
Sean

contiene

s).
s instancias homogneas 1 de las relaciones R
n tuplas. La unin se dene como:
[

respectivamente.

contiene

tuplas y

s = {x : x r x s}

Las tuplas repetidas se eliminan.


b)

Diferencia (r s).
Sean

instancias homogneas de las relaciones

respectivamente. La diferencia se dene como:

r s = {x : x r x 6 s}
c)

Producto cartesiano (r s).


Sean

instancias de las relaciones

respectivamente. El producto cartesiano es el conjunto de

tuplas que resulta de concatenar cada tupla de

con cada tupla de

s.

r s = {(r1 , s1 ) ; . . . ; (r1 , sm ) ; . . . ; (rn , s1 ) . . . , (rn , sm )}


Si

tiene

grados de

n tuplas
r y s.

tiene

tuplas,

rs

tendr

nm

tuplas. El grado de

rs

es la suma de los

4.3.2 Operadores secundarios


No proporcionan nuevas funcionalidades, solo simplican las consultas.
1.

Interseccin (r

s)

r1 y r2
r = {x : x r1 x r2 }

Dadas las relaciones

con el mismo esquema, devuelve una relacin

r
2.

con igual esquema, tal que

s r (r s)

Junta (join ) (r ./ s)
La junta de dos relaciones

r s,

P es una relacin de esquema igual


r s que satisfacen el predicado P .

segn un predicado

cuyas tuplas son el conjunto de tuplas de

al producto cartesiano

r ./p s p (r s)
a) Equi-join : dadas las relaciones

s,

es el join segn el predicado

r.Ai = s.Aj

1 Las relaciones homogneas tienen: (a) la misma cantidad de atributos, y (b) para todo i, el dominio del atributo i de r es el mismo
que el dominio del atributo i de s

16

b) Auto-join : dada la relacin


son aliases de

c ) Natural join (r

r,

es el join de

consigo mismo segn el predicado

1.Ai 2.Ai

donde

r.
s).

Requiere que haya atributos compartidos entre las relaciones

s,

y adems que

S 6= .
r s RS (r.c1 =s.c1 r.c2 =s.c2 r.ch =s.ch (r s))

El join natural es una operacin asociativa, por lo tanto,

(r s) t = r (s t).

Figura 17: Junta natural

3.

Divisin (r/s).
r R con n atributos y s S con m atributos, tal que m < n y S R. La divisin son
t tales que, multiplicadas por todas las las u de s, me dan las que estn en r. El esquema
es R S .

Sean las relaciones


todas las tuplas
de la divisin

r/s 1,...,nm (r) 1,...,nm ((1,...,nm (r) s) r)

Figura 18: Divisin

17

4.

Asignacin (r s)
r

no cambia al ejecutar operaciones de actualizacin sobre

s.

4.4 Operadores extendidos


1.

Proyeccin generalizada: permite operadores aritmticos como parte de una proyeccin.


F1 ,F2 ,...,Fn (E)
donde

es una expresin de lgebra relacional, y

atributos del esquema


2.

Fi

es una expresin aritmtica que involucra constantes y

E.

Funciones agregadas: son funciones que toman como parmetro un multiconjunto2 .


sum
count
min
max
avg
La forma general es:

G1 ,...Gn GF1 (A1 ),...,Fm (Am ) (E)


donde
y

Ai

una expresin de lgebra relacional;

Gi

es un atributo para formar grupos,

es un atributo. Las tuplas de la relacin resultado de

a) Todas las tuplas en un grupo tienen el mismo valor para


b) Tuplas en distintos grupos tienen distinto valor para
Para cada grupo, la relacin tendr una tupla
aplicar la funcin

Fi

Fi

es una funcin agregada,

se particionan en grupos de tal forma que

Gi i [1, n]

Gi i [1, n]

(g1 , . . . , gn , a1 , . . . , am ) donde
Ai del grupo.

para cada i,

ai

es el resultado de

en el multiconjunto, para el atributo

Ejemplo: dada la relacin EmpleadosPartTime(nombre,sucursal,salario), la siguiente expresin devuelve una


relacin con un solo atributo (sin nombre) y una sola la, que contiene el valor de la suma de todos los salarios:

Gsum(salario) EmpleadosP artT ime


Se puede usar el operador

distinct

para eliminar mltiples ocurrencias de un valor.

Ejemplo: con la misma relacin anterior, la siguiente expresin devuelve una relacin con un solo atributo (sin
nombre) y una sola la, que contiene la cantidad de sucursales:

Gcountdistinct(sucursal) EmpleadosP artT ime


Se puede usar el operador de

grupos

para particionar una relacin y computar una funcin agregada a cada

grupo.
Ejemplo: con la misma relacin anterior, la siguiente expresin devuelve una relacin con dos atributos (sin
nombres), que contiene la suma de salarios de cada sucursal:

sucursal Gsum(salario) EmpleadosP artT ime


3.

Join externo (outer join): es una extensin de la operacin de join que lidia con informacin faltante (null s).
a) Left outer join (r1
ninguna tupla de

./ r2 ): hace
r2 , les agrega

b) Right outer join (r1 ./


ninguna tupla de

2 Un multiconjunto

r1 ,

r2 ):

un join natural, y toma todas las tuplas de


valores null a los atributos de

r2 ,

hace un join natural, y toma todas las tuplas de

les agrega valores null a los atributos de

r1 ,

es un conjunto en el que un valor puede aparecer muchas veces.

18

r1

que no matchearon con

y los agrega al resultado.

r2

que no matchearon con

y los agrega al resultado.

c ) Full outer join (r1

./ r2 ):

combina las dos operaciones anteriores.

Figura 19: Ejemplo de full outer join

4.5 Actualizaciones a bases de datos


4.5.1 Delete
En lgebra relacional se expresa como

r r E,

donde

es una relacin y

es una expresin de consulta.

es una expresin de consulta, o una

Solo se pueden borrar tuplas completas, no valores de atributos.

4.5.2 Insert
En lgebra relacional se expresa como

r r E,

donde

es una relacin y

relacin constante con una sola tupla.

4.5.3 Update
En lgebra relacional se expresa como
de

r,

r F1 ,...,Fn (r),

donde

es una relacin y cada

o una expresin que involucra solo constantes y el nuevo valor de

r,

Fi

es, o el atributo i-simo

que da el nuevo valor del atributo i-simo.

4.6 Vistas (views )


Vista

relacin que no es parte del modelo lgico de la base de datos, pero que es visible para el usuario como una
relacin virtual.

CREATE VIEW v AS < expresion de consulta >


Limitaciones:
No se pueden ejecutar operaciones de update sobre una vista, salvo que la vista sobre la relacin

cumpla lo

siguiente:

SELECT, y no SELECT DISTINCT


La clusula WHERE no debe incluir a R en una consulta
La clusula WHERE no debe incluir a otra relacin
Los atributos del SELECT deben ser NOT NULL

Deben usar

El update solo se ejecutar sobre los atributos del

anidada

SELECT.

A las operaciones de delete sobre una vista se les pasa la clusula

WHERE de la vista (para borrar solo las tuplas

que se pueden ver en la vista).


Si las relaciones subyacentes son modicadas, la vista queda desactualizada. Por eso, en los motores, en una
expresin que involucra una vista, la relacin de la vista se recalcula al evaluar la expresin.

Vista materializada

vista que se evala y se almacena fsicamente. Los cambios a estas vistas se realizan de forma

incremental (no se reconstruye toda la vista desde cero).

19

5 Clculo relacional
COMPLETAR

6 Lenguajes de consulta
Query

expresin que solicita una porcin de informacin.

Hay dos tipos de lenguajes de consulta (query languages ):


1.

Procedurales:

el usuario indica una serie de operaciones a ejecutar sobre una base de datos para producir el

resultado deseado. Ejemplos: SQL.


2.

No procedurales:

el usuario indica la informacin deseada, sin especicar el procedimiento para obtenerla.

Ejemplos: Datalog (similar a Prolog).

7 Integridad y seguridad
En SQL, tenemos las siguientes restricciones:

NOT NULL:
UNIQUE:

indica que un atributo no puede tener el valor null

asegura que para todas las tuplas, el valor del atributo es nico

PRIMARY KEY:

asegura que una o varias columnas tengan una identidad nica, no nula

FOREIGN KEY:

asegura la integridad referencial de una tabla

CHECK:

asegura que el valor de un atributo satisface una condicin especicada

DEFAULT:

especica un valor por defecto cuando no se especique ninguo

7.1 Restricciones de dominio


CREATE DOMAIN color AS VARCHAR (10)
DEFAULT ' SinColor '
CHECK ( value IN ( ' SinColor ' , ' Azul ' , ' Rojo ' ));
CAST relacion . Atributo AS < dominio >;
DROP DOMAIN < dominio >;
ALTER DOMAIN < dominio >;

7.2 Restricciones de integridad referencial


Ejemplo:

CREATE TABLE hospital (


IdHosp SMALLINT ,
PRIMARY KEY ( IdHosp ));
CREATE TABLE medico (
IdHosp SMALLINT ,
IdMedico SMALLINT ,
Nombre VARCHAR (40)
PRIMARY KEY ( IdMedico ));
ALTER TABLE medico
ADD CONSTRAINT FK_medico
FOREIGN KEY IdHosp
REFERENCES hospital ( IdHosp );

20

7.2.1 Acciones referenciales


Son llamadas SQL que se ejecutan de forma automtica ante la eliminacin o actualizacin de una restriccin de
integridad referencial, para mantener la misma.

ALTER TABLE medico


ADD CONSTRAINT FK_medico
FOREIGN KEY IdHosp
REFERENCES hospital ( IdHosp )
ON [ DELETE | UPDATE ] [ SET DEFAULT | SET NULL | CASCADE | NO ACTION ];
De esta forma, cuando se elimine o actualice una la en la tabla
accin especicada en la tabla

Medico:

SET DEFAULT / SET NULL:


CASCADE:

Hospital,

el sistema de base de datos ejecutar la

se ja el valor predeterminado o nulo en la la referenciante.

al eliminar una tupla referenciada, las tuplas referenciantes son eliminadas. Al modicar la clave en

la tabla referenciada, el correspondiente valor de la clave fornea es actualizado.

7.3 Seguridad y autorizaciones


Para brindar autorizaciones, se brindan privilegios. Los privilegios son tipos de autorizaciones para leer, insertar,
actualizar o borrar datos. Tambin existe el privilegio

references,

que permite declarar claves forneas al crear

relaciones nuevas.
Con la opcin

WITH GRANT OPTION

se permite que el usuario que recibe el permiso se lo conceda a alguien ms. El

pase de autorizaciones de un usuario a otro se representa con un

grafo de autorizacin,

donde cada nodo es un

usuario (la raz es el DBA), y las aristas representan autorizaciones concedidas.


Un usuario tiene autorizacin s y solo s existe un camino desde la raz del grafo hacia el nodo usuario.

GRANT < privilegios >


ON <[ relacion | vista ] >
TO <[ usuario | rol ] >
[ WITH GRANT OPTION ];
Para eliminar autorizaciones se usa el comando

REVOKE.

Por defecto, este comando tiene el efecto de revocar los

privilegios que el usuario le brind a otros. Para evitar este efecto cascada, se usa la opcin

RESTRICT.

REVOKE < privilegios >


ON <[ relacion | vista ] >
FROM <[ usuario | rol ] >
[ RESTRICT ];
Para crear roles:

CREATE ROLE instructor ;

8 Triggers
Trigger

comando que el sistema ejecuta automticamente si un evento satisface cierta condicin. Son un conjunto

de acciones; por ejemplo, enviar un e-mail, ejecutar el rollback de una transaccin, o crear una copia de la base
de datos.

CREATE TRIGGER chequear_horario


[ BEFORE | AFTER ] [ UPDATE | INSERT | DELETE ] [ OF atributo ] ON curso
WHEN condicion
BEGIN
acciones
END

21

Parte II

Diseo de bases de datos


Objetivos:
Reducir la redundancia de la informacin (porque ocupa espacio y es ms difcil de actualizar): repeticin de
informacin en varias tuplas
Eliminar las anomalas:

De actualizacin: podra darse el caso de que actualizamos una tupla y no actualizamos otra tupla con el
mismo dato

De insercin: no es posible insertar ciertos datos sin insertar otros (posiblemente no relacionados)

De eliminacin: podra darse el caso de que eliminamos una tupla y, sin querer, borramos un dato importante

Devolver informacin rpidamente


Notacin:
Nombre de esquemas:

R, S, R1 , . . . , Rn , S1 , . . . , Sn

Instancias de esquemas:

r, s, r1 , . . . rn , s1 , . . . , sn

Conjuntos de atributos:

, ,

Atributos:
Tuplas:

A, B, C

t1 , t2

8.1 Dependencias funcionales


Dependencia funcional

sea el esquema

para cada par de tuplas

t1 , t2

Una dependencia funcional es


Un conjunto

Un conjunto

R, y sean R y R. La dependencia funcional


t1 [] = t2 [] , tambin se cumple que t1 [] = t2 [].

se cumple si

tal que

trivial si . En particular, es trivial.

es superclave de

si

es clave candidata de

K R.
R

si

J R

y adems

6 J/ R.

Una dependencia funcional, a diferencia de una diferencia multivaluada o de junta, prohbe que ciertas tuplas
existan.

Dependencias funcionales implicadas


por un conjunto de dependencias

sea el esquema

F,

R. Una dependencia funcional f est lgicamente implicada


r(R) que cumple F , tambin cumple f .

si para cada instancia de relacin

8.1.1 Axiomas de Armstrong


Se utilizan para hallar las dependencias funcionales implicadas, es decir,

F+

de un conjunto

F.

1. Regla de reexividad
Si

es un conjunto de atributos y

entonces

( ) F +

2. Regla de augmentacin
Si

es una dependencia funcional y

es un conjunto de atributos, entonces

( ) F +

3. Regla de transitividad
Si

es una dependencia funcional y

es otra dependencia funcional, entonces

Propiedades deducidas:

22

( ) F +

1. Regla de unin
Si se cumplen

entonces tambin se cumple

2. Regla de descomposicin
Si se cumple

entonces tambin se cumplen

3. Regla de pseudotransitividad
Si se cumplen

Teorema: R
XY

entonces tambin se cumple

satisface la dependencia funcional

X(R XY ),

es decir, si

X Y

s y slo s

satisface la dependencia de junta

R descompone sin prdida


(XY, X(R XY ))

sobre los esquemas

8.1.2 Clausura y superclaves


Clausura de F

sea

un conjunto de dependencias funcionales sobre el esquema

dencias funcionales implicadas por

R. F +

es el conjunto de depen-

F.
F + = { /F  }

Algoritmo 1

Computar

Entrada: relacin
Salida:
1.

R,

F+

conjunto de dependencias funcionales

F+

F+ = F

2. Repetir hasta que

F+

no vare:

a) Para cada dependencia funcional

en

F +:

Aplicar reglas de reexividad y aumentacin a

Agregar las dependencias funcionales restantes a


b) Para cada par de dependencias funcionales

f1 , f2

Si

f1 , f2

F+
en

pueden combinarse usando el axioma de transitividad:

Agregar la dependencia funcional resultante a


3. Devolver

F +:

F+

F+

Para un esquema

con

atributos, hay

2n+1

posibles dependencias funcionales.

Clausura de bajo F : es el conjunto de atributos de R que dependen funcionalmente de .


+
F
= {/ R F  }

Algoritmo 2

Computar

Entrada: relacin
Salida:
1.

R,

conjunto de dependencias funcionales

+
F

a+ = a

2. Repetir hasta que

a+

no vare:

a) Para cada dependencia funcional

B Y F:

Ba :
a+ = a+ Y
Si

3. Devolver

a+

Usos del algoritmo de clculo de la clausura de

a+ :
23

F,

atributo

1. Para determinar si

es una superclave de

R:

2. Para determinar si la dependencia funcional


3. Es una forma alternativa de calcular

Algoritmo 3

debe cumplirse que

F+

R,

+ .

F+

R
X Y F,

1. Dibujar el grafo de dependencias funcionales (si


2.

Vni =

atributos sin aristas entrantes

3.

Voi =

atributos que solo tienen aristas entrantes

4.

K = {}

5. Repetir hasta que no se pueda agregar nada a

CC =

conjunto de dependencias funcionales

Salida: claves candidatas de

todos los atributos de

b) Agregar a
c)

: debe cumplirse que

Clculo de claves candidatas mediante un grafo

Entrada: relacin

a)

+ = R .

CC

un atributo de

dibujar una arista entre

Y)

K:

Vni
R

Voi

que no est en

ni

Vni

K = K CC

6. Devolver

8.1.3 Cubrimiento minimal


Atributo extrneo

atributo de una dependencia funcional que se puede quitar de la misma sin cambiar la clausura

del conjunto de dependencias funcionales.


Sea el conjunto de dependencias funcionales

A es extrneo en si,
( A)+
F ). Formalmente:

El atributo
(B

A , y
F implica

lgicamente a

y la dependencia funcional

cuando lo sacamos de

B es extrneo en
( B)) Formalmente:

si, cuando lo sacamos de

B , y
El conjunto (F { }) { ( B)}

Cubrimiento minimal
F
Fmin

en

F.

la dependencia funcional se sigue cumpliendo

(F { B}) {( A) }

El atributo
(

la dependencia funcional se sigue cumpliendo

implica lgicamente a

Fmin para F es un conjunto de dependencias funcionales


Fmin , y Fmin implica todas las dependencias en F .

El cubrimiento minimal

implica todas las dependencias en

tales que

debe tener las propiedades siguientes:


Ninguna dependencia funcional en

Fmin

No existen dos dependencias funcionales

contiene un atributo extrneo

izquierdos deben ser nicos

24

en

Fmin

tales que

1 = 2 .

Es decir, los lados

Algoritmo 4

Clculo de cubrimiento minimal

Entrada: conjunto de dependencias funcionales


Salida: cubrimiento minimal

Fmin

1. Usar el axioma de la descomposicin para dejar un solo atributo en el lado derecho de cada dependencia
funcional.
2. Eliminar los atributos extrneos de los lados izquierdos.
Sea

Y B

F , con al menos dos atributos en Y . Sea Z igual


Z B , entonces reemplazar Y B con Z B .

una dependencia funcional en

algn atributo de menos. Si

implica a

pero con

3. Eliminar las dependencias funcionales redundantes (es decir, que se deducen de los axiomas de Armstrong).

Ejemplo: sea el conjunto de dependencias

F = {A BD, B CD, AC E}.

Calcular el cubrimiento minimal.

1. Dejar todos los lados derechos con un nico atributo.

Fmin = {A B, A D, B C, B D, AC E}
2. Eliminar todos los atributos redundantes del lado izquierdo.
a) Hay que analizar solamente la dependencia que tiene lado izquierdo compuesto:

AC E .

+
+
b) C es redundante en AC E ? Hay que vericar si E est en AF . Como AF = ABCDE , entonces
es redundante en AC E y podemos reemplazar esta dependencia funcional por A E .

Fmin = {A B, A D, B C, B D, A E}
3. Eliminar las dependencias redundantes.
Hay que revisar una por una todas las dependencias de
elimina de
A

Fmin

Fmin .

En caso de que una sea redundante, se la

y se sigue analizando el resto tomando como referencia el nuevo

es redundante en

Fc ?

Hay que vericar si

Fmin .

+
est en A
Fc {AD}

Fmin {A D} = {A B, B C, B D, A E}
A+
Fmin {AD} = ABCDE

Como

D Fmin {A D}, A D

es redundante

Fmin = {A B, B C, B D, A E}
Puede comprobarse que el resto de las dependencias funcionales no es redundante.

8.2 Primera forma normal (1FN)


Dominio atmico

los elementos del dominio se consideran unidades indivisibles.

Una relacin con esquema

R est en 1FN si los dominios de sus atributos son atmicos, y si no hay atributos similares

repetidos.

Ejemplo : la siguiente relacin no est en 1FN.


Ttulo Libro

Autor 1

Autor 2

Autor 3

Database System Concepts

Avi Silberschatz

Henry Korth

S. Sudarshan

Applied Cryptography

Bruce Schneier

NULL

NULL

Para normalizarla, hay que dividirla en dos relaciones.


ID libro

Ttulo Libro

Database System Concepts

Applied Cryptography

ID libro

Autor

Avi Silberschatz

Henry Korth

S. Sudarshan

Bruce Schneier

25

8.3 Descomposicin de una relacin


Descomposicin de una relacin
descomposicin de

Sea el esquema relacional

R.

El conjunto de esquemas

{R1 , R2 , . . . , Rn }

es una

si

R = R1 R2 Rn
Sea la relacin

r(R). Sean ri = Ri (r) para i = 1, 2, . . . , n. Es decir, {r1 , r2 , . . . , rn }


R en {R1 , R2 , . . . , Rn }. Siempre se verica que

es la base de datos que resulta

de descomponer

r r1 ./ r2 ./ . . . ./ rn
Es decir,

es un subconjunto de la junta de la descomposicin (la junta podra tener tuplas que no estn en

r).

Propiedades deseadas de la descomposicin:


1.

Sin prdida de informacin:

2.

Preservacin de dependencias

verica que

Una descomposicin que verica que

r = R1 (r) ./ R2 (r) ./ . . . ./ Rn (r).

F 0+ = F +

preserva dependencias, donde

F 0 = F1 F2 Fn

son

las dependencias proyectadas.


Esta propiedad es deseable porque signica que podemos chequear si se cumple la dependencia con solo
vericarla en una relacin individual, y no necesitamos hacer un join de las relaciones de la descomposicin.
3. Poca o nula redundancia de informacin

Algoritmo 5

Clculo de la proyeccin de dependencias

R,

Entrada: relacin

relacin

Ri ,

Fi

1.

Fi = {}

2. Para cada conjunto de atributos


a) Calcular
b)

Algoritmo 6

que es un subconjunto de atributos de

Ri :

XF+

Fi = Fi {X A},

3. Devolver

tal que

A XF+

A Ri

Fi

Clculo para saber si una descomposicin preserva una dependencia

Entrada: dependencia funcional

A B,

conjunto de dependencias funcionales

Salida: verdadero si la descomposicin preserva


1.

F
Ri (Fi )

conjunto de dependencias funcionales

Salida: conjunto de dependencias funcionales que se verican en

F,

descomposicin

{R1 , . . . , Rn }

AB

Z=A

2. Repetir hasta que


Para cada
3. Si

B Z:

no vare o hasta que

incluya a

B:

h
i
+
Ri : Z = Z (Z Ri ) Ri

devolver verdadero

4. Si no: devolver falso.

8.3.1 Descomposicin SPI en 2 relaciones


Sea el esquema relacional
sicin de

R.

R, y sea F

el conjunto de dependencias funcionales sobre

R. Sean R1

R2

una descompo-

Esta descomposicin es sin prdida de informacin (SPI) si al menos una de las siguientes dependencias

funcionales est en

F +:

R1 R2 R1 R2
26

R1 R2 R2 R1
R(A, B, C, D, E, F )
F = {A BD, B CD, AC E}?
Ejemplo: La descomposicin de

en

R1 = (A, D, E, F )

R2 = (B, C, D)

es SPI respecto de

R1 R2 = D
R1 R2 = AEF
R2 R1 = BC
Como

DF+ = {D},

vemos que no se cumplen ni

R1 R2 R1 R2

ni

R1 R2 R2 R1 .

Por lo tanto,

esta descomposicin no es SPI.

8.3.2 Descomposicin SPI en ms de 2 relaciones


Chase Tableau

El algoritmo

se utiliza para vericar si una descomposicin de

en

R1 , . . . , Rk (k > 2)

es SPI.

Es decir, si la proyeccin de un esquema restringido por dependencias en una descomposicin, puede recuperarse
haciendo el join de las proyecciones.

Algoritmo 7

Algoritmo Chase Tableau

R, conjunto de dependencias
{R1 , . . . , Rn } descompone SPI.

Entrada: esquema de relacin


Salida: verdadero si

1. Armar una matriz

T (0)

con las relaciones

Ri

funcionales

en las las (i

F,

descomposicin

{R1 , . . . , Rk }

= 1, . . . , k ) y los atributos Aj

en las columnas. Cada

elemento de la matriz tendr valor:

(
mij =
2.

aj
bij

si
si

Aj R i
Aj 6 Ri

(variable distinguida)
(variable ligada)

i=1

3. Obtener

T (i) :

Para cada dependencia funcional

Si

tuplas

t1 , t2

tal que

X Y F:

t1 [X] = t2 [x],

realizar un cambio de variable en

t1 [Y ]

y en

t2 [Y ]

Variables ligadas por distinguidas


Si hay dos ligadas, poner la de menor subndice

4. Si hay una la slo con variables distinguidas, devolver verdadero.


5. Si

T (i) = T (i1)

6. Si no,

ii+1

y adems no hay una la slo con variables distinguidas, devolver falso.
y volver a 3.

R(A, B, C, D) con F = {A B, B C, CD A}.


R1 = (A, D), R2 = (A, C), R3 = (B, C, D). La descomposicin es SPI?

Ejemplo: sea el esquema de relacin

R1 (A, D)
R2 (A, C)
R3 (B, C, D)
Aplicamos

A B.

Como

a1

A
a1
a1
b31

B
b12
b22
a2

C
b13
a3
a3

es igual en las primeras dos las, pero

D
a4
b24
a4
b12

segunda la.

R1 (A, D)
R2 (A, C)
R3 (B, C, D)

A
a1
a1
b31
27

B
b12
b12
a2

C
b13
a3
a3

Sea la descomposicin

D
a4
b24
a4

b22

no, cambiamos

b22

por

b12

en la

Aplicamos

B C.

Las las 1 y 2 coinciden en

b12

pero no en

R1 (A, D)
R2 (A, C)
R3 (B, C, D)

A
a1
a1
b31

c.

B
b12
b12
a2

Entonces, cambiamos

C
a3
a3
a3

b13

por

a3

en la la 1.

D
a4
b24
a4

Aplicamos

CD A. Las las 1 y 3 tienen mismo valor para c y d, pero distinto valor para a. Por lo tanto, cambiamos

b31

en la tercera la.

a1

por

R1 (A, D)
R2 (A, C)
R3 (B, C, D)

A
a1
a1
a1

En este punto notamos que la la 3 tiene valores de la forma

B
b12
b12
a2
aj .

C
a3
a3
a3

D
a4
b24
a4

Como son todas variables distinguidas, la descom-

posicin es sin prdida de informacin.

8.4 Segunda forma normal (2FN)


Atributo primo
Sea

atributo de

una relacin y

funcional

XY

que pertenece a una clave candidata.

el conjunto de sus dependencias funcionales.

que est en en

F +,

estar en 2FN si para toda dependencia

se cumple al menos una de las siguientes condiciones:

1.

XY

2.

es un atributo primo,

3.

no es un subconjunto de una clave candidata

es trivial

Ejemplo : la siguiente relacin no est en 2FN porque Direccin de local depende slo de ID de local, que no es una
clave.
ID de cliente

ID de local

Direccin de local

Los Angeles

San Francisco

Los Angeles

F = {Id cliente, Id local Direccion local; Id local Direccion local}.

La segunda dependencia funcional no

es trivial, el lado derecho no pertenece a una clave candidata, y el lado izquierdo es un subconjunto de la clave
candidata.
Para normalizarla, hay que dividirla en dos relaciones.
ID de cliente

ID de local

ID de local

Direccin de local

Los Angeles

San Francisco

8.5 Forma Normal Boyce-Codd (FNBC)


Un esquema de relacin

est en FNBC con respecto a un conjunto de dependencias funcionales

F+

las dependencias funcionales en

es trivial (es decir,

es una superclave para

de la forma

donde

R
28

R,

si, para todas

se cumple alguna de las siguientes:

Propiedades:
Cualquier relacin de dos atributos est en FNBC
Brinda eliminacin de anomalas
Brinda una descomposicin SPI
No garantiza que se preserven las dependencias funcionales
Para vericar si una dependencia funcional

Para vericar si una relacin

o no incluya atributos de

Algoritmo 8

Ri ,

Ri

est en FNBC, para cada subconjunto

o incluya todos los atributos de

de

+ y ver si es R.
F no violan FNBC.
atributos de Ri , vericar

que

Ri .

Descomposicin FNBC

Entrada: una relacin

R,

un conjunto de dependencias funcionales

Salida: una descomposicin


1.

viola FNBC, alcanza con computar

est en FNBC, alcanza con ver si las dependencias de

Para vericar si una descomposicin

+
F

= {R1 , . . . , Rn }

tal que

Ri

est en FNBC con respecto a

Fi

=R

2. Repetir hasta que no haya esquemas en

que violen FNBC

XY

a) Elegir una dependencia funcional


b) Descomponer

que viole FNBC sobre

en dos relaciones:

R1 (XY )
R2 (X(R XY ))
c ) En
3. Devolver

reemplazar

por

R1

R2

8.6 Tercera forma normal (3FN)


A statement of Codd's denition of 3NF, paralleling the traditional pledge to give true evidence in a
court of law, was given by Bill Kent: "[Every] non-key [attribute] must provide a fact about the key, the
whole key, and nothing but the key." A common variation supplements this denition with the oath: "so
help me Codd".
Requiring existence of "the key" ensures that the table is in 1NF; requiring that non-key attributes be
dependent on "the whole key" ensures 2NF; further requiring that non-key attributes be dependent on
"nothing but the key" ensures 3NF.
Un esquema de relacin

est en 3FN con respecto a un conjunto de dependencias funcionales

dependencias funcionales en

F+

es trivial (es decir,

es una superclave para

es un atributo primo

Dicho de otra forma,

de la forma

donde

R,

si, para todas las

se cumple alguna de las siguientes:

no debe tener dependencias funcionales transitivas: todos los atributos que no son clave

deben depender funcionalmente de la clave primaria.


Propiedades:
No tiene prdida de informacin
No hay prdida de dependencias
No garantiza la eliminacin de anomalas (es decir, tiene redundancia)
Es menos estricta que FNBC (FNBC

= 3FN)
29

Algoritmo 9

Descomposicin 3FN

Entrada: una relacin

R,

un cubrimiento minimal

Salida: una descomposicin


1.

= {R1 , . . . , Rn }

Fmin
Ri

tal que

est en 3FN con respecto a

Fi

= {}

2. Para cada dependencia funcional

X Y Fmin :

= Ri (XY )
3. Si existen

Ri , Rj

Ri Rj :

tal que

= Ri
4. Si ninguna relacin es una superclave de

R,

es una clave para

=K
5. Devolver

Ejemplo : la siguiente relacin no est en 3FN porque Fecha de nacimiento del ganador depende slo de Ganador,
que depende de la clave candidata {Torneo, Ao}.
Torneo

Ao

Ganador

Fecha de nacimiento de ganador

Indiana Invitational

1998

Al Fredrickson

21 Julio 1975

Cleveland Open

1999

Bob Albertson

28 Septiembre 1968

Des Moines Masters

1999

Al Fredrickson

21 Julio 1975

Indiana Invitational

1999

Chip Masterson

14 Marzo 1977

F = {T orneo, A
no Ganador, Ganador F echa nacimiento ganador}.

La segunda dependencia funcional no

es trivial, el lado derecho no pertenece a una clave candidata (no es atributo primo), y el lado izquierdo no es una
superclave.
Para normalizarla, hay que dividirla en dos relaciones.
Torneo

Ao

Ganador

Indiana Invitational

1998

Al Fredrickson

Cleveland Open

1999

Bob Albertson

Des Moines Masters

1999

Al Fredrickson

Indiana Invitational

1999

Chip Masterson

Ganador

Fecha de nacimiento

Chip Masterson

14 Marzo 1977

Al Fredrickson

21 Julio 1975

Bob Albertson

28 Septiembre 1968

8.7 Dependencias multivaluadas


Una dependencia multivaluada expresa que dos conjuntos de atributos en un esquema son mutuamente independientes.
Sean los conjuntos de atributos disjuntos
dependencia multivaluada

AB

indica que si

B de la relacin R(A, B, U A B). Sean las tuplas t1 y t2 . La


t1 [A] = t2 [A], entonces podemos encontrar tuplas t3 y t4 tales que:

t1 [A] = t2 [A] = t3 [A] = t4 [A]


t3 [B] = t1 [B]
t3 [U A B] = t2 [U A B]
t4 [B] = t2 [B]
t4 [U A B] = t1 [U A B]

30

Figura 20: Dependencia multivaluada

Ejemplo : sea

R(curso, libro, prof esor)

una relacin que indica una lista de cursos universitarios, los libros que se

usan en el curso, y los profesores que la dictan.


Curso

Libro

Profesor

lgebra II

David Lay - Algebra Lineal

Acero

lgebra II

Strang - Algebra Lineal

Acero

lgebra II

David Lay - Algebra Lineal

Piortrowsky

Algebra II

Strang - Algebra Lineal

Piortrowsky

Dado que los profesores de un curso y los libros de un curso son independientes entre s, esta relacin tiene una DMV.
Si tuvisemos que agregar un nuevo libro al curso lgebra II, deberamos agregar una tupla para cada profesor del
curso. Es decir, formalmente, hay dos DMV en esta relacin:

{curso}  {libro}

{curso}  {prof esor}.

Esta

relacin exhibe redundancia.

Dependencia multivaluada

no existen en el esquema original pero son satisfechas por la descomposicin del mismo.

8.7.1 Propiedades de las DMVs




es

trivial si si R = .

Una dependencia multivaluada garantiza que ciertas tuplas existan.

Regla de transitividad multivaluada: Si 

 c,

entonces

c

Regla de replicacin: si , entonces  . La inversa no es cierta.


Regla de

interaccin3 : si

(

Z

Regla de aumentacin: si 

y existe un

tal que

(
Z
=

, entonces

w  .

entonces

Regla del complemento: si  , entonces  R


Regla de unin: si  , y  c, entonces  c
Regla de descomposicin: si  , y  c, entonces
Regla de pseudotransitividad: si 
Si

R = {A1 , . . . , An , B1 , . . . , Bm },

Teorema:

c  ,

 c
c

c

entonces

c  c

{A1 , . . . , An }  {B1 , . . . , Bm }

entonces

las nicas DMVs implicadas por un conjunto de DFs son de la forma

R XY X

X  Y,

donde

La relacin

Teorema: las nicas DFs implicadas por un conjunto de DMVs son las triviales.
Teorema: un conjunto de DFs de tipo xi yi slo implica DMVs de tipo xi  yi .
Teorema: sea r una instancia del esquema de relacin R, X, Y subconjuntos de R, y Z = R XY .
satisface la DMV

3 Esta

Y X+

XY

s y solo s

R1 = XY

R2 = X Z

regla puede agregar dependencias funcionales a M

31

descomponen sin prdida de informacin a

r.

Algoritmo 10

Vericar si

Entrada: relacin

satisface la dependencia multivaluada

r(R)
XY

Salida: verdadero si la dependencia multivaluada

1. Proyectar
2. Calcular
3. Si

en

R1 (XY )

se satisface

R2 (X, R XY )

R1 ./ R2

r = R1 ./ R2

Algoritmo 11

devolver verdadero

Proyeccin de dependencias funcionales y multivaluadas

Entrada: conjunto de dependencias funcionales y multivaluadas


Salida: conjunto de dependencia funcionales y multivaluadas
1.

XY

Di

D+ ,

descomposicin

que se satisfacen en

{R1 , . . . , Rn }
Ri

Z = {}
D+

2. Agregar a

las dependencias funcionales de

3. Agregar a

las dependencias multivaluadas de la forma

4. Devolver

que solo incluyan atributos de

A B Ri ,

donde

Ri

AB

est en

D+

A Ri

8.7.2 Preservacin de dependencias multivaluadas


R en los esquemas R1 , . . . , Rn es una descomposicin que preserva las dependencias con
D de dependencias funcionales y multivaluadas si, para cada relacin r1 (R1 ), . . . , rn (Rn ) tal
i, ri satisface Di , entonces existe una relacin r(R) que satisface D y para el cual ri = Ri (r) para

Una descomposicin de
respecto a un conjunto
que para cada
todo

i.

8.8 Base minimal de Dependencias e Implicacin de DMVs


Base minimal sea la coleccin de conjuntos S = {S1 , . . . , Sp } donde U = S1 . . . Sp . La base minimal de S
Base(S)

y es una particin de

1. Cada

Si

U {T1 , . . . , Tq }

es la unin de algunos de los

2. No existe una particin de


Ejemplo: sea

{Y /M |= X  Y }La

sea

Tj .

con menos elementos que cumpla la primera propiedad.

S = {ABCD, CDE, AE}

Base de dependencias:

es

tal que:

U = ABCDE .

Entonces la base de

es

Base(S) = {A, B, CD, E}.

un conjunto de dependencias multivaluadas sobre

base de dependencias de

con respecto a

R,

y sea

X R.

Sea

G =

es:

Bdep(X) = Base (G)


M = {A  BC, DE  C} un conjunto de dependencias
G = {A, BC, DE, C, BDE, B, BCDE, CDE}y la base de A es

Ejemplo: sea

Base(A) = {A, B, C, DE}


.

32

multivaluadas sobre

R(ABCDE).

Entonces

Algoritmo 12

Clculo de la base de dependencias de

Entrada: conjunto de dependencias multivaluadas


Salida:
1.

vare:

V T

Y  Z M tal que (V Y = )
V por {V Z} y {V Z}

Reemplazar

XY

pertenece a

Ejemplo: sea

M+

s y solo s

Z 6= )

de dependencias multivaluadas, una dependencia multivaluada

se puede expresar como la unin de algunos componentes de

R(A, B, C, D, E, I), M = {A  EI, C  AB}.

La base de dependencias de

AC

Se cumple

AC  BI

Bdep(X).

es:

T (0) = BDEI
a)

V = BDEI .

b)

V Z = EI

c)

V Z = BD

Entonces

A  EI , Y = A, Z = EI

T (1) = {EI, BD}


a) Si

3.

y (V

Bdep(X) = T {A/A X}

Implicacin de dependencias: dado un conjunto M

2.

T =RX

Si

1.

conjunto de atributos

Bdep(X)

2. Mientras

3.

M,

V = EI , Y = A, Z = EI , V Z = EI , V Z = {}

b)

V = BD.

c)

V Z =B

d)

V Z =D

Entonces

y no nos aporta nada.

C  AB , Y = C , Z = AB

T (2) = {EI, B, D}

Bdep(AC) = {EI, B, D, A, C}
de componentes de Bdep(AC).

y entonces

AC  BI

no se cumple porqueBI no se puede expresar como la unin

8.9 Cuarta forma normal (4FN)


Un esquema de relacin

est en 4FN con respecto a un conjunto de dependencias funcionales y multivaluadas

si, para todas las dependencias multivaluadas en

M+

de la forma

 ,

donde

R,

de las siguientes:

es trivial

es una superclave para

Propiedades:
No tiene prdida de informacin
Una descomposicin 4FN no garantiza la preservacin de dependencias

Ejemplo : la siguiente relacin no est en 4FN. La clave es

{N V uelo, Dia de la semana, T ipo de avi


on}.

N Vuelo

Dia de la semana

Tipo de avin

106

Lunes

B737

106

Martes

B737

106

Lunes

A380

106

Martes

A380

33

se cumple alguna

F = {N V uelo  Dia de la semana, N V uelo  T ipo de avi


on}.
trivial, y el lado izquierdo no es una superclave de R.

La primera dependencia multivaluada no es

Para normalizarla, hay que dividirla en dos relaciones.


N Vuelo

Dia de la semana

N Vuelo

Tipo de avin

106

Lunes

106

B737

106

Martes

106

A380

8.9.1 Descomposicin SPI en 2 relaciones


Sea el esquema relacional
y

R2

R,

una descomposicin de

y sea

R.

el conjunto de dependencias funcionales y multivaluadas sobre

siguientes dependencias multivaluadas est en


1.

R1 R2  R1 R2

2.

R1 R2  R2 R1

R.

Sean

R1

Esta descomposicin es sin prdida de informacin (SPI) si al menos una de las

M +:

8.9.2 Descomposicin SPI en ms de 2 relaciones


El algoritmo es idntico al de descomposicin en BCFN, excepto que se usan dependencias multivaluadas y se restringe

Ri

al conjunto

Algoritmo 13

M +.
Descomposicin 4FN

Entrada: una relacin

R,

un conjunto de dependencias multivaluadas

Salida: una descomposicin


1.

= {R1 , . . . , Rn }

tal que

Ri

M+

est en 4FN con respecto a

Mi

=R

2. Repetir hasta que no haya esquemas en

a) Elegir una dependencia multivaluada


b) Descomponer

que violen 4FN

XY

que viole 4FN sobre

en 2 relaciones:

R1 (XY )
R2 (X(R XY ))
c ) En
3. Devolver

reemplazar

por

R1 , R2

9 Dependencias de junta
Dependencia de junta
junta

sea un esquema de relacin

(R1 , . . . , Rn )

y sea la descomposicin

R1 , . . . , Rn .

La dependencia de

restringe el conjunto de relaciones posibles a aquellas para las cuales

R1 , . . . Rn

es una

descomposicin sin prdida de informacin.


Formalmente, si

R = R1 Rn ,

una relacin

r(R)

satisface la dependencia de junta

(R1 , . . . , Rn )

si

r = R1 (r) ./ ./ Rn (r)
(R1 , . . . , Rk ) se satisface para R si restringe los valores de toda instancia r(R) tal que,
t1 , . . . , tk que satisfacen ti [Ri Rj ] = tj [Ri Rj ], luego tambin existe en r otra tupla tk+1
tk+1 [Ri ] = ti [Ri ] para 1 i k .

La dependencia de junta
si existen

denida por

tuplas

Propiedades:
Si una de las

Ri

es

R,

la dependencia de junta es trivial.

Toda dependencia de junta

(R1 , R2 )

es equivalente a la dependencia multivaluada

34

R1 R2  R2 .

No existen un conjunto de reglas para inferir dependencias de juntas.

Teorema: R satisface la dependencia multivaluada X  Y


X Y

X(R XY ),

Teorema:

es decir, si

si una relacin

s y slo s

R descompone sin prdida sobre los esquemas


(XY, X(R XY ))

satisface la dependencia de junta

puede descomponerse SPI en 3 esquemas, pero no puede hacerlo sobre 2, esa relacin

solo satisface DMVs triviales.

Ejemplo : sea la relacin

R(A, B, C)

y la dependencia de junta

AC .
BC , |{z}
|{z}
AB , |{z}
R1

R2

Qu tupla debe tener

para

R3

satisfacer la misma?

r
t1
t2
t3

Dado que se cumplen:

t1 [R1 R2 ] = t2 [R1 R2 ] = 2
t1 [R1 R3 ] = t3 [R1 R3 ] = 1
t2 [R2 R3 ] = t3 [R2 R3 ] = 7
Entonces para que se satisfaga la dependencia de junta deber existir una tupla

t4

tal que:

t4 [R1 ] = t1 [R1 ] = {1, 2}


t4 [R2 ] = t2 [R2 ] = {2, 7}
t4 [R3 ] = t3 [R3 ] = {1, 7}
Es decir, deber existir la tupla

(1, 2, 7).

9.1 Dependencias de junta embebidas


Dependencia de junta embebida
(R1 , . . . , Rp )
Notar que

si

S (r)

Un esquema de relacin

r(R) satisface la dependencia de junta embebida DJE


(R1 , . . . , Rp ), donde S = R1 R2 . . . Rp .

satisface la dependencia de junta

puede no satisfacer la DJE.

10 Quinta forma normal (5FN)


Una relacin

D+

de la forma

(R1 , . . . , Rn )

donde cada

al menos una de las siguientes condiciones se cumple:


La dependencia de junta
Cada

Ri

D, si
R = R1 Rn ,

est en 5FN con respecto a un conjunto de dependencias funcionales, multivaluadas y de junta

para todas las dependencias de junta en

(R1 , . . . , Rn )

es una superclave de

es trivial

Propiedades:
Toda relacin que est en 5FN est en 4FN, y est en BCNF.
Una descomposicin 5FN no garantiza la preservacin de dependencias.

35

Ri R

Algoritmo 14

Descomposicin 5FN

Entrada: una relacin

R,

un conjunto de dependencias

Salida: una descomposicin


1.

= {R1 , . . . , Rn }

tal que

D+
Ri est

en 5FN con respecto a

Di

=R

2. Repetir hasta que no haya esquemas en


a) Elegir una dependencia de junta
b) Descomponer

en

que violen 5FN

(DJ1 , . . . DJk )que

viole 5FN sobre

relaciones:

R1 (DJ1 )
Rk (DJk )
,

c ) En
3. Devolver

Ejemplo : sea

reemplazar

por

R1 , . . . , R k

(ABCD, CDE, BDI)

(AB, BCD, AD)


D=

A BCDE

BC AI

Las clave candidata de

sobre el esquema de relacin

son, por las dependencias funcionales,

no est en 5FN porque la dependencia de junta

superclaves de

R1

{A, BC}.

(ABCD, CDE, BDI)

no es trivial, y

CDE, BDI

no son

R.

La descomposicin

Para

R = ABCDEI .

R1 = ABCD
R = R2 = CDE

R3 = BDI

s est en 5FN porque:

aplica la dependencia de junta

(AB, BCD, AD),

lo tanto est en 5FN.


Para

R2

solo aplican dependencias de junta triviales.

Para

R3

solo aplican dependencias de junta triviales.

10.1 Implicacin de dependencias


Utilizar el algoritmo Chase Tableau.

36

y todos los miembros son superclaves de

R,

por

37

Parte III

SQL

Componentes:
1. DDL (Data Denition Language )
2. DML (Data Manipulation Language )
3. CL (Control Language )

<catalogo>.<esquema>.<relacin>

Para identicar unvocamente a una relacin, se utiliza el formato

11 DDL
DDL

Lenguaje de denicin de datos para especicar el esquema de la base de datos, eliminar relaciones, modicar
esquemas, crear vistas, crear restricciones de integridad, especicar derechos de acceso, etc.

11.1 Tipos de dominios


char(n):

texto de longitud

varchar(n):

n
n

texto de longitud variable, con un mximo de

nvarchar(n):

texto de longitud variable, con un mximo de

caracteres

caracteres, utilizando el formato Unicode

int
smallint
numeric(p,d): p

dgitos con signo, y

de los

dgitos estn a la derecha del punto decimal.

real, double precision


float(n)
date
time
timestamp
clob(n):

character large object de

blob(n):

binary large object de

bytes

bytes

11.2 Create table


CREATE TABLE r ( A1 D1 , A2 D2 , ... , An Dn ,
< restriccion - integridad1 > ,
... ,
< restriccion - integridadK >);
La instruccin anterior crea una tabla llamada r con atributos

Ai ,

Di

es el dominio del atributo

Ai .

Las restricciones de integridad pueden ser:

primary key (Aj1 , Aj2 , . . . , Ajm ):

los atributos

Aji ,

con

i [1, m]

No pueden ser null, y deben ser nicos.

check (P ):

todas las tuplas de

deben satisfacer el predicado

foreign key:

38

P.

forman la clave primaria de cada tupla.

FOREIGN KEY ( atr ) REFERENCES rel


ON [ update | delete ] [ cascade | set null | set default ];
Se establece que el atributo

atr

es una clave primaria en la relacin

rel.

si se produce una actualizacin o un borrado de dicho valor en la relacin

Cascade:
Set null:

se actualiza/elimina la tupla en esta relacin


la clave fornea se establece en null

Set default:

assert:

Se puede especicar lo que sucede

rel:

la clave fornea se establece en su valor por default

dene una restriccin aplicable a varias tablas.

CREATE ASSERTION nombre_asercion


CHECK P

11.3 Drop table


La instruccin

DROP TABLE r

elimina todas las tuplas de la tabla

y el esquema de relacin

r.

11.4 Alter table


La instruccin puede utilizarse para agregar atributos nuevos (con valor null ) o para eliminarlos.

ALTER TABLE r
ADD < Atributo > < Dominio >;
ALTER TABLE r
DROP < Atributo >;

Diccionario de datos

Contiene

metadatos

(informacin sobre los datos), en particular, sobre el esquema de la

misma.

12 DML
DML

Lenguaje de manipulacin de datos para expresar las consultas a la base de datos.

Operaciones CRUD (Create, Read, Update, Delete )

lgebra relacional

SQL

attr (r)
cond (r)
rs

SELECT attr FROM r


SELECT * FROM r WHERE cond
SELECT * FROM r,s

La expresin

SELECT a1 , a2 , ... , an
FROM r1 , r2 , ... , rm
WHERE p ;
es equivalente a la expresin

a1 ,a2 ,...,an (p (r1 r2 rm )).

El resultado de una expresin SQL


la clusula

SELECT DISTINCT.

puede

contener tuplas duplicadas. Para eliminar los duplicados, se utiliza

Las funciones agregadas no se pueden componer. Por ejemplo,


Una clusula de tipo

FROM.

SELECT *

El operador de renombre
El operador

like

max(count(*))

no es vlido.

indica que se seleccionan todos los atributos de las relaciones en la clusula

as: SELECT viejo-nombre AS nuevo-nombre

se puede usar dentro de una clusula

especicado con los siguientes caracteres especiales:

39

where

para buscar valores que cumplan un patrn,

%:

matchea cualquier sub string

_:

matchea un caracter cualquiera

El operador

order by <atributo(s)> [asc|desc]

ordena el resultado de una consulta por uno o varios de

los atributos, de forma ascendente o descendente (ascendente por default).


Operadores sobre conjuntos:

Union
Intersect
Except
El operador

group by

permite agrupar tuplas en base a uno o ms atributos (las tuplas con el mismo valor

select,

para los atributos en esta clusula se ponen en un mismo grupo). Los atributos en la clusula
fuera de las funciones agregadas, deben estar en el operador

group by.

por

La sintaxis es:

SELECT expr1 , ... , exprN , funcionAgregada ( expr )


FROM tablas
WHERE condiciones
GROUP BY expr1 , ... , exprN ;
Ejemplo: encontrar el promedio del saldo de las cuentas en cada sucursal de un banco.

SELECT sucursal - nombre , avg ( saldo )


FROM cuentas
GROUP BY sucursal - nombre ;
El operador

having

permite seleccionar a grupos formados con

quier atributo que est presente en la clusula

having

group by

que cumplan una condicin. Cual-

sin agregar, debe aparecer en el operador

group by.

SELECT columna , funcion_agregada ( columna )


FROM tabla
WHERE columna operator value
GROUP BY columna
HAVING funcion_agregada ( columna ) operator value ;
Ejemplo: encontrar los nombres de las sucursales del banco que tengan un promedio general de saldo mayor a
$1200.

SELECT sucursal - nombre


FROM cuentas
GROUP BY sucursal - nombre
HAVING avg ( saldo ) > 1200

Nota: si se utilizan el operador where y el operador having, primero se aplica el where y luego se ltra por having.

12.1 Consultas anidadas


En una consulta anidada, el

select interno puede tener variables de tuplas denidas dentro del select, o en cualquier

consulta que incluya a sta.


El conector

select.

in

permite vericar la pertenencia de un valor a un conjunto que es resultado de una clusula

De forma equivalente, existe el conector

not in.

Ejemplo: encontrar los nombres de los clientes que tienen un prstamo y una cuenta en el banco.

SELECT DISTINCT cliente - nombre


FROM pidio - prestamo
WHERE cliente - nombre IN ( SELECT cliente - nombre
FROM tiene - cuenta );
El operador de comparacin

some

en una clusula

where

de un

select

externo devuelve verdadero si el valor

del atributo en cuestin es mayor o menor que al menos un valor de la clusula

select

interna.

Ejemplo: encontrar los nombres de las sucursales del banco que tienen activos mayores que los de al menos una
sucursal en Brooklyn.

40

SELECT sucursal - nombre


FROM sucursales
WHERE activos > SOME ( SELECT activos
FROM sucursales
WHERE sucursal - nombre = ' Brooklyn ' );
El operador de comparacin

all

en una clusula

where

de un

select externo devuelve


select interna.

verdadero si el valor

del atributo en cuestin es mayor a todos los valores de la clusula

Ejemplo: encontrar los nombres de las sucursales del banco que tienen activos mayores que los todas las
sucursales en Brooklyn.

SELECT sucursal - nombre


FROM sucursales
WHERE activos > ALL ( SELECT activos
FROM sucursales
WHERE sucursal - nombre = ' Brooklyn ' );
El operador

any

devuelve verdadero si existe al menos un valor para

Ejemplo: encontrar los clientes que pidieron un prstamo de monto mayor a al menos los activos de una sucursal.

SELECT cliente - nombre


FROM pidio - prestamo
WHERE cantidad > ANY ( SELECT activos
FROM sucursales );
El operador

exists

devuelve verdadero si la consulta interna no es vaca.

Ejemplo: encontrar los clientes que tienen una cuenta y un prstamo en el banco.

SELECT cliente - nombre


FROM pidio - prestamo
WHERE EXISTS ( SELECT *
FROM tiene - cuenta
WHERE pidio - prestamo . cliente - nombre = tiene - cuenta . cliente - nombre );
El operador

unique

devuelve verdadero si la consulta interna no contiene tuplas duplicadas.

SQL no ofrece en forma nativa la posibilidad de ejecutar el operador divisin. Sin embargo, este se puede implementar
usando consultas anidadas.
Ejemplo: dados los siguientes esquemas relacionales

Estudiante ( Enro , Enombre , Carrera , Anio_cursa , Edad )


Curso ( Cnombre , Horario , Aula , Pid )
Cursa ( Enro , Cnombre )
Profesor ( Pid , Pnombre , departamento )
Hallar los nombres de todos los profesores que ensean en todas las aulas en las que se dicta algn curso.

SELECT P . Pnombre
FROM Profesor P
WHERE NOT EXISTS ( SELECT C. Aula

FROM Curso C1
WHERE NOT EXISTS ( SELECT *
C2 . Pid = P . Pid ));

FROM Curso C2
WHERE C2 . Aula = c1 . Aula AND

12.2 Delete
Sintaxis para el borrado de tuplas de la relacin

para las cuales

es verdadera:

DELETE FROM r
WHERE P
Slo se borra de una relacin.
Slo se borran tuplas (no atributos de tuplas).
Primero se buscan todas las tuplas que satisfacen

P,
41

y luego se borran todas ellas.

12.3 Insert
Sintaxis para la insercin de tuplas en la relacin

r:

INSERT INTO r ( nombreAtributo1 , ... , nombreAtributoN )


VALUES ( valor1 , ... , valorN )
INSERT INTO r
SELECT (...)
Primero se buscan todas las tuplas que satisfacen el

select,

y luego se insertan todas ellas.

12.4 Update
Sintaxis para la actualizacin de un atributo de una tupla de

r:

UPDATE r
SET atributo = valor
WHERE condicion
UPDATE r
SET atributo = CASE

END

WHEN condicion1 THEN valor1


WHEN condicion2 THEN valor2
ELSE valor3

42

Parte IV

Procesamiento de Consultas

Figura 21: Pasos en el procesamiento de consultas

Asumimos que toda la relacin se almacena de forma contigua en disco.


Metadatos que se almacenan para cada base de datos:
1.

nr =

2.

lr =

tamao de una tupla, en bytes

3.

br =

cantidad de bloques que ocupa la relacin

cantidad de tuplas en la relacin

br =
4.

fr =

factor de bloqueo de la relacin

r.
lr n r
tam bloque en bytes

(es decir, cuantas tuplas caben en un bloque)

nr
fr =
br
5.

V (A, r) =cantidad

6.

M IN (A, r) =mnimo

7.

M AX(A, r) =mximo

de valores distintos que toma el atributo


valor que toma el atributo

valor que toma el atributo

en la relacin

en la relacin

en la relacin

Figura 22: Estadsticas que se almacenan de la base de datos

43

13 ndices
Ciertas consultas sobre algunos atributos son ms frecuentes que otras. Para acelerar estas consultas, se utilizan los
ndices. Podemos tener ms de un ndice sobre una relacin.

ndice

Estructura de datos (usualmente rbol B+) que permiten encontrar rpidamente las tuplas de una relacin

que tengan un valor especico para un atributo o atributos (el/los que el ndice almacena), con la desventaja
de que cada modicacin a la relacin requiere actualizar el ndice.
Un registro de un ndice tiene un valor de la clave de bsqueda, y punteros a uno o ms tuplas con esa clave
de bsqueda.

CREATE [ CLUSTERED ] INDEX estudianteID_indice


ON estudiante
{
ID asc
};
Tipos de ndices:
Segn la clave:

Clusterizado / primario: ndice cuya clave de bsqueda dene el orden secuencial del archivo de la tabla.
Slo puede haber uno de estos ndices para cada relacin

Clusterizado / secundario.

El orden fsico de las tuplas no es igual al orden del ndice


Las columnas que se indexan son, tpicamente, atributos no claves
Siempre son densos

Segn la cantidad de registros que tiene:

Denso:

tiene un registro para cada valor posible de la clave de bsqueda. Si es clusterizado, tiene un

puntero al primer registro con ese valor. Si es no clusterizado, tiene punteros a todos los registros con ese
valor.

Esparcido:

tiene registros para algunos valores de la clave de bsqueda. Solo se pueden usar si el archivo

de datos est ordenado por la clave de bsqueda.

Esparcido = P rimario
Secundario = Denso

(a) ndice denso

(b) ndice esparcido


Figura 23: ndices densos y esparcidos

ndice compuesto

ndice cuya clave de bsqueda est formada por ms de un atributo. Conviene que los atri-

butos de ms a la izquierda sean ms discriminantes que los de la derecha. Ejemplo: para una relacin

pelicula(nombre, a
no), es esperable que haya ms consultas
un ndice (nombre, a
no) sera mejor que (a
no, nombre).

ndice cubridor

sobre el

nombre

que sobre el

a
no.

Entonces,

Es un ndice que contiene todas las columnas de una consulta, y por ende no se necesita realizar

bsquedas adicionales en el ndice clusterizado.

44

13.1 Estructuras de ndices


rbol B+
Tabla de hash

rbol B+
Tabla de hash

Ventajas

Desventajas

Soporta bsquedas por rango

Operaciones ms costosas

La bsqueda tpica requiere solo una operacin de I/O

No soporta bsquedas por rango.

14 Formas de realizar consultas


1. Bsqueda lineal sobre toda la relacin
2. Usando ndices
3. Hashing
4. Ordenamiento
Los algoritmos pueden asumir que una relacin entra completamente en memoria, o que son muy grandes.

14.1 Operadores
Scan

Table scan: se leen todos los bloques de la relacin en disco.

Index scan: se leen todos los bloques de la relacin en disco, utilizando un ndice.

Sort scan: ordena una relacin

Si hay un ndice sobre


Si
Si

R
R

a,

sobre un atributo

se lo usa.

entra en memoria, se la trae a memoria con table o index scan, y se la ordena en memoria
no entra en memoria, se la ordena externamente.

15 Algoritmos
15.1 Seleccin
A=a (r)
Bsqueda lineal sobre

r:

Si la relacin es clusterizada:

Si la relacin no est clusterizada:

br
nr

Bsqueda con ndice sobre los atributos de

a.

A:

br
V (A,r)
nr
Si el ndice no es clusterizado: costo
V (A,r)

Si el ndice es clusterizado: costo

45

15.2 Junta
R(X, Y ) ./ S(Y, Z),

donde

es la relacin ms pequea. Suponemos que la memoria est formada por

buers.

Iteracin ingenua (tuple based nested-loop join):

costo

ns nr

para cada tupla s en S :


para cada tupla r en R :
si ( s join r = t ):
devolver t
Iteracin por bloques (block based nested-loop join):

Costo

Conviene que la relacin del ciclo externo sea la ms pequea

br
br + m1
bs (R

se lee una vez,

se lee por cada pedazo de

R,

cada pedazo es de tamao

br
m1 )

desde i =1 hasta i =( bR / m -1):


leer R en memoria ( ocupar M -1 buffers )
para cada bloque bs en S :
leer bs en memoria ( ocupar 1 buffer )
para cada tupla t en bs :
buscar las tuplas de R en que hacen join con t
devolver t
Indexed nested-loop join: suponer que se tiene un ndice sobre

nr b s
V (Y,S)
nr ns
Si el ndice no es clusterizado: costo br +
V (Y,S)

Este mtodo es eciente cuando

Si el ndice es clusterizado: costo

del atributo

Y.

br +

no est almacenada en forma contigua en disco.

para cada bloque br de R :


para cada tupla t de br :
buscar con el indice las tuplas de S que hacen join con t
para cada tupla s join t :
agregar <s ,t > al resultado
Sort-merge (sort based join):

Costo

bs + br + bs log(bs ) + br log(br )

ordenar R con respecto a Y


ordenar S con respecto a Y
mergear R y S :
encontrar min ( R ) y min ( S )
si min ( R ) > min (S )
quitar las tuplas de S con Y como atributo
leer S
si min ( R ) < min (S )
quitar las tuplas de R con Y como atributo
leer R
si min ( R ) == min ( S )
agregar r join s al resultado
leer R
leer S
Mtodo Simple de Junta Hash: utiliza una funcin de hash

h [0, M 1].

Costo:

2 (br + bs )

46

h.

Requiere que la relacin

entre en memoria.

TH = {} // en memoria
// fase constructiva
para cada bloque de R :
para cada tupla r del bloque :
calcular h ( r [ Y ])
guardar TH [ Y ] = r
// fase exploratoria
para cada bloque de S :
para cada tupla s del bloque :
calcular h ( s [ Y ])
agregar al resultado las tuplas de TH [ Y ] join " s "
Mtodo GRACE:

R ./R.A=S.A S cuando ninguna de las


M particiones. Se utilizan dos funciones

El mtodo de junta Hash versin GRACE se usa para calcular la junta


tablas entran en memoria. Lo que se hace es generar 2 conjuntos de
de hash: una para generar las particiones
En una primera etapa, por cada tupla

h : A [0, M 1],

de cada bloque de

y otra para calcular qu tuplas hacen join.


se aplica la funcin de hashing

h(t)

para saber a

cul particin enviar la tupla. Se enva cada tupla a esa particin (un archivo) en disco. Al nalizar la etapa,
se tienen

archivos.

En una segunda etapa, se hace lo mismo con

S,

pero con otros

archivos. La clave est en que si dos tuplas

hacen join, entonces necesariamente deben estar en el mismo nmero de particin.


Finalmente, se leen las

h2

particiones. A cada tupla leda de la particin

de

se le aplica la funcin de hash

para saber dnde guardarla en una tabla de hash en memoria. Luego, se calcula

particin

de

S.

h2

para cada tupla de la

Este valor nos dir la posicin en la tabla de hash donde estn las tuplas de

que hacen join

con dicha tupla. De esta forma se obtienen las tuplas que hacen join, y se las graba en disco.

Costo:

3 (bs + br )

// particionamiento de R . Costo : 2* bR
para cada tupla r de R :
num buffer = calcular h1 ( r [ Y ])
guardar " r " en el buffer
si ( buffer completo )
guardarlo en disco Ri
// particionamiento de S . Costo : 2* bS
para cada tupla s de S :
num buffer = calcular h1 ( s [ Y ])
guardar " s " en el buffer
si ( buffer completo )
guardarlo en disco Si
// metodo simple de hash . Costo : bR + bS
para i desde 0 a M -1:
leer Ri
para cada tupla r en Ri :
calcular h2 ( r [Y ])
guardar TH [ r [ Y ]] = r
leer Si
para cada tupla s en Si :
calcular h2 ( s [Y ])
agregar al resultado las tuplas de TH [ r [ Y ]] join " s "

16 Evaluacin de expresiones
La forma obvia de evaluar una expresin que tiene varias operaciones es evaluar cada operacin en el orden indicado,
materializando en disco cada resultado intermedio como relaciones temporales.
Otra alternativa, ms eciente, es evaluar las operaciones en simultneo en un

pipeline, donde los resultados de una

operacin pasan a la prxima, y se elimina la necesidad de almacenar relaciones temporales. Esto se puede utilizar
para evaluar juntas mltiples:

R1 ./ R2 ./ ./ Rk .

Ventajas de pipeline:

47

1. Elimina el costo de leer y escribir relaciones temporales.


2. Puede empezar a generar resultados inmediatamente.
Uso de pipelining :
Sort : no se puede aplicar. El resultado del sort no se puede mostrar hasta que no se hayan procesado todas las
tuplas.
Join: el mtodo GRACE no se puede aplicar porque requiere leer y particionar todas las tuplas antes de que
pueda producirse un resultado. Sin embargo, el mtodo indexed nested-loop puede aprovechar del pipelining.
Si las relaciones estn ordenadas por los atributos de join, merge join tambin puede aprovechar del pipelining.

17 Optimizacin de consultas
Plan de evaluacin

conjunto de operaciones de lgebra relacional a ejecutar, junto con las instrucciones para lle-

varlas a cabo (por ejemplo, los ndices a usar).

Optimizacin de consultas

proceso de seleccionar el mejor plan de evaluacin. El costo de cada plan se evala

teniendo en cuenta informacin estadstica de las relaciones. Lo que se busca minimizar es la cantidad de
transferencias de bloques del disco a la memoria y la cantidad de seeks que se hacen en el disco.
Para ello se tiene en cuenta:
1. Cul de la de las expresiones equivalentes a la consulta es ms eciente para resolver la misma?
2. Qu algoritmo se utilizar para implementar la operacin?
3. Cmo deberan las operaciones pasarse datos entre s? (Pipeline, buers de memoria, disco)

EXPLAIN consulta

17.1 Reglas de equivalencia


Reglas relacionadas con la seleccin:
1.

ab (r) = a (b (r)) = b (a (r))

2.

ab (r) = a (r) b (r)

3.

a (r s) = a (r) a (s)

4.

a (r s) = a (r) s = a (r) a (s)

5.

a (r ./ s) = a (r) ./ a (s)

6. Si

solo tiene atributos de

S : a (r s) = r a (s)

Reglas relacionadas con la proyeccin:


1.

L (R S) = L (R) L (S)

2.

L (a (R)) = L (a ((M (R))))

donde

es la lista de atributos que guran en

Reglas relacionadas con el join:


1.

r1 ./ r2 = r2 ./ r1

2.

(r1 ./ r2 ) ./ r3 = r1 ./ (r2 ./ r3 )

17.2 Heursticas de optimizacin de consultas


1. Ejecutar las selecciones

()

2. Ejecutar las proyecciones

lo antes posible

()

lo antes posible

3. El orden de las operaciones de join

(./)

es importante

4. Evitar cuando sea posible los productos cartesianos

()

48

o en

18 Estimacin de tamao de consultas


A continuacin se describe la estimacin de cantidad de tuplas para cada tipo de consulta.

selectividad

Se utiliza el concepto de
condicin

es

A.

Sea

si = V (i , r)

de una condicin

como la probabilidad de que una tupla satisfaga una

la cantidad de tuplas que satisfacen la condicin

i .

La probabilidad de satisfacer

si
nr .
Seleccin

A=a (r)
nr
V (A,r)

Si

Si se dispone de un histograma para

Av (r)

distribuye uniformemente:

con

Si

En cualquier otro caso:

Si

a rango:

f reqrango (A,r)
cantrangos

conocido

A
A

A,

distribuye uniformemente y
distribuye uniformemente y

nr

v < mn(A, r): 0


v max(A, r): nr

vmin(A,r)
max(A,r)min(A,r)

abz (r)

donde hay

selectores:

abz (r)

donde hay

selectores independientes entre s:

nr P (a) P (z) = nr

sa sb sz
(nr )x






sa
sz
nr [P (a) + + P (z)] = nr 1 1
1
nr
nr
a (r): nr V (a, r)
Junta natural

Si

R S = : nr ns

Si

R S = P KR : nS

(porque podra haber nulls )

Si

R S = P KS : nR

(porque podra haber nulls )

Si

R S = F KS : nS

Si

R S = F KR : nR

Si

#(R S) = 1:

Si

#(R S) = 2

ns nr
m
ax(V (S,RS),V (R,RS))
y el join es de tipo

ns nr
V (S,RS)

ns nr
V (R,RS)

R.A1 = S.A2 R.B1 = S.B2 :

nr ns
m
ax (V (R, A1 ), V (S, A2 ) max (V (R, B1 ), V (S, B2 ))
Proyeccin:

A (r) : V (A, r)

Agregacin A %f (r)
Unin

: V (A, r)

R S : nr + ns

Interseccin
Diferencia

R S : mn (nr , ns )

RS : r

(cota superior)

(cota superior)

V (A, A op v (r)) : V (A, r) sA op v


V (A, r ./ s) :

Si

A R: mn (V (A, r), nr./s )

Si

a1 A

a2 A, mn (V (a1 , r) V (a2 a1 , s); V (a1 a2 , r) V (a2 , S); nr./s )

4 Se

introducen dos simplicaciones:


1. Si R(X, Y ) y S(Y, Z), y V (R, Y ) V (S, Y ) entonces cada valor de Y en R ser un valor de Y en S .
2. Si A es un atributo de R pero no de S , V (R ./ S, A) = v (R, A)

49

18.1 Clculo de juntas con histogramas


Un sistema de bases de datos puede computar un histograma de valores para un atributo dado. Si

V (R, A)

no es

muy grande, el histograma puede consistir de la cantidad de tuplas que tienen cada posible valor del atributo. Si

V (R, A)

es muy grande, entonces podra guardarse solamente los valores ms frecuentes, o agruparlos en rangos.

Los tipos de histogramas ms frecuentes son:


1.

Igual ancho:
los rangos

2.

se escoge un ancho w y una constante v0 . Se almacena


v0 v < v0 + w, v0 + w v < v0 + 2w, etctera.

la cantidad de tuplas con valores

en

Valores ms frecuentes: se listan los valores ms frecuentes y la cantidad de tuplas que tienen esos valores.
Tambin se puede proporcionar la cantidad de tuplas que tienen otros valores.

Ejemplo: sea la junta

R(A, B) ./ S(B, C). Sabemos que V (R, B) = 14 y que V (S, B) = 13. Tenemos los histogramas
R S = B.

de valores ms frecuentes para

R.B
S.B

Otros

150
100

200

100

550 (11 valores)

80

70

250 (10 valores)

Suponemos que cada valor que aparece en la relacin con menos valores de
en la otra relacin (en este caso,

R).

(en este caso,

S)

tambin aparecen

Tambin suponemos que la distribucin de los valores dentro de Otros es

uniforme, y estimamos la frecuencia de los datos desconocidos:

R.B
S.B

150

200

100

80

550
11

= 50

Otros

100

550 (10 valores)

250
10

70

= 25

250 (9 valores)

Entonces, el tamao de la junta es:

T [R ./ S]

= T [R ./B=0 S] + T [R ./B=1 S] + T [R ./B=2 S] T [R ./B=5 S] + T [R ./B6=0,1,2,5 S]




550 250
= (150 100) + (200 80) + (50 70) + (100 25) + mn(9, 10)

11
10
= 15,000 + 16,000 + 3,500 + 2,500 + 9 1250
=

48,250

Ejemplo: sean las relaciones

Enero(dia, temp)

Julio(dia, temp).

Sea la consulta

SELECT Enero . dia , Julio . dia


FROM Enero , Julio
WHERE Enero . temp = Julio . temp
Suponer los siguientes histogramas de igual ancho:

Sabemos que si dos bandas tienen

T1

Rango C

Enero

Julio

-17, -13

40

-13, -9

60

-8, -4

80

-3, 1

50

2, 6

10

7, 11

20

12, 16

50

17, 21

100

22, 26

60

27, 31

10

T2

la estimacin del tamao de la junta es

tuplas respectivamente, y la cantidad de valores de la banda es


T1 T2
V .

50

V , entonces

En el ejemplo anterior, las nicas bandas que contribuyen al resultado son las de [2,6] y [7,11]. Entonces, el tamao
de la junta es:

T [R ./ S]





T R ./temp[2,6] S + T R ./temp[7,11] S
5 10 20 5
=
+
4
4
= 12, 5 + 25
=

37, 5

51

Parte V

Control de Concurrencia
tem de dato

elemento al que accede una transaccin. Puede ser un registro de una base de datos, un bloque de

disco, un campo de un registro, o incluso toda la base de datos. Cada tem tiene un nombre nico que lo
identica (por ejemplo, la direccin fsica de un bloque de disco).

Modelo de concurrencia intercalada

la CPU ejecuta una transaccin a la vez, pero varias transacciones en un

perodo de tiempo.

Figura 24: El manejador de transacciones (a) le emite rdenes al manejador del log, (b) se asegura que transacciones
concurrentes no intereran entre ellas. El scheduler permite o bloquea transacciones

19 Transacciones
Transaccin

unidad lgica de procesamiento. Est formada por una o ms operaciones que acceden a la base de

datos. Tiene un identicador nico de transaccin.


Debe tener las siguientes propiedades

Atomicity

Consistency

Isolation

Durability

ACID:

La transaccin debe ejecutarse en su


totalidad o no debe ejecutarse
La transaccin debe llevar a la base de
datos de un estado consistente a otro (i.e.
que respeten las reglas de integridad de la
base de datos)
La ejecucin de una transaccin no debe
interferir con otras
Los efectos de una transaccin
commiteada deben persistir en la base de
datos. Es decir, luego de commiteada, no
deberamos necesitar ejecutar un rollback

Responsabilidad del gestor de


recuperacin, que mantiene un
log donde guarda los valores
viejos sobrescritos por una
transaccin
Responsabilidad de los
programadores
Responsabilidad del gestor de
concurrencia
Gestor de recuperacin, que
debe garantizar que el log est
en disco antes de que termine
la transaccin

How transactions interact with the database. There are three address spaces that interact in important ways:
1. The space of disk blocks holding the database elements.
2. The virtual or main memory address space that is managed by the buer manager.
3. The local address space of the transaction.
Cada transaccin est formada por una o ms operaciones:

start
52

leer(X):

lee un item de dato de la base de datos a una variable local a la transaccin, que est en

memoria

escribir(X):
commit:

escribe una variable de programa en memoria, en la base de datos

marca el n exitoso de una transaccin. Los cambios que introdujo son seguros para guardar en

la base de datos.

abort:

marca el n con errores de una transaccin. Los cambios que introdujo se deben revertir.

Estados posibles de una transaccin:

Partially committed : luego de que se ejecut la ltima instruccin pero antes de ejecutar el commit o
abort

Commited : sus efectos fueron almacenados permanentemente en la base de datos


Aborted : se ejecut un roll back de la transaccin y la base de datos se restaur a su estado original

Figura 25: Diagrama de estados de una transaccin

Una transaccin llega al

punto de commit

cuando todas sus operaciones se ejecutaron correctamente y se

grabaron todos sus registros de operaciones en el log. Luego de este punto, la transaccin est
y se debe almacenar permanentemente en la base de datos. Esto se marca agregando un registro

commiteada
[commit,T]

en el log.
1. Si ocurre una falla y la transaccin an no grab

[commit,T],

se debe ejecutar un rollback de esta

transaccin.
2. Si ocurre una falla y la transaccin ya haba grabado

[commit,T] en el log, se debe rehacer

esta transac-

cin.
El protocolo

WAL (Write-Ahead

Logging ) indica que antes de commitear una transaccin se debe guardar

el log en memoria al log en disco.

20 Problemas de Concurrencia
1. The Lost Update Problem : una
2. The Dirty Read Problem : una

Escritura

Lectura

que sobrescribe a otra.

de un valor incorrecto.

3. The Incorrect Summary Problem : una

Lectura

4. The Unrepeatable Read Problem : dos

Lecturas

de muchos valores incorrectos.


consecutivas que producen resultados distintos, por haber

una transaccin intermedia que cambi el valor.

53

(a) Lost Update

(b) Dirty Read

(c) Incorrect Summary


Figura 26: Probemas de concurrencia

20.1 Atributos de una Transaccin


Modo de acceso:

READ ONLY, READ WRITE

Nivel de isolation:

54

Nivel de

Tipo de violacin que se puede producir para dos transacciones

isolation

Escritura sucia (T
escribe el valor

Lectura Sucia (T

despus de que una


transaccin
escribiera, y

S
S

Lectura No
Repetible (T lee el

lee el valorX

lo

despus de una
transaccin

no

comiti ni abort)

valor

que

X,

luego

actualiza, luego

no comiti ni

lee

varios datos que

lo

y es un nuevo

abort)

Phantoms (T lee

valor)

cumplen una
condicin, luego

agrega un dato que


tambin lo verica.
Si

lee de nuevo,

encontrar un nuevo
dato que antes no
estaba)
READ

No

Si

Si

Si

No

No

Si

Si

No

No

No

Si

No

No

No

No

UNCOMMITTED
READ COMMITTED
REPEATABLE
READ
SERIALIZABLE

Cuadro 1: Violaciones que se pueden producir en cada nivel

21 Schedules de Transacciones

Figura 27: Schedules equivalentes

Figura 28: Schedule no recuperable

Schedule ordenamiento cronolgico de las operaciones de

transacciones. Se pueden intercalar operaciones de

distintas transacciones, pero las operaciones de una transaccin se deben ejecutar en forma secuencial.
Un schedule es
escrito por

Ti ,

Un schedule es
que

Tj

recuperable si, para cada par de transacciones Ti y Tj tal que Tj lee un tem de dato previamente
el

commit

de

Ti

aparece antes del

commit

de

Tj .

sin cascada (avoids cascading rollback , AVR) si, para cada par de transacciones Ti y Tj

lee un tem de dato previamente escrito por

Ti ,

55

el

commit

de

Ti

aparece antes del

read

de

Tj .

tal

Un schedule que usa locks es

estricto

si cada transaccin commitea o aborta, y luego libera todos sus locks

exclusivos.
estricto

= sin

cascada

= recuperable

= serializable

estricto

Figura 29: Relacin de schedules

Conicto

dos operaciones en un schedule entran en conicto cuando se cumplen todas las condiciones siguientes:

1. Corresponden a distintas transacciones


2. Acceden al mismo tem de dato

3. Al menos una de esas operaciones es

escribir(X)

Dicho de otra forma, estn en conicto cuando, si alteramos el orden de ejecucin, cambia el resultado nal
de

X.

Un schedule es

serial

cuando ejecuta primero todas las operaciones de

nalmente todas las operaciones de

Tn .

T1 ,

luego todas las operaciones de

T2 ,

..., y

Cualquier esquema serial preserva la consistencia de la base de datos.

serializable cuando es equivalente a algn schedule serial con las mismas transacciones.
son conicto-equivalentes si el orden de las operaciones en conicto es la misma en ambos. Es decir,

Un schedule es
Dos schedules

si podemos transformar uno en el otro mediante una secuencia de swaps de acciones adyacentes que no estn en
conicto.

Figura 30: Convirtiendo un schedule conicto-serializable en uno serial mediante swaps de acciones adyacentes. A
cada paso estn subrayadas las acciones a punto de ser swappeadas

Un schedule es

conicto-serializable si es conicto-equivalente a algn schedule

serial.

Conf licto serializable = Serializable


Para vericar si un schedule

es conicto-serializable se utiliza un grafo dirigido

{T1 , T2 , . . . , Tn }

es el conjunto de transacciones

es el conjunto de aristas de la forma

schedule serial equivalente a

Ti Tj .

G = (N, E):

que forman el schedule

Cada arista signica que

S
56

Ti

debe preceder a

Tj

en cualquier

Algoritmo 15

Vericacin de serializabilidad de un schedule

Entrada : schedule S
Salida : " verdadero " si es conflicto serializable
para cada transaccion Ti en S :
crear un nodo Ti en el grafo de precedencia
para cada caso donde Ti ejecuta READ ( X ) y luego Tj ejecuta WRITE ( X ):
agregar una arista ( Ti -> Tj ) en el grafo de precedencia
para cada caso donde Ti ejecuta WRITE ( X ) y luego Tj ejecuta READ ( X ):
agregar una arista ( Ti -> Tj ) en el grafo de precedencia
para cada caso donde Ti ejecuta WRITE ( X ) y luego Tj ejecuta WRITE ( X ):
agregar una arista ( Ti -> Tj ) en el grafo de precedencia
si el grafo es aciclico :
devolver " verdadero "
si el gafo es ciclico :
devolver " falso "

Si el grafo de precedencia es acclico, el schedule serial equivalente puede construirse utilizando un


de la siguiente forma: siempre que exista una arista

Ti Tj , Ti

debe preceder a

Tj

orden topolgico

en el schedule serial.

En la prctica, los DBMS no utilizan este algoritmo para garantizar la serializabilidad (porque habra que vericarlo
para cada schedule ).

22 Protocolos de Control de Concurrencia: Protocolo de Locking


Una forma de garantizar el aislamiento de transacciones y prevenir comportamiento no serializable es mediante el
uso de locks. Notar que este mecanismo no funciona bien cuando los locks se mantienen durante das, o cuando las
decisiones humanas son parte de una transaccin.

Lock variable que se asocia a un tem de dato. Describe el estado del tem con respecto a las posibles operaciones
que pueden aplicarse a el. Generalmente hay un lock por item de dato.
Tipos de locks :
1.

Binarios: pueden tener dos valores: locked

(1) o unlocked (0). Un lock binario impone la exclusin mutua

en el item de dato asociado, porque solo puede haber a lo sumo una transaccin con un lock para un
mismo dato.
El registro de este tipo de lock tiene la forma

<Item de dato, LOCK, Transaccin con lock>

Reglas que deben aplicarse a cada transaccin:


a)
b)
c)
d)
2.

lock(X) antes de cualquier leer(X) o escribir(X)


unlock(X) despus de todos los leer(X) y escribir(X)
no se permite ejecutar lock(X) si ya se tiene un lock de X
no se permite ejecutar unlock(X) si no se tiene el lock de X

Compartidos/Exclusivos (Lectura/Escritura):
varias transacciones que solo van a ejecutar

es ms laxo que los locks binarios porque permite que

leer(X) tengan acceso a X. El lock

puede tener dos valores:

read-locked o write-locked.

Lock exclusivo: puede leer y escribir el dato X .


Lock compartido: puede leer pero no puede escribir X .
El registro este tipo de lock tiene la forma

con lock>

<Item de dato, LOCK, # de lecturas, Transaccion(es)

Reglas que deben aplicarse a cada transaccin:


a)
b)
c)
d)

read_lock(X) o write_lock(X) antes de cualquier leer(X)


write_lock(X) antes de cualquier escribir(X)
luego de todos los leer(X) y escribir(X), ejecutar unlock(X)
si ya tiene un lock (compartido o exclusivo) de X , no se puede
write_lock(X)

57

ejecutar ni

read_lock(X)

ni

e ) no se permite ejecutar

unlock(X)

si no se tiene un lock de

(compartido o exclusivo)

Problemas con el uso de locks :


1. El uso por s solo de locks no garantiza la serializabilidad de schedules.

Figura 31: El uso de locks no garantiza la serializabilidad. Si se produce una actualizacin a

lock(B), A + B

entre

unlock(A)

sera incorrecto

2. Deadlock : ocurre cuando cada transaccin en un schedule est esperando que se libere un lock que fue
adquirido por otra transaccin del schedule.
Para detectar y/o prevenir un deadlock, el gestor de concurrencia puede mantener un
Cuando una transaccin

T S.

Cuando

est esperando a que la transaccin

grafo de espera.

libere un lock, se dibuja una arista

libera el lock, la arista se borra. El deadlock se detecta cuando el grafo es cclico.

Cuando ocurre un deadlock, el sistema debe ejecutar el rollback de alguna de las dos transacciones, y
liberar los locks que sta posea.
Tambin se pueden arreglar deadlocks especicando un timeout para cada transaccin. Si se ejecutan por
ms tiempo que este timeout, es abortada y sus locks se liberan.
3. Starvation : ocurre cuando una transaccin se queda esperando indenidamente a que se libere un lock.
Se puede evitar de la siguiente forma: cuando una transaccin

M,

Ti

solicita un lock sobre

en un modo

el gestor de concurrencia se lo provee si se verica que:

a) No hay otra transaccin con un lock sobre

en un modo que conicte con

b) No hay otra transaccin esperando obtener un lock sobre

Lock de update

antes que

un lock de update le da a una transaccin el privilegio para leer

M.

Ti

X,

pero

no

para escribirlo. Sin

embargo, este tipo de lock se puede actualizar a un lock exclusivo ms tarde.

Matriz de compatibilidad de locks

se puede otorgar un lock de tipo

otorg a otra transaccin un lock de tipo

R,

si y solo si, para cada la

hay un Si en la columna

tal que ya se

C.

Se solicita un lock de tipo....

Se otorg un lock de tipo...

Exclusivo

Compartido

Exclusivo

No

No

Compartido

No

Si

(a) Para locks compartidos y exclusivos


Se solicita un lock de tipo....

Se otorg un lock de tipo...

Exclusivo

Compartido

Actualizacin

Exclusivo

No

No

No

Compartido

No

Si

Si

Actualizacin

No

No

No

(b) Para locks compartidos, exclusivos y de actualizacin


Cuadro 2: Ejemplos de matrices de compatibilidad

Lock table tabla que utiliza el gestor de concurrencia para almacenar el estado de los locks activos.
Para cada tem de dato con locks activos, mantiene una lista de transacciones que solicitaron el lock, en el
orden en que llegaron los pedidos. Se registra qu transaccin es y qu modo de lock solicit. Tambin se
registra si el lock le fue concedido.

58

Figura 32: Lock table

22.1 Protocolo de dos fases (two-phase


Una transaccin cumple con el protocolo two-phase locking

write_lock) preceden al primer unlock

locking)

(2PL)

si todas las operaciones de lock (read_lock,

de la transaccin. Se dice entonces que la transaccin se divide en dos fases:

la creciente (donde se adquieren los locks ) y la decreciente (donde se liberan los locks ).
Si cada transaccin de un schedule cumple el protocolo 2PL, se garantiza que el schedule es serializable. De hecho,
las transacciones se pueden ordenar de acuerdo a sus lock points (el punto donde termina la fase creciente).
Este protocolo limita la cantidad de concurrencia que se permite, porque una transaccin no puede liberar un lock
hasta que haya adquirido un lock para todos los dems tems, y entonces puede haber muchas otras transacciones
esperando que se libere el primer lock. Adems, no se previene el deadlock, ni los rollbacks en cascada.

Figura 33: 2PL

Figura 34: Schedule 2PL con deadlock

59

Figura 35: Schedule 2PL con cascading rollback si

T5

falla al nal de todo

Para prevenir el problema de deadlock, este protocolo puede ampliarse y exigir que las transacciones adquieran por
adelantado todos los locks que se necesitan; si un lock no se puede conseguir, no se adquiere ninguno. Esto limita
an ms la concurrencia.
Para prevenir el problema de rollbacks en cascada, existe el protocolo

2PL estricto. Este modo, adems de requerir

lo mismo que 2PL, requiere que todos los locks exclusivos adquiridos por una transaccin se mantengan hasta que
la misma ejecute commit.

22.2 Protocolo de rbol


Protocolo de rbol

protocolo especializado para transacciones que acceden a datos en forma de rbol (ejemplo: un

ndice B). El protocolo viola 2PL, pero utiliza el hecho de que acceder a elementos debe ser hacia abajo para
garantizar serializabilidad.
Si una transaccin quiere insertar un registro, debera adquirir un lock exclusivo de la raz, ergo de todo el rbol, y
por ende estara bloqueando a todas las dems transacciones.
Puede aprovecharse la estructura de rbol del ndice de la siguiente forma:
Cuando se adquiere un read_lock en un nodo hijo, el lock del nodo padre puede liberarse porque no se usar
ms.
Cuando se adquiere un write_lock en un nodo hoja (para realizar una insercin), se debe adquirir un lock
exclusivo en el nodo hoja.
Utilizar la tcnica de index locking soluciona el problema de registros phantom.
El protocolo de rbol garantiza un orden serial en las transacciones. El orden de precedencia se dene as: si
adquieren un lock sobre

Algoritmo 16

Ti

adquiere el lock primero, entonces

Ti Tj .

Protocolo de rbol

1. El primer lock de una transaccin puede hacerse sobre cualquier nodo del rbol.
2. Los locks subsiguientes pueden otorgarse slo si se posee un lock sobre el nodo padre.
3. Se puede ejecutar unlock de un nodo en cualquier momento.
4. No se puede adquirir lock de un nodo 2 veces, incluso cuando se tiene un lock sobre el nodo padre.

60

Ti

Tj

Parte VI

Tcnicas de Recuperacin
23 Necesidad de Recuperacin
Tipos de fallas que pueden ocurrir:
1. Fallas de la computadora: por ejemplo, una desconexin en la red
2. Fallas de transacciones: por ejemplo, una transaccin que intenta dividir por cero
3. Errores locales: por ejemplo, una transaccin que no encuentra datos
4. Aplicacin de procedimientos de control de concurrencia: por ejemplo, una transaccin abortada porque viola
la serializabilidad o para resolver un estado de deadlock
5. Fallas del disco
6. Catstrofes
Los algoritmos de recuperacin tienen dos partes:
1. Acciones que se toman durante el procesamiento normal de transacciones, para asegurar que, en caso de falla,
se dispone de suciente informacin para recuperar
2. Acciones que se toman despus de una falla para devolver la base de datos a un estado consistente.
Idealmente, la base de datos en disco debera contener, para cada tem de dato, el ltimo valor escrito por una
transaccin que ejecut commit.
En la prctica, la base de datos podra:
Contener valores escritos por transacciones no commiteadas
No contener valores escritos por transacciones commiteadas

24 Archivo de Log
La base de datos se almacena en disco. ste est formado por bloques. Como todos los bloques no caben en memoria
principal, se necesita una forma de trabajar con la base de datos en memoria. Por ende, se necesita una forma de
organizar los bloques en memoria y luego copiarlos en el disco (ush).

Figura 36: Operaciones sobre bloques

Para alcanzar el objetivo de transacciones atmicas, primero se debe guardar en disco informacin sobre las modicaciones, sin modicar la base de datos en s. Para eso se utiliza un archivo de log. Este archivo permite:

61

Deshacer (undo) cambios hechos por transacciones que deben ser abortadas
Rehacer (redo) cambios hechos por transacciones que ejecutaron commit pero cuyos cambios no fueron almacenados en la base de datos en disco.

Log

archivo secuencial al que solo se le pueden agregar registros.

commit cuando su registro [commit,T] fue almacenado en disco. Si hay una


redo. Si hay una falla antes de esto, se hace undo.

Decimos que una transaccin ejecut


falla luego de esto, se ejecuta un

Redo debe hacerse en el orden en el que los cambios fueron hechos originalmente.
Undo escribe registros especiales llamados redo-only, que no tienen el valor viejo del item de dato. Al nalizar
las escrituras, se escribe un registro

<abort,T>

para indicar que el undo naliz.

24.1 Checkpoints
Cuando se produce una cada del sistema, hay que consultar el log para determinar aquellas transacciones que deben
rehacerse o deshacerse. En principio, habra que buscar en todo el log para determinar esta informacin. Hay dos
grandes dicultades con este enfoque:
1. El proceso de bsqueda lleva mucho tiempo.
2. La mayor parte de las transacciones ya han escrito sus actualizaciones en la base de datos.
Para reducir este tipo de gastos generales, se usan los checkpoints . La periodicidad con que se ejecutan checkpoints
la decide el administrador de base de datos.

24.1.1 Checkpoints bloqueantes


Se describe a continuacin un esquema de control simple que (a) no permite realizar ningn cambio mientras la
operacin est en curso, y (b) se escriben en disco todos los buers en memoria modicados.

Algoritmo 17

Checkpoint bloqueante en un log UNDO

1. Stop accepting new transactions.


2. Wait until all currently active transactions commit or abort and have written a

COMMIT

or

ABORT

record on the

log.
3. Flush the log to disk.
4. Write a log record

<CHECKPOINT> ,

and ush the log again.

5. Resume accepting transactions.

24.1.2 Checkpoints no bloqueantes


Algoritmo 18

Checkpoint no bloqueante en un log UNDO

1. Write a log record

<START CHECKPOINT (T1, ... , Tk)> . Here, T1 , . . . , Tk

are the identiers for all the active

transactions (i.e., transactions that have not yet committed and written their changes to disk).
2. Flush the log.

T1 , . . . , Tk commit or abort, but do not prohibit other transactions


T1 , . . . , Tk have completed, write a log record <END CHECKPOINT> .

3. Wait until all of


4. When all of

from starting.

5. Flush the log.

Algoritmo 19

Checkpoint no bloqueante en un log REDO

1. Write a log record

<START CHECKPOINT (T1, ... , Tk)> . Here, T1 , . . . , Tk

are the identiers for all the active

transactions (i.e., transactions that have not yet committed).


2. Flush the log.
3. Write to disk all database elements that were written to buers but not yet to disk by transactions that had already
committed when the <START CHECKPOINT> record was written to the log.
4. Write a log record

<END CHECKPOINT> .

5. Flush the log.

62

Algoritmo 20

Checkpoint no bloqueante en un log UNDO/REDO

1. Write a log record

<START CHECKPOINT (T1, ... , Tk)> . Here, T1 , . . . , Tk

are the identiers for all the active

transactions (i.e., transactions that have not yet committed).


2. Flush the log.
3. Write to disk all buers that are dirty (not just those written by committed transactions)
4. Write a log record

<END CHECKPOINT> .

5. Flush the log.

25 Protocolos de Recuperacin
Para fallas de tipo 5 y 6, se necesita haber grabado con anterioridad un backup de la base de datos y reconstruir
la misma con el archivo de log hasta el momento de la falla.
Para fallas de tipo 1 a 4, existen dos tcnicas de recuperacin:

Deferred update
Las transacciones y el manejador de buers obedecen 1 regla:

Write-Ahead Logging (WAL): se deben grabar en disco todos los registros de log sobre las actualizacin (incluyendo <UPDATE T,X,Nuevo_valor> y <COMMIT T>), y luego actualizar X en disco.
Tipos de registros:

<START T>
<COMMIT T>
<ABORT T>
<UPDATE T,X,Valor_Nuevo>

Algoritmo 21

Procedimiento de recuperacin

REDO

sin checkpoints

transacciones_commiteadas = identificarlas
transacciones_incompletas = identificarlas
desde el comienzo del log hasta el fin :
si hay un registro < UPDATE <T ,X , Valor_Nuevo >:
si T est en " transacciones_commiteadas " :
escribir " Valor_Nuevo " en X
si no :
no hacer nada
para cada T en " transacciones_incompletas " :
escribir < ABORT T >
flush_log ()

63

Algoritmo 22

Procedimiento de recuperacin

REDO

con checkpoints no bloqueantes

transacciones_commiteadas = identificarlas
transacciones_incompletas = identificarlas

desde el comienzo del log hasta el fin :


si hay un registro < UPDATE <T ,X , Valor_Nuevo >:
si T est en " transacciones_commiteadas " :
escribir " Valor_Nuevo " en X
si no :
no hacer nada
si el ultimo registro de checkpoint es < END CHECKPOINT >:
// se debe mirar el log hasta el < START Ti > que se ejecuto primero
si el ultimo registro de checkpoint es < START CHECKPOINT T1 ,... , TK >:
// la caida se produjo durante el checkpointing
// buscar el registro < END CHECKPOINT > anterior y su par < START CHECKPOINT S1 ,..
// rehacer todas las transacciones commiteadas que empezaron despues de ese STAR
//
o son Si
// ( si no hay , rehacer desde el principio del log )
para cada T en transacciones_incompletas :
escribir < ABORT T >
flush_log ()

El algoritmo anterior puede ser ms eciente si se ejecuta, para cada item de dato, slo el ltimo REDO
existente (porque todos los anteriores seran sobrescritos por ste).
Este mecanismo garantiza:

Que no se deban hacer rollbacks de transacciones (porque las mismas slo escriben en la base de
datos luego de ejecutar commit)

Que no se deban hacer rollbacks en cascada (porque los tems tienen locks que no permiten leerlos
antes de que una transaccin que los escribi no ejecute commit)

Immediate update : a su vez tiene dos variantes:


1.

UNDO/REDO: Las transacciones y el manejador de buer obedecen 1 regla:

Si la transaccin

modica el tem de dato

debe ser escrito al disco

X , el registro de log <UPDATE T,X,Valor_Viejo,Valor_Nuevo>

antes que el tem X

sea escrito al disco.

Tipos de registros:

Algoritmo 23

<START T>
<COMMIT T>
<ABORT T>
<UPDATE T,X,Valor_Viejo,Valor_Nuevo>

Procedimiento de recuperacin

UNDO/REDO

mantener dos listas de transacciones :


1) transacciones commiteadas desde el ultimo checkpoint
2) transacciones activas
ejecutar REDO de todos los ESCRIBIR de las transacciones de la primera lista ,
en el orden en que fueron escritos en el log
ejecutar UNDO de todos los ESCRIBIR de las transacciones de la segunda lista ,
en el orden inverso en que fueron escritos en el log

2.

UNDO: Las transacciones y el manejador de buer obedecen 2 reglas:


a) Si la transaccin

modica el tem de dato

X,

el registro de log

<UPDATE T,X,Valor_Viejo>

antes que el tem X sea escrito al disco.


Force Log at Commi t (FLC): si la transaccin ejecuta commit, los tems de datos actualizados
debe ser escrito al disco

b)

por la transaccin se deben escribir en el disco, y luego el registro de log


escrito al disco.

64

<COMMIT T>

debe ser

Tipos de registros:

Algoritmo 24

<START T>
<COMMIT T>
<ABORT T>
<UPDATE T,X,Valor_Viejo>

Procedimiento de recuperacin

UNDO

con checkpoint bloqueante

transacciones_completas = {}
transacciones_incompletas = {}
desde el fin del log hasta el comienzo : // o hasta que se encuentre un registro < CHECKPOINT >
si hay un registro < COMMIT T > o < ABORT T >:
transacciones_completas += T
si hay un registro < UPDATE <T ,X , Valor_Viejo >:
si T est en " transacciones_completas " :
no hacer nada
sino :
transacciones_incompletas += T
escribir " Valor_Viejo " en " X "
para cada T en " transacciones_incompletas " :
escribir < ABORT T >
flush_log ()

Algoritmo 25

Procedimiento de recuperacin

UNDO

con checkpoint no bloqueante

transacciones_completas = {}
transacciones_incompletas = {}
desde el fin del log :
si hay un registro < COMMIT T > o < ABORT T >:
transacciones_completas += T
si hay un registro < UPDATE <T ,X , Valor_Viejo >:
si T est en " transacciones_completas " :
no hacer nada
sino :
transacciones_incompletas += T
escribir " Valor_Viejo " en " X "
si hay un registro < END CHECKPOINT >:
// se debe mirar el log hasta el < START CHECKPOINT > correspondiente
si hay un registro < START CHECKPOINT T1 ,... , TK > pero no un < END CHECKPOINT >:
// la caida se produjo durante el checkpointing
// se debe mirar el log hasta el comienzo de la primera transaccin incompleta
para cada T en " transacciones_incompletas " :
escribir < ABORT T >
flush_log ()

Es necesario que las operaciones de UNDO y REDO sean

idempotentes:

ejecutarlas muchas veces debe ser igual

a ejecutarlas muchas veces. De hecho, todo el proceso de recuperacin debe ser idempotente para garantizar que si
existe una falla durante la recuperacin de una falla, la misma se pueda recuperar tambin.
Es necesario que el DBMS mantenga:
Lista de transacciones activas
Lista de transacciones que ejecutaron commit
Lista de transacciones abortadas desde el ltimo checkpoint

65

(a) Log UNDO

(b) Log REDO

(c) Log UNDO/REDO


Figura 37: Ejemplos de logs

UNDO
Logs X = Bd X = Commit al log

REDO
Logs X & Commit al log = Bd X

UNDO/REDO
Log X = Bd X

Immediate update

Deferred update

Immediate update

66

También podría gustarte