BASES DE DATOS
GUIA DE CURSO
Marta Sananes
Instituto de Estadistica Aplicada y Computacion
Facultad de Ciencias Economicas y Sociales
Universidad de Los Andes
Mérida, Julio 1994. Revisado: Agosto 1998
  

Bases de Datos: Perspectivas de estudio 
Evolución de la representación y tratamiento de Información: Tabla Resumen I, Tabla Resumen II, Tabla Resumen III
Procesos de Cálculo vs Procesamiento de Datos
Sistemas de Archivos vs Bases de Datos
Algoritmo Típico de actualización en el Procesamiento de Datos en Archivos secuenciales
Otras formas de documentación de procesos: Arbol de Decisión, Tabla de Decisión
Formas tradicionales de efectuar Procesamiento de Datos (Procesamiento secuencial vs Procesamiento directo)
Búsquedas con Procesamiento Directo: Búsqueda Directa vs Búsqueda Binaria
Organización de datos en Arbol Binario
Recorrido secuencial en Arbol Binario
Búsqueda en Arbol Binario Completo
Organización de Datos en Arbol B+
Estimación de Altura en Arbol B+
Modelación de Datos para Bases de Datos
Modelo Entidad-Asociación
Modelación estilo ORACLE
Modelación estilo UML (Unified Modeling Language)
Modelo Relacional de Datos
Consulta de Bases de Datos Relacionales: Algebra Relacional, Structured Query Language (SQL)
Arquitectura de Bases de Datos Relacionales(Resumido de Date: An Introduction to DB Systems)
Arquitectura de Aplicaciones (Sistemas de Información): niveles de independencia
Diagramas de Flujo de Datos
Modelos de Ciclos de Desarrollo de Sistemas de Información(Resumido de Maciaszeck: Data Base Design and Implementation)
Características de los DBMS (Data Base Managment Systems/SGBD: Sistemas de Gestión de Bases de Datos)(Resumido de Maciaszeck: Data Base Design and Implementation)
12 Reglas de Fidelidad de DBMS al Modelo Relacional (Resumido de Maciaszeck: Data Base Design and Implementation)
Normalización (Resumido de Date: An Introduction to DB Systems)
Programación INFORMIX 4GL (Resumido del manual INFORMIX-4GL TRAINING MANUAL)
Conceptos de INGRES (Resumido de Relational Technology Inc.: INGRES Self-Instruction Guide, Reference Manual)
Conceptos de DB2/6000
Conceptos de Sistemas de Información en ambientes Cliente/Servidor
Conceptos de dBASE
Conceptos de MS ACCESS
Conceptos de InterBase
Creación y Uso de Base de Datos Local Borland
Bases de Datos Estadísticas
Minería de Datos
Conceptos de OODBMS (Object Oriented Data Base Managment Systems)
RDBMS vs OODBMS: Ventajas y Desventajas
Multidatabase Systems (MDBS)
 


BIBLIOGRAFIA



 
 
 
 
 
 
 
 
 
 
 

NORMALIZACION
 

TIPOS DE DEPENDENCIAS ENTRE ATRIBUTOS

1. Funcionales       2. Multivaluadas       3. Conjunta ("join")

                           Descomposición: PROYECCION
PROCESO DE NORMALIZACION /
                         \ Reconstrucción: PRODUCTO NATURAL
                                           (EQUI_JOIN)

FORMAS NORMALES:  1NF << 2NF << 3NF << 4NF << 5NF

1NF: Relaciones "planas", sin grupos ni atributos repetitvos

     Ejemplo relación - 1NF:  tiene atributo  FECHA
                                             /  |  \
                                          DIA  MES  AÑO

                              tiene atributo MATERIAS[..]

     Conversion a 1NF:

 

2NF: Es 1NF y no presenta dependencias parciales: Todo atributo que no forme parte de la clave depende funcionalmente
     en forma completa de la clave

                     +-----------------+
                     +         |       |
     Ejemplo - 2NF:  S#  P#  STATUS  CITY  QUANTITY
                     +----+                   |
                       +----------------------+

     Conversion a 2NF: - Crear nuevas relaciones por proyección:

                     +-------------+
                     +     |       |
                    S#   STATUS  CITY         S#  P#  QUANTITY
                                              +----+     |
                                                +--------+

3NF: Es 2NF y no presenta dependencias transitivas

                        +----------------------+
                        +                      |
     Ejemplo - 3NF: CED_EMP -> DEPART -> LOCAL_DEPART

     Conversion a 3NF: - Crear nuevas relaciones por proyección

                    CED_EMP -> DEPART     DEPART -> LOCAL_DEPART



OTRAS FORMAS NORMALES

DEPENDENCIA FUNCIONAL: Sean {B}, {C} conjuntos de atributos de una relación Y.
{B} es f.d de {C} (funcionalmente dependiente, {C} -> {B}) sii para cada valor {VC} en cualquier extensión e instante de Y, corresponde exactamente un {VB}.
Es parcial, sii existe una clave candidata {K} / {K} ) {C} (es subconjunto propio) y -existe otra K' / {K'} ) {B}

BCNF (Boyce-Codd Normal Form)

     ¿ Si hay varias claves candidatas ?

     Una relación es BCNF sii cada determinante es una clave candidata.
     (Para toda d.f X -> A o bien es trivial (A e X) o bien X es clace candidata (X -> R))
                         +---------------------+
                      -------          -----   |
     Ejemplo - BCNF:  CED_EST  CARNET  CURSO  NOTA
                               -------------   |
                                     +---------+

    Conversion a BCNF: - Crear nuevas relaciones por proyección

                      CARNET  CURSO  NOTA
                      -------------   |
                            +---------+

                      CARNET -> CED_EST

DEPENDENCIA MULTIVALUADA: Sean {B}, {C}, {D} conjuntos de atributos de una relación Y.
                          {B} es multivaluadamante dependiente de {C} en forma no dependiente de {D} ({C} -> {B} | {D}) sii
                          siempre que en Y existan las tuplas <VC,VB,VD> y <VC,V'B,V'D>, tambien existan <VC,VB,V'D> y
                          <VC,V'B,VD>

4NF: Y es 4NF sii existiendo una MVD A->B, todos los atributos de R son también f.d de A. Es decir, en R solo hay f.d's.

5NF: Y es 5NF (PJ/NF: Projection Join Normal Form) sii cada dependencia conjunta (JD) de Y es implicada por las llaves
     candidatas de Y.
 



PROGRAMACION INFORMIX-4GL

EJEMPLO 1 de programación:



PROGRAMACION INFORMIX-4GL
 

- Acceso a una fila segun condición:
  Sintaxis SELECT:

           SELECT  clausula
                   [INTO      clausula]
                   [FROM      clausula]
                   [WHERE     clausula]
                   [GROUP BY  clausula]
                   [HAVING    clausula]
                   [ORDER BY  clausula]
                   [INTO TEMP clausula]
 

- EJEMPLO 2 de programación:
 

 



PROGRAMACION INFORMIX-4GL
 

- Acceso a un conjunto de filas segun condicion:
  Sintaxis:

- EJEMPLO 3 de programación:
   



 PROGRAMACION INFORMIX-4GL
 

- Alternativa en uso del FETCH: FOREACH
  Sintaxis:

- EJEMPLO 4 de programación:
   

- SCROLLing CURSORS (cursores direccionables)
  Sintaxis:

- EJEMPLO 5 de programación (se crea tabla temporal)
   



 PROGRAMACION INFORMIX-4GL

- Resolucion de consultas no previstas
  (en estilo QBE: Query By Example)

  1. Construir condicion de busqueda:
     Sintaxis:
               CONSTRUCT variable ON column_list
                                  FROM  form_field_list
  2. Crear setencia sql:
     Sintaxis:
               LET sql_statement_var="SELECT * FROM customer"
                   "WHERE " where_clause CLIPPED
                            |
                            variable del CONSTRUCT

  3. Preparar sentencia para ejecucion (compilacion dinamica):
     Sintaxis:
              PREPARE exex_statement FROM sql_statement_var

  4. Declarar cursor si la ejecucion de la sentencia puede retornar mas de una fila

  5. Ejecutar instruccion
 

- EJEMPLO 6 de programación:

 



CONCEPTOS DE INGRES

- Algunos comandos importantes:

  createdb <nombre_database>
  create   <nombre_tabla> ( <nombre_atributo> = <tipo> ,...)
           [ with logging ]

    Ejemplo: create employee (name=c12, age=i2, salary=f8,
                              dname=c10, manager=c12)

    Formato de <tipo>: <cod><longitud>
    <cod>: c -> caracteres; i -> entero (integer); f -> flotante

  append to <nombre_tabla> (<nombre_atributo> = <valor> ,...)

  Def: Variable de Rango: Se usan como alias al nombre de tabla.

       El nombre de la tabla es por defecto una variable rango.

  range of <nombre_var> is <nombre_tabla>

  retrieve (<nombre_var.nombre_atributo>|<expresion_valor> ,...)
          [ sort by <nombre_atributo>: descending|ascending ,...]
          [ where expresion_condicional ]

    Ejemplo: range of e is employee
             retrieve (e.age) where e.name="mike"
             retrieve (day_sal=12*e.salary/250)
                      where ename="mike"
             retrieve (e.name) where not (e.age>40 or e.age<20)
 

- Ejemplos de uso de funciones acumulativas:
    Ejercicio (a) de Korth:
   range of t is trabaja
   range of s is trabaja
   retrieve (t.nombre_persona)
             where t.salario > avg(s.salario by nombre_campania
                   where t.nombre_compania=s.nombre_compania)



CONCEPTOS DE INGRES

NOTA: Los tipos de comandos que siguen solo pueden ser dados por el propietario de la bd o por el administrador INGRES

- Ejemplos de Restricciones de Integridad

  define integrity on e is e.age>=16 and e.age<=68

  help integrity employee  {muestra las restricciones numeradas}

  destroy integrity employee <numero> | all

- Ejemplos de Autorizaciones de uso de tablas

  define permit replace on e (salary) to <usuario>
         from 12:00 to 18:00 on fri to fri
         where e.salary<=1.1*avg(e.salary by e.dname) and
               e.salary>=0.9*avg(e.salary by e.dname)

  help permit employee

  destroy permit employee 2, 3

- Ejemplos de Vistas

  range of d is departament
  define view locator (e.name, e.dname, d.floor)
              where e.dname = d.dname)

  range of x is locator
  retrieve (x.all) where x.name = "edna"

- Estructuras de almacenamiento:

  Cada tabla se almacena bajo una de los siguientes tipos de estructuras de almacenamiento:

  Estructura basica: heap
                     - organización secuencial según ingreso
                     - sin ningún orden particular
                     - no tiene control de duplicados
  Estructura ordenada: heapsort
                     - orden ascendente o descendente según se indique
                     - execepto por la ordenación, es igual al heap
  Estructura adaptadas a búsquedas rápidas:
                       isam (organización para búsqueda secuencial con índices)
                       hash (organización para búsqueda por exacta coincidencia)
                       - la dirección de almacenamiento de c/tupla depende de una clave (una o mas columnas)
 
Ejemplos de especificación de organización (por defecto heap)

 modify employee to hash on name
 modify employee to isam [unique] on salary

- Estructuras comprimidas: Los mismos tipos anteriores pero se aplica compresion de datos. Se indican con los mismos
                           identificadores precedidos por una 'c'.

- Indices secundarios:

  Ejemplo: index on employee is empindex (salary)

           -> Se crea una tabla de nombre 'empindex'  con los atributos: salary y tidp (tuple identifier pointer)
 
  La estructura por defecto de los indices secundarios es isam. Se le puede cambiar como a cualquier otra tabla.

  Ejemplo: modify employee to isam on salary
           index on employee is nameindex(name)
           modify nameindex to hash on name   -> index ramdom

- Mantenimiento:
  - Fecha de expiración para cada tabla (por defecto siete dias después de creada)
  - Extendiendo fecha de expiración:
    save employee until 7 10 1995 | jul 10 1995
  - "Purgando" tablas:
    range of d is departament
    delete d  -> deja solo la estructura
  - Resplados (backup's)
    set defaults [dir_backup]
    copydb *<usuario>*  ->crea archivos de comandos para copiar y
                          recuperar de nombres copy.out y copy.in
    ingres *<usuario>* < copy.out -> invocacion de ingres con entrada de comandos desde archivo 'copy.out'

    Para recuperar:
    ingres *<usuario>* < copy.in  -> invocacion de ingres con entrada de comandos desde archivo 'copy.in'

- Comandos a nivel del Sistema Operativo:
 
  Auditdb ->Permite imprimir partes seleccionadas del 'journal' de una db
  Catalogdb ->Lista db's propiedad del usuario
  Ckpdb ->Crea 'checkpoint', invalida journals anteriores
  Copydb ->Crea archivos de comandos para copiar/recuperar db
  Createdb
  Destroydb
  Helpr ->Informacion sobre db's
  Ingres ->Invocacion del INGRES
  Journal ->No es un comando; se establece la accion con especificaciones en otros comandos
  Optimizaddb ->Genera estadisticas para uso del optimizador de consultas
  Printr -> Imprime tablas
  Purgedb ->Destruye todas las tablas expiradas y temporales
  Recoverdb ->Recupera una db desde el ultimo checkpoint y el 'journal' actual
  Restoredb ->Recupera INGRES despues de una caida del S.O.
  Statdump ->Imprime las estadisticas utilizadas por el optimizador
  Sysmod ->Modifica las tablas del sistema para que darles la estructura mas conveniente
  Unloaddb ->Crea archivos de comandos para desmontar/montar una db
 
  - Comandos asociados al journal:

    set logging
    set logging in <tabla> -> a partir del proximo checkpoint

Este sistema de seguridad permite recuperación después de accidente o hasta un estado anterior al de la comisión de algún error lógico grave