You are on page 1of 13

BASES DE DATOS GUIA DE CURSO

Marta Sananes Instituto de Estadistica Aplicada y Computacion Facultad de Ciencias Economicas y Sociales Universidad de Los Andes Mrida, Julio 1994. Revisado: Agosto 1998

Bases de Datos: Perspectivas de estudio Evolucin de la representacin y tratamiento de Informacin: Tabla Resumen I, Tabla Resumen II, Tabla Resumen III Procesos de Clculo vs Procesamiento de Datos Sistemas de Archivos vs Bases de Datos Algoritmo Tpico de actualizacin en el Procesamiento de Datos en Archivos secuenciales Otras formas de documentacin de procesos: Arbol de Decisin, Tabla de Decisin Formas tradicionales de efectuar Procesamiento de Datos (Procesamiento secuencial vs Procesamiento directo) Bsquedas con Procesamiento Directo: Bsqueda Directa vs Bsqueda Binaria Organizacin de datos en Arbol Binario Recorrido secuencial en Arbol Binario Bsqueda en Arbol Binario Completo Organizacin de Datos en Arbol B+ Estimacin de Altura en Arbol B+ Modelacin de Datos para Bases de Datos Modelo Entidad-Asociacin Modelacin estilo ORACLE Modelacin 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 Informacin): niveles de independencia Diagramas de Flujo de Datos Modelos de Ciclos de Desarrollo de Sistemas de Informacin(Resumido de Maciaszeck: Data Base Design and Implementation) Caractersticas de los DBMS (Data Base Managment Systems/SGBD: Sistemas de Gestin 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)

Normalizacin (Resumido de Date: An Introduction to DB Systems) Programacin 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 Informacin en ambientes Cliente/Servidor Conceptos de dBASE Conceptos de MS ACCESS Conceptos de InterBase Creacin y Uso de Base de Datos Local Borland Bases de Datos Estadsticas Minera de Datos Conceptos de OODBMS (Object Oriented Data Base Managment Systems) RDBMS vs OODBMS: Ventajas y Desventajas Multidatabase Systems (MDBS)

BIBLIOGRAFIA
Barker, Richard. Case*METHOD, Entity Relationship Modelling. Addison-Wesley Publising Company y ORACLE. Batini, C., Ceri, S. y Navathe, S. Diseo conceptual de bases de datos. Addison-Wesly/Daz de Santos. 1994. Bertino, E. y Martino, L. Sistemas de Bases de Datos Orientados a Objetos. Conceptos y Arquitecturas. AddisonWesley/Daz de Santos. 1995. Burtch. J y Grudnitski, G. Diseo de Sistemas de Informacin. Megabyte Noriega Editores. 1996. Date, C.J. An Introduction to Data Base Systems. AddisonWesley Publishing Company. Fowler, M. UML Destilled, Applying the Standard Object Modeling Language. Addison-Wesley Publishing Company. 1997. Gonzlez Alvarado, C. Sistemas de Bases de Datos. Editorial Tecnolgica de Costa Rica. 1996. Kim, Won (Editor). Modern Database Systems. The Object Model, Interoperability and Beyond.ACM Press. 1995. Kim, Won y Lochovsky, Frederick (Editores). Object Oriented Concepts, Databases ans Applications. ACM Press. 1989. Korth, H.F y Silverschatz, A. Fundamentos de Bases de Datos. McGraw Hill. 1993. Maciaszek, L.A. Database Desing and Implementation. Prentice Hall-Advances in Computer Science Series. 1990. Martin, J.y Odell, J. Anlisis y Diseo Orientado a Objetos. Prentice Hall, 1994. Sully, Phil. Modelling the world with objects. Prentice Hall. 1993. Tsichritzis, D. y Lochovsky, F. Data Models. Prentice Hall. 1982.

NORMALIZACION
TIPOS DE DEPENDENCIAS ENTRE ATRIBUTOS 1. Funcionales 2. Multivaluadas 3. Conjunta ("join") Descomposicin: PROYECCION PROCESO DE NORMALIZACION / \ Reconstruccin: PRODUCTO NATURAL (EQUI_JOIN) FORMAS NORMALES: 1NF << 2NF << 3NF << 4NF << 5NF tiene atributo FECHA / | \ DIA MES AO 1NF: Relaciones "planas", sin grupos ni atributos repetitvos Ejemplo relacin - 1NF:

tiene atributo MATERIAS[..] Conversion a 1NF: Disgregar atributos agrupados Reducir atributo repetitivo a uno solo. Cada tupla de la relacin original se convierte en tantas tuplas como valores no nulos del atributo repetitivo. 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 +-----------------+ + | | S# P# STATUS CITY QUANTITY +----+ | +----------------------+ +-------------+

Ejemplo - 2NF:

Conversion a 2NF: - Crear nuevas relaciones por proyeccin:

+ 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 proyeccin CED_EMP -> DEPART DEPART -> LOCAL_DEPART

OTRAS FORMAS NORMALES


DEPENDENCIA FUNCIONAL: Sean {B}, {C} conjuntos de atributos de una relacin Y. {B} es f.d de {C} (funcionalmente dependiente, {C} -> {B}) sii para cada valor {VC} en cualquier extensin 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 relacin es BCNF sii cada determinante es una clave candidata. (Para toda d.f X -> A o bien es trivial (A X) o bien X es clace candidata (X -> R)) +---------------------+ ----------| Ejemplo - BCNF: CED_EST CARNET CURSO NOTA ------------| +---------+ Conversion a BCNF: - Crear nuevas relaciones por proyeccin CARNET CURSO NOTA ------------| +---------+ CARNET -> CED_EST DEPENDENCIA MULTIVALUADA: Sean {B}, {C}, {D} conjuntos de atributos de una relacin 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 tambin 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 programacin: MAIN 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 ............

PROGRAMACION INFORMIX-4GL
- Acceso a una fila segun condicin: Sintaxis SELECT: SELECT clausula [INTO [FROM [WHERE [GROUP BY [HAVING [ORDER BY [INTO TEMP clausula] clausula] clausula] clausula] clausula] clausula] clausula]

- EJEMPLO 2 de programacin: DATABASE stores 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

PROGRAMACION INFORMIX-4GL
- Acceso a un conjunto de filas segun condicion: Sintaxis: DECLARE cursor OPEN cursor --> --> +---------+

|---------| |---------| +---------+ FETCH cursor --> . --> --> DECLARE OPEN FETCH CLOSE - EJEMPLO 3 de programacin: DATABASE stores 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 +---------+ |---------| |---------| +---------+ NOT FOUND

cursor_name CURSOR FOR sql_statement cursor_name [USING variable_list] cursor_name [INTO variable_list] cursor_name

PROGRAMACION INFORMIX-4GL

- Alternativa en uso del FETCH: FOREACH Sintaxis: FOREACH cursor_name [INTO program_variable] DISPLAY program_variable TO screen_record END FOREACH - EJEMPLO 4 de programacin: ................. MAIN ................. DECLARE pointer1 CURSOR FOR SELECT * FROM customer ORDER BY lname 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: DECLARE cursor_name SCROLL CURSOR FOR sql_statement FETCH NEXT | PREVIOUS | PRIOR | FIRST | LAST | RELATIVE m | ABSOLUTE m cursor_name INTO variable_list - EJEMPLO 5 de programacin (se crea tabla temporal) FUNCTION find_init() DECLARE pointer1 SCROLL CURSOR FOR SELECT * FROM customer ORDER BY lname OPEN pointer1 END FUNCTION FUNCTION first_cust() FETCH FIRST pointer1 INTO p_customer.* CALL DISPLAY_CUST() END FUNCTION

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 programacin: FUNCTION find_cust() DEFINE where_clause CHAR(200) DEFINE sql_statement CHAR(250) 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

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) replace e(salary=1.1*e.salary) where e.name="mike" delete e where e.age>50 or e.salary>3000 - Ejemplos de uso de funciones acumulativas: retrieve (e.age, e.dname, total=sum(e.salary by e.age,e.dname) 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" 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 - organizacin secuencial segn ingreso - sin ningn orden particular - no tiene control de duplicados Estructura ordenada: heapsort - orden ascendente o descendente segn se indique - execepto por la ordenacin, es igual al heap Estructura adaptadas a bsquedas rpidas: isam (organizacin para bsqueda secuencial con ndices) hash (organizacin para bsqueda por exacta coincidencia) - la direccin de almacenamiento de c/tupla

depende de una clave (una o mas columnas) Ejemplos de especificacin de organizacin (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' atributos: salary y tidp (tuple identifier pointer) con los

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 expiracin para cada tabla (por defecto siete dias despus de creada) - Extendiendo fecha de expiracin: 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 recuperacin despus de accidente o hasta un estado anterior al de la comisin de algn error lgico grave

You might also like