apuntes fbd.pdf

Upload: gmal378

Post on 11-Oct-2015

24 views

Category:

Documents


0 download

TRANSCRIPT

  • BASES DE DATOS RELACIONALES

    Mauricio Marn

    Departamento de Ingeniera Informatica

    Universidad de Santiago de Chile

  • Chapter 1

    Introduccion

    1.1 Base de Datos

    Es un conjunto de datos que estan relacionados entre s, relativos a un sistema de informacion yalmacenados en forma mas o menos permanente.

    El software para accesar los datos se llama Sistema Administrador de Bases de Datos (DBMS).

    Un DBMS permite al usuario utilizar la informacion a un nivel conceptual independiente de suimplementacion en el computador.

    Los DBMS permiten:

    Evitar (o al menos disminuir) la redundancia de informacion,

    Disminuir el costo de almacenamiento y acceso a la informacion,

    Evitar inconsistencias,

    Compartir datos (varios usuarios compartiendo la misma informacion) y

    Aplicar restricciones de seguridad al acceso a la Base de Datos.

    1.1.1 Niveles de Abstraccion

    Nivel Fsico: Son los datos tal como son almacenados en el computador. Por ejemplo archivos,metodos de acceso, archivos ndices. En un DBMS el nivel fsico es transparente para el usuario.

    Nivel Conceptual: Se describe que datos se almacenan y las relaciones que existen entre ellos.Usualmente el usuario trabaja en este nivel y no se preocupa de los detalles del nivel fsico.

    Nivel de Vistas: Es un subconjunto del nivel conceptual. A determinados usuarios de la Base deDatos se les presenta solo un subconjunto de los datos. Para una misma Base de Datos se puedenconstruir varias vistas segun el tipo de usuarios del DBMS.

    1

  • CHAPTER 1. INTRODUCCION 2

    1.1.2 Esquemas e Instancias

    Una instancia es el contenido de la Base de Datos en algun momento dado en el tiempo.

    Un esquema es la descripcion de la estructura de la Base de Datos en un determinado nivel. Sehabla de esquema fsico, esquema conceptual y subesquema conceptual (vistas). En cada nivel serequiere informacion distinta para construir los esquemas.

    1.1.3 Independencia

    Existe independencia de datos entre niveles, es decir, existe capacidad de modificar el esquema deun nivel si alterar el nivel superior.

    Existen 2 tipos de independencia:

    Independencia de Datos Fsica: Es posible alterar la implementacion sin alterar el nivelconceptual.

    Independencia de Datos Logica: Es posible hacer varios cambios en el esquema conceptualsin alterar los subesquemas.

    1.2 Lenguajes de Base de Datos

    1.2.1 Lenguaje de Definicion de Datos (DDL)

    Sirve para definir los esquemas de la Base de Datos (para cada nivel se requiere un lenguaje distinto).

    El resultado de la compilacion de las instrucciones DDL son tablas con la descripcion de la Basede Datos.

    El esquema fsico lo define principalmente el DBMS.

    1.2.2 Lenguaje de Manipulacion de Datos (DML)

    Permite acceder a la informacion almacenada en la Base de Datos.

    Las operaciones tpicas son:

    Recuperar informacion (consultas a la Base de Datos),

    Agregar informacion,

    Modificar la informacion almacenada (actualizaciones),

    Borrar informacion.

  • CHAPTER 1. INTRODUCCION 3

    1.3 Usuarios de la Base de Datos

    1.3.1 Administrador

    Realiza la definicion y modificacion de los esquemas utilizando un DDL.

    Define las estructuras de almacenamiento y los metodos de acceso a los datos.

    Asigna los tipos de autorizaciones de acceso a la informacion.

    1.3.2 Programadores de Aplicaciones

    Interactuan con el DBMS a traves del DML, incluyendo instrucciones del DML en programasescritos en un lenguaje host como Pascal, C o algun lenguaje 4GL especialmente disenado para estetipo de aplicaciones.

    1.3.3 Usuarios Casuales

    Saben de computacion e ingresan consultas directamente en el DML.

    1.3.4 Usuarios Finales

    No necesitan saber de computacion debido a que interactuan directamente con los programas deaplicacion.

    1.4 Estructura de un DBMS

    1.4.1 Administrador de Archivos

    Se encarga de las operaciones de almacenamiento en el disco. Usualmente utiliza llamadas a fun-ciones del Sistema Operativo.

    1.4.2 Administrador de la Base de Datos

    Es la interfaz entre al administrador de archivos (bajo nivel) y las consultas en DML.

    1.4.3 Preprocesador de Consultas

    Traduce las consultas a instrucciones que el administrador de la Base de Datos entiende. General-mente realiza optimizaciones a las consultas formuladas por el usuario.

  • CHAPTER 1. INTRODUCCION 4

    DISCODATOS DICCIONARIO

    Administrador deArchivos

    AplicacionCompilada

    AdministradorBase de Datos DBMS

    Pre.Comp.DML

    Pre.Proc.Consultas

    CompiladorDDL

    ProgramaAplicacion

    ConsultasDML

    EsquemasBase Datos

    USUARIO

    PROGRAMADOR USUARIO ADMINISTRADOR

    FINAL

    APLICACION CASUAL BASE DE DATOS

    ?

    ? ? ?

    ? ? ?

    ??-

    ?

    6

    AAAAAAAAAAAK

    ?

    =>

    Figure 1.1:

    1.4.4 Precompilador de DML

    Convierte instrucciones de DML a invocaciones a funciones DBMS.

    1.4.5 Compilador DDL

    Recibe como entrada la definicion de la Base de Datos (en DDL) y genera como salida tablas conla informacion de los esquemas (el diccionario de datos).

  • Chapter 2

    Modelo de Entidades - Relaciones

    2.1 Conceptos

    El modelo de Entidades-Relaciones se utiliza para describir el mundo real y sirve como medio decomunicacion entre usuarios y desarrolladores.

    2.1.1 Entidades

    Una entidad es cualquier objeto distinguible en un sistema,

    Persona,

    Producto,

    Insumo.

    Un conjunto de entidades es un grupo de entidades del mismo tipo,

    Empleados de una Empresa,

    Productos que se fabrican en una Empresa,

    Insumos utilizados en los productos.

    Las entidades se describen por medio de un conjunto de atributos. Por ejemplo, cada empleado deuna Empresa puede ser descrito mediante los atributos,

    rut,

    Nombre y

    Direccion.

    5

  • CHAPTER 2. MODELO DE ENTIDADES - RELACIONES 6

    El dominio de un atributo es su tipo de dato (integer, real, char, etc.).

    LLave es un atributo o conjunto de atributos que identifican a las entidades dentro de suconjunto. En principio todos los conjuntos de entidades tienen una llave (entidades distinguibles).

    Ejemplos:

    EMPLEADOS(rut,nombre,direccion)

    DEPARTAMENTOS(coddepto,nombre)

    PRODUCTOS(codprod,nombre,precio)

    INSUMOS(codins,nombre)

    CLIENTES(rut,nombre,fono,fax)

    2.1.2 Relaciones

    Las relaciones establecen asociaciones entre entidades. Por ejemplo,

    Los productos e insumos de una Empresa pueden estar relacionados mediante una relacionllamada CONTIENE, que se puede utilizar para indicar los insumos que contiene cada pro-ducto.

    Los empleados y departamentos de una Empresa pueden ser relacionados mediante unarelacion llamada PERTENECE.

    En la practica, la mayora de las relaciones son binarias. Las relaciones pueden tener sus propiosatributos,

    En la relacion CONTIENE se puede tener un atributo que indique la proporcion en queparticipan los insumos en los productos.

    El rol de cada entidad dentro de una relacion es importante,

    Supongamos la relacion SER JEFE entre entidades del mismo conjunto EMPLEADOS, eneste caso debe especificarse quien es el jefe y quien el subordinado (el primero es el jefe, o alreves).

    Las relaciones binarias se clasifican en,

    Uno-Uno: Cada entidad de cada conjunto esta relacionada a lo mas con una entidad del otroconjunto. Por ejemplo, la relacion JEFE entre EMPLEADOS y DEPARTAMENTOS.

    Uno-Muchos: En una relacion uno a muchos desde E1 a E2, cada elemento de E1 estarelacionado con cero o uno de E2, y cada elemento de E2 esta relacionado con cero o mas deE1. Por ejemplo, la relacion TRABAJA entre EMPLEADOS y DEPARTAMENTOS.

    Muchos-Muchos: Cada entidad puede estar relacionada con cualquier numero de entidadesdel otro conjunto. Por ejemplo, la relacion CONTIENE entre PRODUCTOS e INSUMOS.

  • CHAPTER 2. MODELO DE ENTIDADES - RELACIONES 7

    2.2 Diagramas E-R

    Los conjuntos de entidades se representan mediante rectangulos y se utilizan elipses para los atribu-tos, Figura 2.1. Las relaciones se representan mediante rombos, Figura 2.2. Las relaciones muchos-uno llevan una flecha hacia el uno, las relaciones uno-uno flechas hacia ambos lados y las relacionesmuchos-muchos no llevan flechas. En la Figura 2.3 se muestra un ejemplo de diagrama E-R.

    2.3 Conceptos Adicionales

    2.3.1 Generalizacion y Especializacion

    En el conjunto de entidades general se agrupan los atributos comunes a varios conjuntos de entidadesque describen aspectos particulares del conjunto de entidades general, Figura 2.4.

    2.3.2 Dependencia de Existencia

    La existencia de una entidad depende de la existencia de otra, Figura 2.5. En la figura, para queexista una cuenta necesariamente debe existir un cliente. Si se borra un cliente necesariamentedebe borrarse la cuenta.

    2.3.3 Conjuntos de Entidades Fuertes y Debiles

    Hay conjuntos de entidades que no tienen una llave propia, como en el caso de la Figura 2.5 dondeel conjunto de entidades VENDEDORES y OPERADORES tienen un unico atributo (comision ysobre tiempo respectivamente). Este concepto esta relacionado con la dependencia de existencia; elconjunto de entidades debiles es el subordinado y el fuerte el dominante.

    2.4 Problemas E-R

    2.4.1 Los Arcoch

    La tribu de los Arcoch, habitantes del Planeta Nak y unicos sobrevivientes de la guerra del ano2084, que destruyo los cuatro planetas de su sistema solar, se han propuesto construir una nuevaforma de organizacion social para proteger su raza, actualmente en extincion.

    Cada miembro de la tribu desarrolla alguna actividad, la cual debe aprender y luego perfec-cionar. Por ejemplo, cazar, cultivar la tierra, educar, etc.. Cada nino es educado e inicia algunaactividad en la adolecencia, cada anciano puede dejar de trabajar si lo desea.

    De acuerdo a la actividad que desarrolle cada Arcoch, se le entregan los elementos necesarios.Si se cambia de actividad estos deben ser devueltos. Se conoce que elementos deben ser entregadospor actividad.

  • CHAPTER 2. MODELO DE ENTIDADES - RELACIONES 8

    EMPLEADOS

    rut

    nombre

    direccion

    Figure 2.1:

    DEPARTAMENTOS

    EMPLEADOS

    TRABAJA JEFE

    ?

    6

    ?

    Figure 2.2:

  • CHAPTER 2. MODELO DE ENTIDADES - RELACIONES 9

    EMPLEADOS

    TRABAJA

    DEPARTAMENTOS

    FABRICA

    PRODUCTOS

    CONTIENE

    INSUMOS

    VENTAS CLIENTES

    ?

    6

    rut

    nombre

    direccion

    coddepto

    nombre

    codprod

    nombre

    precio

    codins

    nombre

    rut

    nombre

    fono

    fax

    proporcion

    Figure 2.3:

  • CHAPTER 2. MODELO DE ENTIDADES - RELACIONES 10

    EMPLEADOS

    nombre

    sobre tiempo

    comision

    direccion

    rut

    VENDEDORES OPERADORES

    Figure 2.4:

    CUENTAS

    CLIENTES

    CREDITOS

    6

    ?

    Figure 2.5:

  • CHAPTER 2. MODELO DE ENTIDADES - RELACIONES 11

    Tal como se otorgan bienes por actividad, se otorgan bienes a las familias de acuerdo a la edadde la familia (tiempo que lleva constituida la familia) y al numero de integrantes que tenga. Porejemplo, cuando dos Arcoch deciden formar una familia, la Tribu les da una chosa y otros utensilios.

    Se pide construir el Diagrama de E-R que permita almacenar la informacion relevante para losArcoch.

    2.4.2 Farmacias

    Suponga una cadena de farmacias que posee varias bodegas en distintos puntos de la ciudad.Cada sucursal posee un stock de cada tipo de medicamento, los que son adquiridos a distintoslaboratorios (cada medicamento es proporcionado por un solo laboratorio). Las sucursales solicitanmedicamentos a cualquiera de las bodegas. Los medicamentos entregados por los laboratorios sonalmacenados en las bodegas.

    Los documentos utilizados son notas de pedido y guas de entrega. Ademas, el detalle del tipoy cantidad de medicamentos vendidos van quedando registrados en las boletas y facturas.

    Construya un diagrama E-R que permita llevar el control del flujo de entrada (Laboratorios) ysalida de medicamentos (ventas).

  • Chapter 3

    Modelo Relacional

    La Base de Datos se representa mediante un conjunto de tablas. Las tablas representan tanto aconjuntos de entidades como a relaciones. Sobre las tablas se define un conjunto de operacionesque permiten hacer consultas sobre la Base de Datos (Algebra Relacional).

    En el modelo relacional a las tablas se les llama relaciones en un sentido mas general ymatematico. En matematicas, una relacion se define como un subconjunto del producto carte-siano entre un conjunto de dominios. Cada dominio es una columna de la tabla y cada fila es unatupla o elemento del producto cartesiano.

    Al conjunto de atributos de una relacion se le llama esquema de la relacion y se denota,

    Rel(a1 : dom1, a2 : dom2, ...., an : domn)

    donde Rel es el nombre de la relacion, ai es el nombre del i-esimo atributo y domi es el tipo dedatos del i-esimo atributo.

    3.1 Relaciones

    3.1.1 Entidades Fuertes

    Si E es el conjunto de entidades fuertes y e1, e2, ..., en son sus atributos, entonces el conjunto Ese representa mediante una tabla con una columna por cada atributo ei. Ver Figura 3.1.

    3.1.2 Entidades Debiles

    Si D es el conjunto de entidades debiles con atributos d1, ..., dn, y E el conjunto de entidadesfuertes con llave formada por los atributos e1, ..., ek, entonces D se representa mediante una tablaque tiene una columna por cada uno de los atributos e1, ..., ek, d1, ..., dn. Ver Figura 3.2.

    12

  • CHAPTER 3. MODELO RELACIONAL 13

    EMPLEADOS

    rut nombre direccion

    1111111-1 Juan Perez Los Abedules 672222222-2 Luis Jimenez Los Alerces 98

    Figura 3.1:

    VENDEDORES

    rut comision

    1111111-1 202222222-2 15

    Figura 3.2:

    3.1.3 Relaciones

    Si los conjuntos de entidades relacionadas son E1, E2, ..., En y sus llaves son key(Ei), entonces larelacion se representa como una tabla con una columna por cada llave Key(Ei) i=1,2,...,n, mas losatributos propios de la relacion (si los hubiera). Ver Figuras 3.3 y 3.4.

    3.2 Algebra Relacional

    Incluye una serie de operaciones que actuan sobre relaciones completas (tablas) y generan comoresultado otra relacion (tabla). Los operandos son relaciones o variables que representan relaciones.

    Operadores fundamentales:

    union: Si R y S son relaciones, entonces R S denota al conjunto de tuplas que estan en Ro S. Los atributos de R y S deben ser identicos.

    diferencia: Si R y S son relaciones con los mismos atributos, entonces R S es el conjuntode las tuplas de R que no estan en S.

    producto cartesiano: Si R y S son relaciones con atributos a1, a2, ..., ar y b1, b2, ..., bsrespectivamente, entonces R S es el conjunto de tuplas con atributos a1, ..., ar, b1, ..., bs,tal que en cada tupla de R S los primeros r atributos corresponden a R y los siguientess atributos corresponden a S. En la tabla resultante cada tupla de R aparece con todas lastuplas de S. Ver Figura 3.1.

    Proyeccion: El operador pi es un operador unario que permite seleccionar columnas. Si Res una relacion con atributos a1, ..., an, entonces piai, aj , ak(R) produce una relacion con losatributos ai, aj y ak.

    Seleccion: El operador permite seleccionar tuplas desde una relacion de acuerdo a uncondicion . La condicion se construye utilizando nombres de atributos o constantes, losoperadores logicos | (or), & (and) y ! (not), y los operadores de relacion >,

  • CHAPTER 3. MODELO RELACIONAL 14

    TRABAJA

    rut coddepto

    1111111-1 D12222222-2 D2

    Figura 3.3:

    CONTIENE

    codprod codins proporcion

    P1 I1 10P1 I2 90P2 I1 100

    Figura 3.4:

    Si R es una relacion, entonces (R) produce una tabla que contiene todas las tuplas de Rque cumplen la condicion .

    Ejemplos:

    Para las tablas EMPLEADOS y VENDEDORES se pide,

    Seleccionar a todos los vendedores con comision del 10%,

    R1 comision=10(VENDEDORES)

    Mostrar el rut,R2 pirut(R1)

    Mostrar el rut y el nombre,

    R3 EMPLEADOSR2

    R4 EMPLEADOS.rut=R2.rut(R3)

    R5 pirut,nombre(R4)

    A partir de los operadores fundamentales se pueden definir otros operadores,

    Interseccion: R S = R (R S).

    Join: Join (1) es un operador binario que combina el producto cartesiano y la seleccion,

    R 1 S = (R S).

  • CHAPTER 3. MODELO RELACIONAL 15

    R = A B

    a1 b1a2 b2

    S = C D

    c1 d1c2 d2

    R S = A B C D

    a1 b1 c1 d1a1 b1 c2 d2a2 b2 c1 d1a2 b2 c2 d2

    Figure 3.1:

    Join Natural: Se indica con el operador 1 y la condicion de seleccion es que las tuplastengan el mismo valor en las columnas con el mismo nombre (si no hay atributos con elmismo nombre el efecto es similar al producto cartesiano),

    R 1 S = pib1, ..., bn

    (R.a1 = S.a1 & ...&R.ak = S.ak

    (R S)),

    donde a1, ..., ak son los atributos comunes y b1, ..., bn son todos los atributos de R Seliminando las repeticiones.

    Couciente: Es la operacion inversa al producto cartesiano. Si a1, ..., an son los atributos deR y a1, ..., ak (con k < n) son los atributos de S (i.e. el esquema de S es un subconjunto delesquema de R), entonces R S es el conjunto de tuplas t tales que para toda tupla s en Sexista una tupla r en R tal que

    s[a1, ..., ak] = r[a1, ..., ak]

    r[ak+1, ..., an] = t.

    Dicho de otra forma: R S es el conjunto de tuplas t tales que para toda tupla s en S, latupla st esta en R. Ver Figura 3.2. Utilizando los operadores fundamentales el operador se define como

    R S = piak+1, ..., an(R)piak+1, ..., an((piak+1, ..., an(R) S

    )R

    ).

    Ejemplos:

    Se desea conocer el rut y nombre de todos los vendedores,

    pirut,nombre(EMPLEADOS 1 VENDEDORES)

    Idem al anterior, pero para los vendedores con 10% de comision,

    pirut,nombre(comision = 10(EMPLEADOS 1 VENDEDORES)

    )

    Obtener los insumos que se utilizan en todos los productos,

    picodprod,codins(CONTIENE)picodprod(PRODUCTOS).

  • CHAPTER 3. MODELO RELACIONAL 16

    R = A B

    a1 b1a1 b2

    S = B

    b1b2

    a2 b1

    R S = A

    a1

    Figure 3.2:

    3.3 Problemas

    3.3.1 Proyectos

    Considere la siguiente Base de Datos:

    EMPLEADOS(codemp,nombre,salario)

    TRABAJA_EN(codproy,codemp)

    PROYECTO(codproy,presupuesto)

    DIRECTOR(codproy,codemp)

    Responda las consultas:

    Salarios de todos los directores de proyectos.

    Salarios de todos los empleados que trabajan en todos los proyectos.

    Empleados asignados a proyectos que no tienen director.

    3.3.2 Medicamentos

    Una Base de Datos farmacologica contiene medicamentos, senalando para que patologa estanindicados, y que laboratorios los producen (indicando el nombre comercial que cada laboratorio leasigna). Ademas, se tiene una lista de medicamentos incompatibles entre s. Esto se almacena enlas siguientes tablas:

    MEDICAMENTOS(codigo,descripcion)

    PROVEEDORES(codigo,laboratorio,nombre_comercial)

    INDICACIONES(codigo,patologia)

    INCOMPATIBLES(codigo1,codigo2)

    Responder las siguientes consultas,

    Nombre comercial de todos los medicamentos para el resfro comun que se pueden tomarjunto con Aspirina.

  • CHAPTER 3. MODELO RELACIONAL 17

    Todos los pares de medicamentos que sirven para la misma enfermedad.

    Todos los laboratorios que no producen ninguna forma de Acido Acetil Salicilico (substringen el atributo descripcion).

  • Chapter 4

    SQL

    SQL (Structured Query Language) es un estandar para lenguajes de consulta (DML) utilizados enlos DBMS relacionales. SQL combina operadores del algebra relacional en su instruccion basica deconsulta, select-from-where.

    4.1 Consultas

    La instruccion select-from-where combina los operadores pi, y , y su forma tpica es

    select a1, a2, ..., anfrom R1, R2, ..., Rkwhere

    donde a1, ..., an son los atributos de la tabla resultante, R1, ..., Rk son las tablas que participanen la consulta y es la condicion que deben complir las tuplas de salida. Esta instruccion esequivalente a la expresion

    pia1, ..., an ((R1 R2 ... Rk)) .

    Si where se omite, se supone que la condicion de verdadera y colocar un en select implicaproyectar sobre todas las columnas del producto cartesiano.

    Ademas, se incluyen las operaciones union, intersect y minus que corresponden directamente alos operadores , y del algebra relacional. La equivalencia entre los operadores fundamentalesy SQL estan dadas en la Figura 4.1.

    4.1.1 Descripcion y Ejemplos

    Encontrar todos los productos que han sido vendidos alguna vez.

    select CodProd

    from VENTAS

    En la practica no se eliminan automaticamente las tuplas repetidas, luego cada CodProdaparece en el resultado tantas veces como aparece en VENTAS. Una solucion es utilizar laclausula distinct.

    18

  • CHAPTER 4. SQL 19

    R S R S R S pia1, ..., an(R) (R)

    select select select select a1, ..., an select from R from R from R,S from R from Runion minus where select select from S from S

    Figura 4.1:

    select distinct CodProd

    from VENTAS

    Encontrar el rut y nombre de todos los vendedores con comision del 10%.

    select ERut,ENombre

    from EMPLEADOS,VENDEDORES

    where EMPLEADOS.ERut=VENDEDORES.VRut AND

    Comision=10

    En SQL se pueden definir variables de tipo tupla. Se definen en la clausula from y se asociana una tabla en particular.

    Encontrar todos los empleados que trabajan en el mismo departamento de Gonzalez (rut2222222-2).

    select t.Rut

    from TRABAJA t, TRABAJA s

    where s.Rut=2222222-2 AND t.CodDepto=s.CodDepto

    Tambien se puede preguntar por la pertenencia de una tupla a una tabla.

    Encontrar todos los clientes que han comprado productos fabricados por el departamento deproductos agrcolas (codigo DA).

    select CRut,CNombre

    from VENTAS,CLIENTES

    where VENTAS.CRut=CLIENTES.CRut AND

    CodProd IN (select CodProd

    from FABRICA

    where CodDepto="DA")

    Encontrar todos los productos que tengan precio mayor que algun producto del departamentode productos agrcolas.

    select CodProd,Precio

    from PRODUCTOS

  • CHAPTER 4. SQL 20

    where Precio > ANY (select Precio

    from PRODUCTOS,FABRICA

    where CodDepto="DA" AND

    PRODUCTOS.CodProd=FABRICA.CodProd)

    Se puede preguntar si una relacion esta contenida en otra.

    Encontrar todos los insumos que se usan en todos los productos.

    select *

    from INSUMOS t

    where (select CodProd

    from CONTENIDOS s

    where s.CodIns=t.CodIns)

    CONTAINS

    (select CodProd

    from PRODUCTOS)

    Tambien se puede indicar que la tabla resultante de una consulta aparezca en algun orden.

    Mostrar los nombres de todos los vendedores en orden alfabetico.

    select ENombre

    from EMPLEADOS,VENDEDORES

    where EMPLEADOS.ERut=VENDEDORES.VRut

    ORDER BY ENombre

    Existen las funciones estadsticas avg, min, max, sum y count.

    Calcular el numero de empleados.

    select count(*)

    from EMPLEADOS

    Encontrar la cantidad total vendida del producto de codigo 100.

    select sum(Cantidad)

    from VENTAS

    where CodProd=100

    Obtener el total de clientes que han comprado.

    select count(distinct CRut)

    from VENTAS

    Es posible obtener valores por grupos.

    Encontrar la cantidad vendida de cada producto.

  • CHAPTER 4. SQL 21

    select CodProd,sum(Cantidad)

    from VENTAS

    GROUP BY CodProd

    Es posible aplicar condiciones a grupos completos.

    Idem al anterior, pero solo interesan los productos en que la suma sea mayor que 500.

    select CodProd,sum(Cantidad)

    from VENTAS

    group by CodProd

    HAVING sum(Cantidad) > 500

    4.2 Tablas

    4.2.1 Creacion de Tablas

    CREATE TABLE NombreTabla (definicion de columnas)

    Crea una tabla vaca y el creador queda como su dueno. Ejemplo,

    CREATE TABLE TRANSACCION (

    TN char(5) NOT NULL,

    VN char(5) NOT NULL,

    CN char(5) NOT NULL,

    Fecha date,

    Cantidad decimal(8,2) )

    4.2.2 Eliminacion de Tablas

    DROP TABLE NombreTabla

    Elimina una tabla con todas las tuplas que tenga. Solo puede ser eliminada por su dueno. Ejemplo,

    DROP TABLE TRANSACCION

    4.2.3 Agregar Columnas a una Tabla

    ALTER TABLE NombreTabla ADD DefinicionesColumnas

    Ejemplo,

    ALTER TABLE EMPLEADOS ADD (EFono char(20))

  • CHAPTER 4. SQL 22

    4.2.4 Creacion de Indices

    CREATE [UNIQUE] INDEX NombreIndice ON NombreTabla (Columnas)

    UNIQUE es opcional y no permite dos o mas tuplas con el mismo valor en las columnas indexadas.Ejemplo,

    CREATE INDEX IRUT ON VENDEDORES (VRut)

    Eliminacion de un ndice,

    DROP INDEX IRUT

    4.2.5 Recuperacion de la Informacion

    SELECT [UNIQUE] ListaColumnas

    FROM ListaTablas

    [ WHERE Condicion | SubConsulta ]

    [ GROUP BY ListaColumnas

    [ HAVING Condicion ] ]

    [ ORDER BY ListaColumnas ]

    4.2.6 Insercion

    INSERT INTO NombreTabla

    VALUES ( Valores para cada columna )

    4.2.7 Eliminacion

    DELETE FROM NombreTabla

    WHERE Condicion

    4.2.8 Modificacion

    UPDATE NombreTabla

    SET Columna a modificar con su nuevo valor

    WHERE Condicion

    4.2.9 Ejemplos Adicionales

    Encontrar todos los vendedores de Santiago.

  • CHAPTER 4. SQL 23

    select *

    from VENDEDORES,EMPLEADOS

    where VENDEDORES.VRut=EMPLEADOS.ERut AND

    ECiudad="Santiago"

    Encontrar VN y ENombre (ordenados por nombre) para todos los vendedores de Santiagoque tienen un saldo mayor que 200.000.

    select VN,ENombre

    from VENDEDORES,EMPLEADOS

    where ECiudad="Santiago" AND

    VSaldo > 200000 AND

    VENDEDORES.VRut=EMPLEADOS.ERut

    order by ENombre

    Encontrar CRut y CNombre para todos los clientes que tienen alguna transaccion de montomayor que 50.000.

    select unique CLIENTES.CRut, CNombre

    from CLIENTES,TRANSACCION

    where CLIENTES.CRut=TRANSACCION.CRut AND

    Cantidad > 50000

    Encontrar CRut para los clientes que tienen transacciones con los vendedores V1 y V2.

    select unique X.CRut

    from TRANSACCION X, TRANSACCION Y

    where X.VN="V1" AND

    Y.VN="V2" AND

    X.CRut=Y.CRut

    De otra manera:

    select unique CRut

    from TRANSACCION

    where VN="V1" AND

    CRut IN ( select CRut

    from TRANSACCION

    where VN="V2" )

    En cuantas ciudades distintas existen clientes?.

    select count( unique CCiudad )

    from CLIENTES

    Ingresar el cliente Gonzalez en la Base de Datos.

    insert into CLIENTES values ("C27","Gonzalez",0,50000)

  • CHAPTER 4. SQL 24

    Aumentar el saldo a los clientes de Santiago en un 10%.

    update CLIENTES

    set CSaldo = 1.10*CSaldo

    where CCiudad = "Santiago"

    Eliminar a los clientes con saldo cero.

    delete from CLIENTES

    where CSaldo = 0

    Aumentar en 10% el saldo de los clientes que tienen mas de 10 transacciones.

    update CLIENTES

    set CSaldo = 1.10*CSaldo

    where 10 < ( select count(*)

    from TRANSACCION

    where TRANSACCION.CRut=CLIENTES.CRut )

    4.2.10 Vistas

    Se utiliza el termino vista para referirse a una tabla virtual construida a partir de otras tablas(virtuales o reales). Se pueden crear varias vistas para una misma Base de Datos.

    Creacion de una vista:

    CREATE VIEW NombreVista AS ExpresionSelect

    Ejemplo,

    create view CLIENTES_SANTIAGO AS ( select CRut,CNombre

    from CLIENTES

    where CCiudad="Santiago" )

    Una vez creada la vista, el nombre de esta puede usarse para hacer referencia a la tabla virtual. Losnombres de vistas pueden aparecer en cualquier lugar donde sea posible la aparicion del nombre deuna tabla. Ejemplo,

    select C.CRut,CNombre

    from CLIENTES_SANTIAGO C,TRANSACCION T

    where VN="V1" AND

    C.CRut=T.CRut

    Eliminacion: La eliminacion de una vista se puede hacer mediante la instruccion,

    DROP VIEW NombreVista

  • CHAPTER 4. SQL 25

    4.3 Problemas

    4.3.1 Actividades y Recursos

    La Base de Datos para una importante Empresa incluye las siguientes tablas,

    DEPARTAMENTOS(CodDepto,NomDepto)

    ACTIVIDADES(CodAct,NomAct,Unidad)

    RECURSOS(CodRec,NomRec,Unidad)

    AUTORIZACIONES(CodDepto,CodAct)

    PERMISOS(CodAct,CodRec)

    VALORES(CodRec,Mes,Precio)

    CONSUMOS(CodDepto,CodAct,CantAct,CodRec,CantRec,Fecha)

    Cada departamento de la Empresa esta autorizado a realizar solo ciertas actividades. Esto se reflejaen la tabla AUTORIZACIONES. Analogamente, al realizarse una actividad se esta autorizado aconsumir ciertos recursos, esto se indica en la tabla PERMISOS. Cada recurso mantiene su preciodurante un mes, la tabla VALORES indica el precio de cada recurso para cada mes del ano encurso. La tabla consumo expresa las actividades realizadas por cada departamento y los recursosgastados al realizar dicha actividad. Responda las siguientes consultas en SQL:

    Que departamentos han realizado alguna actividad sin tener autorizacion?. (Indicar el nombredel departamento, actividad y fecha).

    Que departamentos estan autorizados a utilizar todos los recursos?.

    Cuanto dinero consumio el departamento de Mantencion durante el mes de Marzo,

    Cuanto dinero consumio cada departamento en la actividad Ensamblar durante el mes deAbril?.

    Cual es el departamento mas eficiente en realizar la actividad Aseo?.

    Cuales son los departamentos que estan autorizados a realizar las mismas actividades?.

    (suponga que existe una funcion month que recibe como parametro una fecha y retorna el mescorrespondiente).

    4.3.2 Aerolneas

    Para las tablas,

    VUELOS( CodVuelo, PaisOrigen, PaisDestino )

    AEROLINEAS( CodVuelo, NombreAeroLinea )

    PILOTOS( CodPiloto, Nombre, Edad, HorasVuelo )

    PILOTEAN( CodVuelo, CodPiloto )

    Responda las siguientes consultas en SQL:

  • CHAPTER 4. SQL 26

    Cantidad de vuelos que realiza Avianca a Colombia.

    Edad promedio de los pilotos que tienen mas de 3.000 horas de vuelo.

    Nombre y aerolnea a la que pertenece el piloto con mayor cantidad de vuelos.

    Numero total de horas de vuelo de Lan Chile.

    Nombre, edad y aerolnea a la que pertenecen los pilotos que tienen menos de 40 anos deedad.

    Nombre de las aerolneas que viajan entre Espana y Chile (hacia y/o desde).

    Todos los pilotos que pertenecen a Lan Chile.

    Paises a donde llega Lan Chile.

    Pilotos que han estado en todos los paises a donde llega Lan Chile.

    4.3.3 Almacenes

    Considere las siguientes tablas,

    ALMACENES( CodAlm, Jefe, Direccion )

    PRODUCTOS( CodProd, Descrip, Precio )

    INVENTARIO( CodAlm, CodProd, Stock )

    VENTAS( CodAlm, CodBoleta, Fecha, Total )

    BOLETAS( CodBoleta, CodProd, Cantidad, Precio )

    Se pide responder las siguientes consultas en SQL:

    Para una boleta dada entregar el nombre y precio unitario de los productos que incluye, y laubicacion del almacen donde se emitio.

    Dada una fecha, entregar una lista con todos los productos que ha vendido cada almacen.

    Ubicacion de todos los almacenes donde exista stock cero para algun producto.

  • Chapter 5

    Normalizacion

    Normalmente existen varias alternativas para el conjunto de tablas y sus esquemas en una Base deDatos. El objetivo es establecer criterios para escoger la mejor alternativa.

    5.1 Problemas que generan un mal diseno

    Consideremos la tabla

    PROVEEDORES(codprov, nomprov, codinsumo, precio)

    esta tabla presenta varios problemas

    REDUNDANCIA: El nombre del proveedor se repite por cada insumo que suministra.

    INCONSISTENCIAS: El proveedor puede aparecer con nombres distintos, en tuplas distintas,producto de errores en actualizaciones.

    ELIMINACION: Al borrar las tuplas de un producto determinado, perdemos datos como sunombre.

    INSERCION: Para insertar el nombre de un proveedor, es necesario que realmente este ven-diendo algo.

    Para el ejemplo, la solucion es descomponet la tabla PROVEEDORES en:

    DATOS_PROVEEDOR(cod_prov, nombre)

    SUMINISTROS(codprov, codinsumo, precio)

    Ahora para responder la consulta Nombre de cada proveedor que suministra el producto de codigo103, se debe hacer el join natural entre DATOS PROVEEDOR y SUMINISTROS.

    Una descomposicion mal hecha, puede implicar perdida de informacion. Por ejemplo,

    27

  • CHAPTER 5. NORMALIZACION 28

    PI(codinsumo, precio)

    NDP(codprov, nomprov, precio)

    Tabla original:

    codprov nombprov codinsumo precio

    ---------------------------------------

    P1 Silva 100 200

    P1 Silva 103 70

    P2 Morales 201 200

    P3 Gallardo 305 100

    P3 Gallardo 390 70

    ---------------------------------------

    Descomposicion

    PI NDP

    codinsumo precio codprov nomprov precio

    ------------------ ----------------------------

    100 200 P1 Silva 200

    103 70 P1 Silva 70

    201 200 P2 Morales 200

    305 100 P3 Gallardo 100

    390 70 P3 Gallardo 70

    ------------------ ----------------------------

    El join natural de PI y NDP da como resultado:

    codprov nombprov codinsumo precio

    ---------------------------------------

    P1 Silva 100 200

    P1 Silva 201 200

    P1 Silva 103 70

    P1 Silva 390 70

    P2 Morales 100 200

    P2 Morales 201 200

    P3 Gallardo 305 100

    P3 Gallardo 103 70

    P3 Gallardo 390 70

    ---------------------------------------

    La respuesta a la consulta Nombre de cada proveedor que suministra el producto 103, la entregala respuesta

    P1 Silva 103 70

    P3 Gallardo 103 70

  • CHAPTER 5. NORMALIZACION 29

    Luego se ha perdido informacion ya que la respuesta obtenida no es correcta y no hay forma desaber cual es la respuesta correcta.

    NDP y PI es una descomposicion con perdida de informacion. Una descomposicion sin sinperdida de informacion es aquella en que al hacer un join natural de las tablas resultantes de ladescomposicion se obtiene la tabla original.

    Existe una jerarqua de formas normales, desde la primera (1FN la mas relajada), hasta laquinta (5FN la mas exigente), que permiten descubrir si una descomposicion ha sido bien hecha.

    5.2 Primera forma normal

    Una relacion R esta en 1 FN si los dominios utilizados contienen solo valores atomicos o escalares.

    rut_cliente deuda

    ----------------------------------------------------------------------------------

    1111-1 (10.000,30/4/93),(10.000,30/5/93),(10.000,30/6/93)

    9999-9 (20.000,30/4/93),(10.000,30/5/93)

    ----------------------------------------------------------------------------------

    Ahora, en 1 FN

    rut_cliente monto fecha_vencimiento

    ---------------------------------------------------

    1111-1 10.000 30/4/93

    1111-1 10.000 30/5/93

    1111-1 10.000 30/6/93

    9999-9 20.000 30/4/93

    9999-9 10.000 30/5/93

    ---------------------------------------------------

    5.3 Dependencias Funcionales

    Sea R una relacion con atributos (a1, a2, ..., an) y sean X e Y dos subconjuntos de los atributos ai.Se dice que Y depende funcionalmente de X y se anota

    X Y

    si para todo par de tuplas t1 y t2 se cumple

    t1[X] = t2[X] = t1[X] = t2[X]

    Por ejemplo, para la tabla

  • CHAPTER 5. NORMALIZACION 30

    PROVEEDORES(codprov, nomprov, codinsumo, precio)

    se tienen las siguientes dependencias funcionales:

    codprov nomprov

    (codprov, codinsumo) precio

    Las dependencias funcionales no son una propiedad del contenido actual de la tabla, sino quedel mundo real representado a traves del esquema de la tabla o relacion.

    El concepto de dependencia funcional es similar al concepto de llave(key), pero este ultimo esmas exigente:Un subconjunto K de atributos (a1, a2, ..., an) de una relacion R es llave si:

    1. K (a1, a2, ..., an) con (a1, a2, ..., an) siendo el conjunto total de atributos de R, y

    2. No existe Y K tal que Y (a1, a2, ..., an).

    Note que si existe K X y X (a1, a2, ..., an), y K (a1, a2, ..., an), entonces X es unasuperllave o llave candidata. Tambien es llave candidata si | X |=| K | y X 6= K.

    A partir de un conjunto de dependencias funcionales se pueden deducir otras. Por ejemplo,consideremos una relacion con atributos a, b y c donde a b y b c, entonces se debe cumplira c.

    Existen tres axiomas basicos: Sea R el esquema de una relacion y F el conjunto de dependenciasfuncionales de R, entonces

    1. Reflexibidad: Si Y X R entonces X Y independientemente de F . Por ejemplo,A A y AB A.

    2. Aumentacion: Si X Y pertenece a F , y Z R, entonces XZ Y Z.

    3. Transitividad: Si X Y pertenece a F , y tambien Y Z pertenece a F , entoncesX Z.

    A partir de estos axiomas se deducen

    1. Union: Si X Y y X Z entonces X Y Z.

    2. Descomposicion: Si X Y Z, entonces y X Y y X Z.

    3. Transitividad: Si X Y y WY Z entonces XW Z.

    Tambien, todo atributo se determina as mismo A A (dependencia trivial).

  • CHAPTER 5. NORMALIZACION 31

    5.4 Propiedades deseables de una descomposicion

    Sea R el esquema de una relacion (conjunto de atributos) y sean R1 y R2, con R1 R2 = R,esquemas de una descomposicion sin perdida de informacion de R.

    Se puede asegurar que la descomposicion es sin perdida de informacion si se cumple al menosuna de las siguientes dependencias:

    1. (R1 R2) (R1 R2) (R1 R2) R1.

    2. (R1 R2) (R2 R1) (R1 R2) R2.

    Por ejemplo, para la tabla

    PROVEEDORES ( codprov, nomprov, codinsumo, precio)

    si la descomposicion es:

    R1 = (codprov, nomprov)

    R2 = (codprov, codinsumo, precio)

    R1 R2 = (codprov) y codprov nomprov, y R1 R2 = (nomprov).

    En cambio si la descomposicion es:

    R1 = (codinsumo, precio)

    R2 = (codprov, nomprov, precio)

    R1 R2 = (precio) y precio no determina a codinsumo, ni tampoco a (codprov, nomprov).

    5.5 Conservacion de las dependencias funcionales

    Cuando se descompone una tabla se heredan las dependencias funcionales segun los atributos decada descomposicion.

    Llamemos F al conjunto de dependencias funcionales de una relacion R y Fi al conjunto dedependencias funcionales de Ri.

  • CHAPTER 5. NORMALIZACION 32

    Fi es el conjunto de dependencias que estan en F , pero que solo mencionan atributos de Ri.Algunas de las dependencias funcionales de F podran no aparecer en ningun Fi, es decir Fi 6= F .

    Por ejemplo, consideremos el esquema (ciudad, calle, comuna), y supongamos que dentrode una ciudad no hay calles repetidas y que dos ciudades distintas no tienen comunas del mismonombre. Pueden haber dos ciudades con el mismo nombre de calle. Luego las dependencias en Fson:

    comuna ciudad (ciudad, calle comuna

    con llave (ciudad, calle). Si descomponemos en:

    R1 = (comuna, ciudad) R2 = (calle, comuna)

    tenemos las dependencias

    F1 = { comuna ciudad }

    F2 = solo las triviales calle calle y comuna comuna.

    La dependencia (ciudad, calle) comuna no aparece en ningun Fi. Para este esquema noexiste ninguna descomposicion que conserve todas las dependencias funcionales. Pero la descom-posicion es sin perdida de informacion puesto que,

    R1 R2 = { comuna } y comuna ciudad

    Una descomposicion conserva todas las dependencias funcionales si toda dependencia presenteen F esta en Fi o si puede ser deducida a partir de Fi.

    Por ejemplo, consideremos el esquema (A, B, C) y supongamos cumplenA B, yB C,entonces tambien sabemos que existe A C. Supongamos que descomponemos en R1(A,B) yR2(B,C), entonces F1 = {A B} y F2 = {B C}. Como F1 F2 implican A C,entonces la descomposicion conserva todas las dependencias funcionales.

    Si no se puede hacer una descomposicion que conserve las dependencias funcionales, entoncesno se hace la descomposicion.

  • CHAPTER 5. NORMALIZACION 33

    5.6 Segunda forma normal (2FN)

    Una relacion R esta en 2FN si esta en 1FN, y cada atributo que no pertenece a la llave dependefuncionalmente de toda la llave.

    Por ejemplo, la tabla

    PROVEEDORES(codprov, nomprov, codinsumo, precio)

    tiene dependencias

    codprov nomprov

    (codprov, codinsumo) precio

    La llave es (codprov, codinsumo). Como el atributo nomprov depende solo de parte de la llave,y no de toda la llave, entonces la tabla PROVEEDORES no esta en 2FN.

    Toda relacion que no esta en 2FN se puede descomponer sin perdida de informacion y conser-vando todas las dependencias funcionales, en un conjunto de tablas o relaciones que s lo estan.

    Para PROVEEDORES la descomposicion es

    R1 = (codprov,nomprov)

    R2 = (codprov,codinsumo,precio)

    Una relacion en 2FN puede tener otras dependencias funcionales, tales como dependencias entreatributos que no son parte de la llave. Por ejemplo,

    (empleado,departamento,gerencia)

    con dependencias funcionales

    empleado departamentodepartamento gerenciaempleado gerencia

    con llave empleado. Esta relacion esta en 2FN porque todos los atributos dependen de la llave.

  • CHAPTER 5. NORMALIZACION 34

    Pero la tabla presenta problemas debido a la duplicacion de (departamento,gerencia).

    5.7 Tercera forma normal (3FN)

    Una relacion o tabla R esta en 3FN si esta en 2FN, y todas las dependencias funcionales X A,con X R y A R que se cumplen, son de alguno de los siguientes tipos:

    X A es trivial (e.g., la tabla es toda la llave).

    X es o contiene una llave (superllave)

    A esta contenido en una llave para R.

    La diferencia entre 3FN y 2FN es que en 3FN se prohben las dependencias entre dos lados queno esten en la llave. Es decir, todos los atributos que no estan en la llave dependen de toda la llave)2FN) y solo de la llave (3FN).

    Por ejemplo, el esquema (empleado,departamento,gerencia) no esta en 3FN ya que la de-pendencia departamento gerencia esta prohibida. La solucion es descomponer en

    (empleado,departamento)

    (departamento,gerencia)

    donde ambos esquemas s estan en 3FN.

    El esquema (ciudad,calle,comuna) con dependencias funcionales

    (ciudad,calle) comuna

    comuna ciudad

    con llave (ciudad,calle) s esta en 3FN.

    Dado un esquema que no esta en 3FN, siempre es posible descomponerlo en una coleccion deesquemas que s esta en 3FN, sin perdida de informacion y conservando las dependencias funcionales.

    5.8 Forma normal Boyce-Codd (FNBC)

    Una relacion R esta en FNBC si todas las dependencias funcionales X A, con X R yA R que se cumplen, son de alguno de los siguientes tipos:

  • CHAPTER 5. NORMALIZACION 35

    X A es trivial (e.g., la tabla es toda la llave)

    X es o contiene una llave (superllave).

    Por ejemplo, el esquema (ciudad,calle,comuna) no esta en FNBC, y no es posible descom-poner este esquema conservando todas las dependencias funcionales.

    Dado un esquema que no esta en FNBC, no siempre es posible descomponerlo en esquemas ques lo esten, conservando las dependencias funcionales. Los objetivos de la normalizacion son:

    FNBC, conservando dependencias funcionales e informacion, y si no se puede,

    3FN conservando dependencias funcionales e informacion.

    5.9 Dependencias multivaluadas

    Consideremos el esquema

    (codprod, depto, codinsumo)

    la llave esta formada por todos los atributos de la tabla. Supongamos la siguiente instancia dela tabla:

    codprod depto codinsumo

    -------------------------------------------------

    01 Agricultura 300

    01 Industria 300

    01 Agricultura 600

    01 Industria 600

    . . .

    . . .

    . . .

    -------------------------------------------------

    A partir de los datos de la tabla se puede concluir que:

    Este esquema tiene dependencias funcionales triviales.

    Es esquema esta en FNBC, sin embargo puede haber mucha redundancia.

    Existen problemas para las operaciones de insercion y eliminacion.

  • CHAPTER 5. NORMALIZACION 36

    Estos problemas se deben a que la relacion entre codprod y depto es independiente de la relacionentre codprod y codinsumo.

    Sea R un esquema formado por los atributos A,B, y C. La dependencia multivaluada

    A B

    existe s y solo s el conjunto de valores de B que se obtienen para un par de valores (A,C),depende solo del valor de A y es independiente de los valores para C. Note que si existe A Bentonces tambien existe A C. Se acostumbra a escribir A B|C

    Otro ejemplo es la tabla

    curso profesor texto

    ----------------------------------------------

    C1 P1 T1

    C1 P1 T2

    C1 P2 T1

    C1 P2 T2

    ----------------------------------------------

    donde se cumple curso profesor|texto.

    Si X Y entonces X Y , pero las dependencias multivaluadas no cumplen las mismaspropiedades funcionales. Por ejemplo, si X Y Z no necesariamente se cumple X Yo X Z. A la inversa, si se cumple X Y y X Z, entonces X Y Z.

    5.10 Cuarta Forma Normal 4FN

    Sea R un esquema, R esta en 4FN s y solo s todas las dependencias multivaluadas de la formaX Y , con X R e Y R que se cumplen, son de alguno de los siguientes tipos:

    X Y es trivial (i.e., R = (X,Y )).

    X contiene una llave para R.

    Si R esta en 4FN, entonces tambien esta en FNBC.

    Por ejemplo, el esquema

  • CHAPTER 5. NORMALIZACION 37

    (codprod, depto, codinsumo, codprov)

    no esta en 4FN debido a que existe codprod depto, y codprod no es llave para este esquema.

    Si descomponemos en

    R1 = (codprod,depto)

    R2 = (codprod,codinsumo,codprov)

    tenemos que

    R1 s esta en 4FN ya que la dependencia multivaluada codprod depto que se cumplees trivial.

    R2 no esta en 4FN debido a que (en particular) codinsumo codprov, y codinsumo noes llave.

    Descomponiendo R2 en

    R3 = (codprod,codinsumo)

    R4 = (codinsumo,codprov)

    tenemos que las dependencias multivaluadas son triviales, luego R3 y R4 estan en 4FN.

    Tal como antes, interesan las descomposiciones sin perdida de informacion y que conserven lasdependencias funcionales.

    Sea R un esquema, y sean R1 y R2 una descomposicion de R, entonces la descomposicion es sinperdida de informacion s y solo s se cumple una de las siguientes condiciones:

    (R1

    R2) (R1 R2),

    (R2

    R1) (R2 R1).

    En el ejemplo,

    (R1

    R2) = { codprod },

  • CHAPTER 5. NORMALIZACION 38

    (R1 R2) = { depto }.

    Por lo tanto, la descomposicion es sin perdida de informacion debido a que

    codprov depto

    Sea R un esquema y R1, R2, . . . , Rn una descomposicion de R, las dependencias multivaluadaspresentes en R, que tambien estan en Ri, son las dependencias de la forma:

    X YRi

    donde X Ri y X Y se cumple en R.

    No siempre es posible alcanzar 4FN conservando todas las dependencias multivaluadas.

    Una relacion R(A,B,C) donde A B y B C, es conveniente descomponerla enR1(A,B) y R2(B,C), antes que descomponer R1(A,B) y R2(A,C). Esto tambien es valido si secumple que A B y B C.

    5.11 Dependencias de Join

    Existen relaciones que no pueden ser descompuestas sin perdida de informacion en dos relaciones,pero si pueden ser descompuestas en tres o mas relaciones, sin perder informacion.

    Consideremos el esquema SPJ(S,P,J) con descomposicion SP(S,P), PJ(P,J) y JS(J,S). Unainstancia de valores de SPJ puede ser la siguiente:

    SPJ: S P J llave(S,P,J)

    ---------------

    S1 P1 J2

    S1 P2 J1

    S2 P1 J1

    S1 P1 J1

    ---------------

    SP: S P PJ: P J JS: J S

    ---------- ---------- ----------

    S1 P1 P1 J2 J2 S1

    S1 P2 P2 J1 J1 S1

    S2 P1 P1 J1 J1 S2

    ---------- ---------- ----------

  • CHAPTER 5. NORMALIZACION 39

    Tablas SP y PJ, join sobre P.

    SPJ: S P J

    ---------------

    S1 P1 J2

    S1 P1 J1

    S1 P2 J1

    S2 P1 J2 ---> tupla falsa

    S2 P1 J1

    ---------------

    ahora se hace join sobre (J,S) con la tabla JS.

    SPJ: S P J

    ---------------

    S1 P1 J2

    S1 P2 J1

    S2 P1 J1

    S1 P1 J1

    ---------------

    con lo cual se obtiene la tabla original.

    La dependencia join del ejemplo anterior se mostro en funcion de un conjunto particular dedatos. Pero al igual que las dependencias funcionales o multivaluadas, una dependencia join es unarestriccion impuesta a una relacion dada.

    Una relacion R satisface una dependencia join (R1, R2, . . . , Rn) si y solo si R es igual al joinnatural de sus proyecciones R1, R2, . . . , Rn son subconjuntos de atributos de R.

    Una dependencia join (R1, R2, . . . , Rn) es trivial si algun Ri = R.

    En el ejemplo anterior la relacion SPJ satisface la dependencia join (SP,PJ,JS).

    Una relacion R(A,B,C) satisface la dependencia join (AB,AC) si y solo si R satisface ladependencia multivaluada A B|C. Es decir, una dependencia multivaluada es un caso espe-cial de dependencia join. Las dependencias join son la forma de dependencia mas general que existe.

    La restriccion impuesta a SPJ representa situaciones como la siguiente:

    Si

  • CHAPTER 5. NORMALIZACION 40

    1. Perez suministra el insumo I1, (Perez, I1, xx), y

    2. El insumo I1 se utiliza en el producto P1, (xx, I1, P1), y

    3. Perez suministra insumos para el producto P1, (Perez, xx, P1),

    entonces

    Perez suministra el insumo I1 para el producto P1, (Perez, I1, P1).

    Observemos que la sola existencia de las tuplas (Perez, I1, xx), (xx, I1, P1), y (Perez, xx, P1),no necesariamente implican la tupla (Perez, I1, P1), de manera que debe ir explcitamente en latabla.

    (SP,PJ,JS) indica que SPJ puede ser descompuesta en SP,PJ,JS. La relacion original pre-senta problemas en las operaciones de actualizaciones que no estan presentes en la descomposicion.

    Tal como las dependencias multivaluadas sirven para indicar que dos relaciones son independi-entes entre s, la dependencia join sirve para indicar que tres o mas relaciones son independientesentre s.

    5.12 Quinta forma normal 5FN

    Una relacion R esta en 5FN si y solo si todas las dependencias de join que se cumplen, con (R1, R2, . . . , Rn) donde Ri R y

    ni=1Ri = R, son de alguno de los siguientes tipos:

    (R1, R2, . . . , Rn) es trivial, es decir, algun Ri = R, o

    Todo Ri es o contiene una llave para R.

    Por ejemplo, la relacion

    PROVEEDORES(codprov,nomprov,ciudad,facx

    con codprov (nomprov,ciudad,fax), esta en 5FN porque todas las dependencias join quesatisface contienen una llave. Por ejemplo,

    ( (codprov,nomprov,fax),(codprov,ciudad) )

    ( (codprov,nomprov),(codprov,ciudad),(codprov,fax) )

  • CHAPTER 5. NORMALIZACION 41

    5.13 Problema 1

    Consideremos una base de datos para una empresa de corredores de bolsa, formada por la siguientetabla

    R = (inversionista,accion,cantidad,dividendo,corredor,oficina)

    donde

    inversionista: es un cliente de la empresa que compra acciones por intermedio de la em-presa. Un inversionista se atiende siempre con el mismo corredor.

    accion: es un tipo de accion, por ejemplo Edelmag.

    cantidad: es el numero de acciones que posee un inversionista de una accion determinada.

    dividendo: utilidad de cada tipo de accion.

    corredor: es un empleado de la empresa.

    oficina: oficina de un corredor.

    Las dependencias funcionales son las siguientes:

    inversionista corredor

    accion dividendo

    corredor oficina

    la llave es: (inversionista,accion).

    R no esta en 2FN debido a inversionista corredor y accion dividendo.

    Las dependencias multivaluadas son las siguientes:

    inversionista (accion,cantidad,dividendo)|(corredor,oficina).

    Dividimos en dos tablas:

    R1 = (inversionista,corredor,oficina)

    R2 = (inversionista,accion,cantidad,dividendo)

  • CHAPTER 5. NORMALIZACION 42

    note que R1R2 = { inversionista }, e inversionista (corredor,oficina), es decir, no

    hay perdida de informacion.

    En R1 se cumplen

    inversionista corredor

    corredor oficina

    En R2 se cumplen

    accion dividendo

    (inversionista,accion) cantidad

    luego la descomposicion conserva las dependencias funcionales.

    R1 esta en 2FN, pero no esta en 3FN debido a corredor oficina, y la llave es inversionista.

    R2 no esta en 2FN debido a accion dividendo, y la llave es (inversionista,accion).

    Podemos descomponer R1 en:

    R5 = (inversionista,corredor)

    R6 = (corredor,oficina)

    Las dependencias funcionales se conservan:

    inversionista corredor

    corredor oficina

    y no hay perdida de informacion

    R5R6 = {corredor}

    R5 R6 = {oficina}

  • CHAPTER 5. NORMALIZACION 43

    y corredor oficina.

    Podemos descomponer R2 en:

    R3 = (inversionista,accion,cantidad)

    R4 = (accion,dividendo)

    Las dependencias funcionales se conservan:

    (inversionista,accion) cantidad

    accion dividendo

    y no existe perdida de informacion:

    R3R4 = {accion}

    R3 R4 = {dividendo}

    y accion dividendo. R3 esta en FNBC y R4 tambien.

    5.14 Problema 2

    R = (curso,alumno,nota,hora,dia,sala)

    Dependencias funcionales

    (curso,alumno) nota)

    (curso,hora,dia) sala)

    (hora,dia,sala) curso)

    (hora,dia,alumno) sala)

    (hora,dia,alumno) curso)

    la llave es (alumno,hora,dia). Llave candidata (curso,alumno,nota,hora,dia,sala).

  • CHAPTER 5. NORMALIZACION 44

    Dependencias multivaluadas

    curso (alumno,nota) | (hora,dia,sala)

    Descomponemos en:

    R1 = (curso,alumno,nota), llave (curso,alumno)

    R2 = (curso,hora,dia,sala), llave (curso,hora,dia)

    R1 esta en FNBC, R2 esta en 2FN y en 3FN, pero no esta en FNBC debido a

    (hora,dia,sala) curso

    No es posible alcanzar FNBC.

    5.15 Problema 3

    Dada una tabla

    U(A,B,C,D,E, F,G,H)

    con las dependencias

    1. A B C

    2. D E F

    3. F G

    4. D H

    Descompongala en un conjunto de tablas en 4FN.

    Las dependencias (3) y (4) llevan a la descomposicion,

    U1(F,G)

  • CHAPTER 5. NORMALIZACION 45

    U2(F,H)

    U3(A,B,C,D,E, F )

    La dependencia (1) permite descomponer U3 en

    U4(A,B,C)

    U5(A,D,E,F )

    La dependencia (2) permite descomponer U5 en

    U6(D,E,F )

    U7(A,D)

    El resultado es U1, U2, U4, U6, y U7.

  • Chapter 6

    Fallas, concurrencia y seguridad

    6.1 Recuperacion del sistema despues de una Falla

    Todo sistema computacional puede Fallar. El esquema de recuperacion, que es parte del DBMS, seencarga de detectar las fallas y restaurar el contenido de la base de datos, a un estado consistente queexista antes de ocurrir la falla. Las Fallas mas graves son las que ocasionan perdidas de informacion.

    6.1.1 Tipos de memoria

    Memoria Volatil: Memoria principal, su contenido se pierde al ocurrir una Falla.

    Memoria No-Volatil: Disco o cinta. Es raro que su contenido se pierda pero no imposible.

    Memoria Estable: Termino teorico que denota una memoria cuyo contenido no se pierdenunca. Una aproximacion a esto son los respaldos en memoria no-volatil.

    6.1.2 Tipos de fallas

    Errores de Logica: El programa no puede seguir ejecutandose debido a un problema interno,como un error I/O, un overflow, etc.

    Errores del Sistema: Por algun motivo el sistema operativo decide abortar un programa (porejemplo deadlock).

    Cadas del Sistema: Un error de software o hardware que ocasiona perdida de informacion enmemoria volatil.

    Fallas del Disco: Error en el hardware del disco que ocasiona la perdida parcial o total de sucontenido.

    Consideremos el siguiente programa P :

    46

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 47

    P : read(A,a)

    a = a - 50

    write(A,a)

    read(B,b)

    b = b + 50

    write(B,b)

    A,B: identificadores de registros de la B.D.

    a,b: variables del programa.

    Supongamos que inicialmente a = 1000 y b = 2000, entonces despues de la ejecucion de P se obtienea = 950 y b = 2050. Si ocurre una falla despues de ejecutar write(A,a), pero antes de ejecutarwrite(B,b), obtenemos a = 950 y b = 2000, lo que impide dejar la base de datos en un estadoconsistente. Re-ejecutar P no es una solucion adecuada porque obtendramos a = 900 y b = 2050.Necesitamos que P sea considerado como una operacion atomica y un mecanismo que nos asegureque P se ejecute completamente o no se ejecute completamente.

    6.1.3 Transacciones

    Es una unidad de programa cuya ejecucion conserva la consistencia de la base de datos. Si antesde la ejecucion, la base de datos estaba en un estado consistente, entonces despues de la ejecucionde la transaccion la base de datos continua en un estado consistente.

    El DBMS debe asegurar que las transacciones sean atomicas. Si ocurre una falla durante laejecucion de una transaccion, al volver el sistema, el DBMS debe deshacer todos los cambios quela transaccion haya realizado en la base de datos. A esto se le llama ROLLBACK. Si la transaccionalcanza a ejecutarse completamente se dice que esta COMMITED (COMMIT=cometer, perpetrar).

    Se definen los siguientes estados para una transaccion (figura 6.1):

    ACTIVA: Esta en ejecucion.

    PARCIALMENTE TERMINADA: Despues de ejecutarse la ultima instruccion de la transaccion.

    CAIDA: Cuando se descubre que no puede continuar su ejecucion normal.

    TERMINADA: La transaccion termina exitosamente. Si posteriormente ocurre una falla susefectos no se pierden.

    Para poder deshacer los cambios a la base de datos realizados por una transaccion que esabortada, los cambios (writes) se registran en un archivo llamado BITACORA (LOG). Existen dosestrategias para realizar esto:

    Postergar actualizaciones.

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 48

    Activa

    Terminada

    Caida

    Parcialmente

    Abortada

    terminada

    Figure 6.1: Estados de una transaccion.

    Ejecutar actualizaciones inmediatamente.

    Note que en el programa de aplicacion el usuario puede indicar el comienzo y termino de unatransaccion con:

    BEGIN TRANSACTION

    read(A,a)

    a = a - 50

    write(A,a)

    END TRANSACTION

    6.1.4 Postergar actualizaciones y mantener una bitacora

    Durante la ejecucion de la transaccion, los write son postergados hasta llegar al estado Parcial-mente Terminada. Las actualizaciones son registradas en un archivo llamado bitacora. Cuandola transaccion llega a estado Parcialmente Terminada se usa el contenido de la bitacora paraejecutar los writes reales en la base de datos. Si ocurre una falla en la mitad de la ejecucion deuna transaccion, simplemente se ignora el contenido de la bitacora.

    En la bitacora se graba la siguiente informacion:

    Justo antes de comenzar la ejecucion de una Transaccion T :

    T start

    Por cada write(X,x) que T ejecute:

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 49

    T, X, x

    Cuando T llega al estado Parcialmente Terminada:

    T commit

    Despues de T commit el DBMS intenta ejecutar los writes de la bitacora a partir de T start.Antes de hacer esto el DBMS se asegura que la bitacora esta realmente grabada en disco (bufferde memoria principal grabados a disco). Despues de ejecutar los writes, la transaccion pasa aestado Terminada.

    Supongamos que despues de una Falla, el contenido de la bitacora es:

    T start

    T, A, 950

    T, B, 2050

    En este caso el DBMS no ejecuta los writes en la base de datos. En cambio, s lo hara si el contenidode la bitacora es:

    T start

    T, A, 950

    T, B, 2050

    T commit

    Al volver el sistema el DBMS no sabe si realmente se ejecutaron los writes de la transaccion enla base de datos, y por lo tanto el DBMS hace:

    REDO (T)

    que ejecuta los writes correspondientes a T , basandose en el contenido de la bitacora.

    Supongamos que despues de una cada del sistema, el contenido de la bitacora es:

    T1 start

    T1, A, 950

    T1, B, 2050

    T1 commit

    T2 start

    T2, C, 600

    T2 commit

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 50

    Aunque se sabe que se realizaron los writes correspondientes a T1, el DBMS no sabe si los buffersde memoria principal alcanzaron a escribirse a disco antes de la cada del sistema, luego el DBMShace:

    REDO (T1)

    REDO (T2)

    En general, debe hacerse un REDO de todas las transacciones para las que existe un COM-MIT en la bitacora.

    6.1.5 Ejecutar actualizaciones inmediatamente y mantener la bitacora

    Esta tecnica consiste en ejecutar las instrucciones write inmediatamente y simultaneamente man-tener una bitacora de los write ejecutados. Si ocurre una falla en medio de una transaccion, elcontenido de la bitacora se usa para deshacer las actualizaciones que haya alcanzado a hacer latransaccion.

    En la bitacora se graba la siguiente informacion:

    Registros T start y T commit, donde T es una transaccion, con el mismo significadoque en el esquema anterior.

    Antes de ejecutar cada instruccion write(X,x) se graba un registro

    T,X,,x

    Por ejemplo, si despues de una falla el contenido de la bitacora es:

    T start

    T, A, 1000, 950

    T, B, 2000, 2050

    se debe ejecutar:

    UNDO(T)

    que deshace las actualizaciones efectuadas por T .

    Si ocurre una falla durante el proceso de recuperacion, entonces simplemente, al valor el sistema,se debe ejecutar el proceso desde un comienzo.

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 51

    Note que tal como antes el asunto se complica debido a que ejecutar una instruccion write,no necesariamente significa escribir en el disco inmediatamente, sino que modificar un buffer enmemoria principal. La copia de este buffer desde memoria principal al disco puede ocurrir bastantedespues. La idea es que el contenido de la bitacora sirve para asegurar que lo que no aparece en ellano se ejecuto. Sin embargo, lo que s aparece en ella puede o no haber alcanzado a grabarse en disco.

    Tal como en el esquema anterior, se debe efectuar un

    REDO(T)

    para cada transaccion que aparezca con commit en la bitacora. La funcion REDO vuelve a efectuarlos writes correspondientes a la transaccion T .

    Cabe destacar que en este esquema, al igual que en el esquema anterior en que se postergan lasactualizaciones, se debe grabar en memoria estable los buffers correspondientes a la bitacora antesde grabar en disco cualquier otro buffer que este en memoria principal.

    6.1.6 Checkpoints

    En principio, despues de una falla se debe examinar toda la bitacora para saber cuando hacer redoy undo de una transaccion. Esto tiene algunas desventajas:

    El proceso es costoso en tiempo y espacio.

    Muchas de las transacciones para las que se hace el redo, en realidad ya han grabado en discolas modificaciones.

    Para disminuir el costo de este proceso se introduce el concepto de checkpoint. Esto considera lossiguientes pasos:

    Escribir todos los registros de la bitacora que esten en memoria principal a memoria estable.

    Escribir en disco todos los buffers que hayan sido modificados.

    Escribir en la bitacora, en memoria estable, un registro

    De este modo, despues de una falla solo se debe analizar la bitacora desde el enadelante. En rigor desde la transaccion que se estaba ejecutando durante el proceso de checkpoint.

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 52

    6.1.7 Shadow Paging

    Esta es una tecnica alternativa a los esquemas basados en bitacoras. La base de datos se particionaen n bloques de tamano fijo, llamados paginas. Estas paginas no necesitan estar almacenadas enalgun orden particular en el disco. Para poder acceder a cada pagina se maneja una tabla depaginas, que contiene un elemento por cada pagina de la base de datos. Cada elemento de la tablacontiene la direccion de la pagina correspondiente en disco.

    Durante la ejecucion de una transaccion se mantienen dos tablas de paginas: La tabla de paginasactual y la tabla de paginas oscura (shadow page table). Al comenzar la ejecucion de la transaccionlas dos tablas son identicas. La tabla de paginas oscura no cambia durante la ejecucion de latransaccion, en cambio la tabla de paginas actual vara de acuerdo a las actualizaciones efectuadaspor la transaccion, tal como se explica a continuacion.

    Supongamos que la transaccion efectua un write(X,x), y que el tem X esta en la pagina i,entonces se deben efectuar los siguientes pasos:

    Si la pagina no esta en memoria principal, traerla (se encuentra usando la tabla de paginasactual).

    Si este es el primer write efectuado en esa pagina por esta transaccion:

    Encontrar y sacar una pagina de la lista de paginas libres (que suponemos que el sistemamaneja).

    Hacer que el i-esimo elemento de la tabla de paginas actual apunte a la pagina encontradaen el paso anterior (de este modo cuando se grabe el buffer desde memoria principal adisco no se destruye la version anterior de la pagina).

    Asignar x a X en el buffer.

    La tabla de paginas actual se mantiene en memoria principal mientras que la tabla de paginasoscura se mantiene en disco. Si ocurre una falla antes de que la transaccion termine, simplementese ignora la tabla de paginas actual (muchas veces se pierde). La nueva tabla de paginas actual seobtiene copiando la tabla oscura.

    Cuando la transaccion llega al estado parcialmente terminada se debe:

    Copiar a disco todas las paginas en memoria principal que hayan sido modificadas por latransaccion (esto no altera las paginas apuntadas por la tabla oscura).

    Copiar la tabla de paginas actual a disco.

    El resultado de la copia anterior pasa a ser la nueva tabla de paginas oscura y la transaccionpasa a estado terminada.

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 53

    Este esquema presenta varias ventajas con respecto a los anteriores:

    No existe costo extra de grabar registros en la bitacora.

    La recuperacion despues de una falla es mucho mas rapida, solo se requiere copiar la tabla depaginas oscura (no hay que recorrer la bitacora ni efectuar redo o undo).

    Sin embargo, presenta las siguientes desventajas:

    Las paginas de la base de datos pueden quedar muy repartidas en el disco. Mientras masjuntas es mejor para la velocidad de lectura desde el disco.

    Se genera basura. Cada vez que una transaccion termina y se olvida la tabla de paginasoscura, se obtienen paginas inaccesibles (las versiones antiguas de las paginas modificadaspor la transaccion). Periodicamente se debe efectuar un proceso de recoleccion de basura(garbage collection) para incorporar estas paginas a la lista de paginas libres.

    Es difcil adaptar este esquema para permitir procesos concurrentes.

    6.1.8 Fallas con perdida de memoria no volatil

    La solucion es efectuar backups periodicos de la base de datos a memoria estable (por ejemplo, masde una copia en cinta). Si ocurre una falla que implique la perdida de la informacion en disco, seusa el backup mas reciente para recuperar la base de datos. A continuacion se usa la bitacora paraobtener una version mas actual de la base de datos. En este caso se debe hacer un redo de todaslas transacciones que aparezcan con commit desde el ultimo backup indicado en la bitacora.

    Note que la bitacora debe estar en memoria estable para que en caso de perderse la informacionen disco no se pierda la bitacora tambien.

    Para hacer un backup se deben efectuar los siguientes pasos:

    Grabar en memoria estable todos los registros de la bitacora que esten en memoria principal.

    Copiar a disco todos los buffers.

    Grabar un registro en la bitacora en memoria estable.

    Efectuar el backup propiamente tal.

    No puede haber transacciones ejecutandose durante este proceso.

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 54

    6.2 Concurrencia en la base de datos

    Se desea permitir que varias transacciones puedan estar operando simultaneamente sobre la basede datos. El DBMS debe coordinar las transacciones concurrentes para que no se pierda la consis-tencia de la base de datos.

    Consideremos las transacciones siguientes:

    T0: read(A,a) T1: read(A,a)

    a = a - 50 temp = A*0.1

    write(A,a) a = a - temp

    read(B,b) write(A,a)

    b = b + 50 read(B,b)

    write(B,b) b = b + temp

    write(B,b)

    Supongamos que T0 y T1 se ejecutan concurrentemente:

    T0 T1 A B

    read(A,a) 1000 2000

    a = a - 50

    read(A,a)

    temp = a*0.1

    a = a - temp

    write(A,a) 900

    read(B,b)

    write(A,a) 950

    read(B,b)

    b = b - 50

    write(B,b) 2050

    b = b + temp

    write(B,b) 950 2100

    La ejecucion secuencial de T0 y T1 es:

    T0 => (A,a) = 950

    (B,b) = 2050 A + B = 3000

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 55

    T1 => (A,a) = 855

    (B,b) = 2145 A + B = 3000

    Si se tratara de un banco, la cantidad total de dinero (A+B) debera mantenerse constante, despuesde hacer traspasos de dineros entre las cuentas A y B. Pero en el ejemplo de ejecucion concurrentede T0 y T1 el resultado final es A + B = 3050. Es decir, la ejecucion concurrente de T0 y T1 hadejado en un estado inconsistente a la base de datos.

    Consideremos que la ejecucion concurrente de varias transacciones es correcta, que su efecto esel mismo que se obtiene al ejecutar las mismas transacciones secuencialmente en algun orden posible.

    Definimos esquema de un conjunto de transacciones como el orden en que se ejecutan las in-strucciones de dichas transacciones.

    Un esquema es serial si las instrucciones de cada transaccion aparecen en forma consecutiva.

    Un esquema es serializable si su efecto es el mismo que un esquema serial.

    Por ejemplo:

    T0 T1

    read(A,a)

    a = a - 50

    write(A,a)

    read(A,a)

    temp = a*0.1

    a = a - temp

    write(A,a)

    read(B,b)

    b = b + 50

    write(B,b)

    read(B,b)

    b = b + temp

    write(B,b)

    Decidir si un esquema es serializable es muy difcil y costoso. Lo que se hace es establecer criteriosmas estrictos que la simple comparacion de los efectos finales de los esquemas. Veremos dos criterios:

    1. read antes de write.

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 56

    2. writes sin restricciones.

    6.2.1 Reads antes de writes

    Supongamos un modelo en el cual una transaccion tiene que leer un tem antes de escribir en el.Es decir, el valor que escribe depende del valor anterior del tem.

    Para saber si un esquema es serializable se debe construir un grafo de precedencia del esquema.

    El Grafo de precedencia es un grafo dirigido en que cada nodo corresponde a una transaccion ylos arcos se crean de acuerdo a las siguientes reglas:

    Si Tj lee el valor de un tem A, que fue escrito por Ti, entonces se crea un arco Ti Tj .

    Si Ti lee el valor de un tem A y a continuacion Tj lo modifica entonces existe un arco Ti Tj .

    Un arco Ti Tj en el grafo indica que en un esquema serial equivalente al analizado, Tidebera ejecutarse antes que Tj . Por ejemplo:

    T1 T2 T3 T4

    read(A,a)

    write(A,a)

    read(B,b)

    read(B,b)

    write(B,b)

    read(A,a)

    read(A,a)

    read(B,b)

    write(B,b)

    read(A,a)

    write(A,a)

    read(B,b)

    Si el grafo de precedencia no tiene ciclos, entonces el esquema es serializable. Luego el esquema delejemplo no es serializable ya que tiene un ciclo. Ver figura 6.2.

    A partir de un grafo sin ciclos se puede indicar el orden en que las transacciones se ejecutaranen el esquema serial (podra haber mas de uno). El proceso de ver si un esquema es serial tomatiempo O(N2), lo cual es razonable (N es el numero de transacciones).

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 57

    T1 T2

    T3T4

    Figure 6.2: Esquema no serializable.

    6.2.2 Writes sin restricciones

    Una transaccion puede escribir en un tem, sin necesidad de haberlo hecho antes. En este modelosabemos que si una transaccion Tj lee el valor de un item A que fue escrito por Ti, entonces:

    En un esquema serial equivalente, Ti debe preceder a Tj.

    Si otra transaccion Tk escribe en A, entonces Tk debe aparecer antes de Ti o despues de Tj ,pero no entre ambos.

    Por ejemplo:

    T1 T2 T3 T4

    write(A,a)

    read(A,a)

    write(A,a)

    write(A,a)

    El write de T3 se llama write inutil ya que ninguna otra transaccion lee el valor escrito. En unesquema serial equivalente, T3 podra ejecutarse antes de T1 o despues de T2.

    Para saber si un esquema es serializable, necesitamos construir un grafo de precedencia exten-dido. El algoritmo es:

    1. Aumentar el esquema agregando una transaccion T0, que al comienzo escribe cada tem y unatransaccion Tf que al final los lee.

    2. El grafo tendra un nodo por cada transaccion. Crear un arco Ti Tj, si Tj lee el valor deun tem que haya sido escrito por Ti.

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 58

    3. Descubrir las transacciones inutiles, es decir, aquellas desde las cuales no se puede llegar aTf . Eliminar todos los arcos que llegan a estas transacciones (transaccion inutil = aquellaque realiza writes inutiles).

    4. Para cada tem A que determina un arco Ti Tj considerar cada transaccion Tk 6= T0 queescribe en A:

    (a) Si Ti = T0 crear arco Tj Tk.

    (b) Si Tj = Tf crear arco Tk Ti.

    (c) Si Ti 6= T0 y Tj 6= Tf crear el par de arcos Tk Ti y Tj Tk.

    5. Determinar si el grafo extendido es acclico.

    Se debe probar con los grafos que se obtienen al escoger un arco de cada par creado en 4 (c). Siexiste alguno de estos grafos que no tenga ciclos entonces el esquema es serializable.

    Por ejemplo:

    T1 T2 T3 T4

    write(C,c)

    write(B,b)

    read(A,a)

    read(A,a)

    read(B,b)

    read(C,c)

    write(A,a)

    read(B,b)

    write(B,b)

    write(D,d)

    read(C,c)

    write(A,a)

    Los pasos 1-2-3 se muestran en la figura 6.3, el paso 4 se muestra en la figura 6.4, y el paso5 en la figura 6.5. El grafo final no tiene ciclos, luego el esquema es serializable y el orden esT1, T2, T3, T4.

    6.2.3 Locks

    Consideramos dos tipos de Locks:

    LECTURA: Una transaccion que tiene un lock de lectura para un tem, puede leerlo perono modificarlo. Ninguna otra Transaccion puede modificar el valor del tem mientras latransaccion tenga lock de lectura.

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 59

    T0

    T1 T4

    T3

    TF

    T2

    A

    B, C

    C

    B, A

    CB

    A

    D

    Figure 6.3: Pasos 1-2-3.

    T0

    T1 T4

    T3

    TF

    T2

    A

    C

    B

    A

    D

    B, C

    CB, A

    10

    10

    0

    0

    0

    Arco pendiente,

    produce ciclosse elige el que no

    Figure 6.4: Paso 4.

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 60

    T4T1

    T2 T3

    Figure 6.5: Paso 5.

    ESCRITURA: Si una transaccion tiene un lock de escritura puede leer y escribir el tem.Ninguna otra transaccion puede tener un lock en el mismo tem, al mismo tiempo.

    Definamos las operaciones RLock(Q), WLock(Q) y ULock(Q). Ejemplo:

    T0: WLock(A) T1: RLock(B)

    read(A,a) read(B,b)

    a = a - 50 ULock(B)

    write(A,a) RLock(A)

    ULock(B) read(A,a)

    WLock(B) ULock(A)

    read(B,b) print(a+b)

    b = b + 50

    write(B,b)

    ULock(B)

    Un esquema de ejecucion concurrente podra ser:

    T0 T1

    WLock(A)

    ....

    ULock(A)

    RLock(B)

    ....

    ULock(B)

    RLock(A)

    ....

    ULock(A)

    print(a+b)

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 61

    WLock(B)

    ....

    ULock(B)

    Este esquema no es serializable (T0 T1, y T0 T1), es decir, esta ejecucion no deberapermitirse.

    6.2.4 Protocolo de dos fases

    Este protocolo consiste en que todas las operaciones de Lock, deben preceder a las operacionesUnLock.

    Podemos reescribir T0 como:

    T0: WLock(A) T1: RLock(B)

    read(A,a) read(B,b)

    a = a - 50 RLock(A)

    write(A,a) read(A,a)

    WLock(B) ULock(A)

    read(B,b) ULock(B)

    b = b + 50 print(a+b)

    write(B,b)

    ULock(A)

    ULock(B)

    El siguiente esquema es valido:

    T0 T1

    WLock(A)

    ....

    RLock(B)

    ....

    WLock(B) Deadlock!!

    RLock(A)

    El protocolo de dos fases, no evita los deadlocks.

    Una forma de evitar los deadlocks, es imponer un orden a los tems y exigir que las transaccioneshagan los Locks respetando ese orden. Por ejemplo, si se van a usar A y B, hacen siempre Lock(A)antes que Lock(B).

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 62

    6.2.5 Protocolo de timestamp

    El DBMS asigna a cada transaccion Ti un valor unico Ts(i) que permita establecer un orden en-tre las transacciones. El valor podra ser por ejemplo, la hora en que comenzo a ejecutarse latransaccion.

    El sistema debe procurar que el esquema resultante sea equivalente a un esquema serial en quelas transacciones se ejecutan en el orden indicado por sus timestamps.

    A cada tem se asocian dos valores:

    WTS(Q) : Maximo de los timestamps de las transacciones que han hecho write(Q).

    RTS(Q) : Maximo de los timestamps de las transacciones que han hecho read(Q).

    El protocolo es:

    Si Ti intenta ejecutar read(Q)

    Si Ts(i) < WTS(Q) no se ejecuta la operacion y Ti se aborta.

    Si Ts(i) WTS(Q) se ejecuta la operacion y RTS(Q = max{RTS(Q), Ts(i)}).

    Si Ti intenta un write(Q)

    Si Ts(i) < RTS(Q) no se ejecuta la operacion y Ti se aborta.

    Si Ts(i) < WTS(Q) no se ejecuta la operacion y Ti continua.

    Si no, s se ejecuta la operacion y WTS(Q) = Ts(i).

    Al abandonar una transaccion se debe abortar (y hacer rollback) de todas las transacciones quedependen de ella, es decir, que hayan ledo valores escritos por la primera. Esto es recursivo yse llama efecto cascada. El efecto cascada se puede evitar obligando a que las transacciones solopuedan leer valores escritos por transacciones que hayan terminado, lo que introduce estados deespera.

    6.2.6 Protocolo de versiones multiples

    Se mantienen varias versiones para cada tem. A cada transaccion se asigna un timestamp igualque antes. Cada version de un tem contiene los siguientes campos:

    El valor del tem.

    WTS : El timestamp Ts de la transaccion que creo la version.

    RTS : Maximo de los Ts de las transacciones que hayan ledo la version.

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 63

    Supongamos que Ti quiere efectuar una operacion sobreQ. SeaQk la version deQ, tal queWTS(Qk)es el mayor de los WTS menores que Ts(i). El protocolo es:

    Si Ti intenta un read(Q), entonces se retorna el valor deQk yRTS(Qs) = max{RTS(Qk), Ts(i)}.

    Si Ti intenta un write(Q):

    Si Ts(i) < RTS(Qk), Ti se aborta.

    Si no, se crea una nueva version de Q con el valor escrito por Ti, con WTS y RTS igualesa Ts(i).

    6.3 Seguridad e integridad

    Se debe proteger la informacion de la base de datos contra:

    Perdidas accidentales de integridad.

    Accesos no autorizados.

    El termino de integridad se refiere a protegerse de los accidentes, y seguridad se refiere aprotegerse de los accesos mal intencionados.

    6.3.1 Restricciones de la integridad

    La idea es protegerse de transacciones que por errores en su logica no conserven la consistencia dela base de datos. Por ejemplo, una restriccion de integridad que es facil de detectar es la llave,el DBMS puede verificar que no existen llaves repetidas. Otro tipo de restriccion de integridad esimpedir la existencia de atributos con valores nulos.

    Un mecanismo que se utiliza a veces son los triggers. Un trigger es una subrutina que el DBMSactiva cuando ocurre algun evento preestablecido. Por ejemplo, si un banco quiere permitir quelos cuenta correntistas se sobregiren, se puede hacer un trigger que se active cuando el saldo de lacuenta sea negativo. El trigger debe hacer lo siguiente:

    Crear un prestamo para el cliente por el monto del sobregiro.

    Dejar saldo de cuenta corriente en cero.

    6.3.2 Accesos mal intencionados

    Casos que pueden ocurrir:

    Lectura no autorizada.

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 64

    Modificar informacion.

    Borrar informacion.

    Las medidas de seguridad pueden ser en varios niveles:

    FISICO: El lugar en que esta instalado el sistema no debe permitir el acceso.

    HUMANO: Se debe escoger bien a las personas que se les da acceso a la base de datos yestablecer responsabilidades.

    SISTEMA OPERATIVO: El control de acceso a la base de datos en buena medida descansaen el sistema operativo. Por ejemplo, uso de password y proteccion de directorios.

    DBMS: Debe procurar de que cada usuario solo pueda hacer lo que esta autorizado a realizar.

    6.3.3 Autorizaciones y vistas

    Las vistas permiten ocultar parte de la informacion de la base de datos. En las bases de datosrelacionales se proporcionan dos tipos de autorizaciones:

    Relacion: Se permite o niega el acceso a una tabla.

    Vista: Se permite o niega el acceso a una vista.

    Ademas, existen distintos tipos de accesos a las relaciones (tablas) y vistas:

    Lectura: Solo puede mirar informacion.

    Insercion: Puede agregar nuevas tuplas pero no puede modificar las existentes.

    Actualizacion: Puede modificar informacion pero no puede eliminar tuplas.

    Eliminacion: Puede borrar tuplas.

    Tambien se puede permitir que el usuario modifique el esquema de la base de datos.

    INDICES: Crear y destruir ndices.

    RESOURCES: Crear nuevas tablas.

    ALTER: Crear, modificar o eliminar atributos de tablas.

    DESTRUCCION: Eliminar tablas.

    En SQL existe el comando:

  • CHAPTER 6. FALLAS, CONCURRENCIA Y SEGURIDAD 65

    GRANT ON

    TO

    REVOKE ON

    FROM

    Si se usa GRANT para permitir actualizaciones, se puede permitir en todos los atributos de latabla o solo en algunos.

    GRANT UPDATE (Direccion) ON EMPLEADOS TO USER_X

    6.3.4 Encriptar

    CC432 DD543 reemplazar cada caracter por el siguiente.

    NUNCA se puede lograr la seguridad absoluta, pero s se puede lograr que el costo de accesono-autorizado sea tan alto que desaliente.