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
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
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.
EJEMPLO 1 de programación:
DEFINE answer CHAR(1)
OPTIONS
PROMPT LINE 22
MESSAGE LINE LAST
HELP KEY CONTROL-I
HELP FILE "menuhelp.ex"
MESSAGE "Type the first letter of the option you want "
"or CTRL-I for instructions"
MENU "TOP LEVEL"
COMMAND "Customer"
"Go to the customer menu"
HELP 1
CALL cust_menu()
COMMAND "Orders"
"Add a new order"
PROMT "Do you want to place an order "
"for a customer ? (y/n)"
FOR CHAR answer
IF answer='n' then CONTINUE MENU
END IF
CALL dummy()
..............
COMMAND KEY(!) CALL bang()
NEW OPTION "customer"
END MENU
END MAIN
FUNCTION
dummy()
ERROR "function not yet implemented"
SLEEP 3
CLEAR SCREEN
END
FUNCTION
............
- 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:
GLOBALS
DEFINE p_customer RECORD LIKE
customer.*
END GLOBALS
MAIN
DEFINE p_count INTEGER
OPEN FORM f_cust FROM "custform"
DISPLAY FORM f_cust
PROMPT "Enter customer number:"
FOR p_customer.cnum
SELECT * INTO p_customer FROM
customer
WHERE cnum = p_customer.cnum
DISPLAY BY NAME p_customer
SELECT count(*) INTO p_count
FROM customer
WHERE orders.cnum = p_customer.cnum
DISPLAY "Number of orders:",
p_count AT 16,1
END MAIN
- Acceso a un conjunto de filas segun condicion:
Sintaxis:
OPEN cursor --> +---------+
|---------|
|---------|
+---------+
FETCH cursor +---------+
--> |---------|
. |---------|
--> +---------+
--> NOT FOUND
DECLARE cursor_name CURSOR FOR sql_statement
OPEN cursor_name [USING variable_list]
FETCH cursor_name [INTO variable_list]
CLOSE cursor_name
GLOBALS
DEFINE p_customer RECORD LIKE
customer.*
END GLOBLAS
MAIN
DEFINE answer CHAR(1)
OPEN FORM f_cust FROM "custform"
DISPLAY FORM f_cust
DECLARE pointer1 CURSOR FOR
SELECT * FROM customer ORDER BY lname
OPEN pointer1
WHILE TRUE
FETCH pointer1 INTO p_customer.*
IF STATUS = NOT FOUND
THEN EXIT WHILE
END IF
DISPLAY BY NAME p_customer.*
PROMPT "Type carriage RETURN to continue"
FOR CHAR answer
END WHILE
CLOSE pointer1
CLEAR SCREEN
END MAIN
- Alternativa en uso del FETCH: FOREACH
Sintaxis:
FOREACH pointer1
INTO p_customer.*
DISPLAY BY NAME p_customer.*
PROMPT "Type carriage RETURN to continue"
FOR CHAR answer
END FOREACH
CLEAR SCREEN
END MAIN
- SCROLLing CURSORS (cursores direccionables)
Sintaxis:
FUNCTION first_cust()
FETCH FIRST pointer1
INTO p_customer.*
CALL DISPLAY_CUST()
END FUNCTION
- 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:
CONSTRUCT BY NAME where_clause ON customer
LET sql_statement="SELECT
* FROM customer"
"WHERE " where_clause CLIPPED
DISPLAY where_clause
AT 18,1
DISPLAY sql_statement
AT 19,1
PREPARE exec_statement
FROM sql_statement
DECLARE pointer1 CURSOR
FOR exex_statement
................
OPEN pointer1
FOREACH pointer1 INTO
p_customer.*
................
DISPLAY BY NAME p_customer.*
END FOREACH
................
END FUNCTION
- 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)
retrieve (e.dname,
nestcomp=avg(e.salary by e.dname where e.salary >
avg(e.salary where e.dname="toy")))
range of t is employee
retrieve (e.name, e.salary) where
e.salary > t.salary and
t.name = "ted"
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