Académique Documents
Professionnel Documents
Culture Documents
Objetivos del curso El estudiante aprender en este primer curso de Bases de datos, los conceptos tericos fundamentales: 1. Los conceptos matemticos relacionales 2. El lenguaje SQL para la descripcin, administracin y consulta de Bases de datos 3. Los conceptos de normalizacin de Bases de datos 4. El diseo de Bases de datos segn el modelado semntico 5. Los conceptos de integridad de las Bases de datos 6. La construccin de una base de datos especfica para una empresa de la regin
2
2.4 Organizacin directa 2.5 Organizacin secuencial indexada 3. Organizaciones de archivos para DBMS 3.1 Organizacin inversa 3.2 Organizacin multilista 3.3 Organizacin multianillo 4. Niveles de una Base de datos 4.1 Nivel interno 4.2 Nivel conceptual 4.3 Nivel externo 4.4 Mapeo de datos
5. Propiedades de una Base de datos 5.1 Independencia de datos 5.2 Seguridad 5.3 Integridad 5.4 Respaldo y recuperacin 5.5 Control de redundancia 5.6 Consistencia 5.7 Auditoria 5.8 Control de concurrencia 5.9 Rutas de acceso
6. Software complementario de un DBMS 6.1 Administrador de la Base de datos (DBA) 6.2 Diccionario de datos 6.3 Lenguajes de la Base de datos 6.3.1 DDL (Lenguaje de descripcin de datos) 6.3.2 DML (Lenguaje de manejo de datos) 7. Clases de DBMS 7.1 Enfoque jerrquico 7.2 Enfoque en red 7.3 Enfoque relacional
8. Modelo relacional 8.1 Nivel conceptual 8.2 Nivel externo o vistas 8.3 Nivel interno 8.4 El lenguaje de datos 9. Algebra relacional 9.1 Operaciones de conjunto 9.2 Operaciones unarias 9.3 Operaciones adicionales 10. Clculo relacional 10.1Variables de tuplas 10.2 Condiciones de comparacin
7
10.3 Condiciones de pertenencia 10.4 Condiciones compuestas 10.5 Cuantificador existencial 10.6 Cuantificador universal 10.7 Expresiones 10.8 Tipos de variables de tuplas 10.9 Ejemplos 11. Lenguajes para el manejo de datos: Oracle y SQL 11.1 Consultas simples 11.2 Consultas de reunin 11.3 Funciones integradas
11.4 Caractersticas avanzadas de SELECT 11.5 Proposiciones de actualizacin 11.6 SQL embebido 12. Diseo de Bases de datos: El modelo relacional y la normalizacin. 12.1 La relacin universal 12.2 Primera forma normal (1FN) 12.3 Dependencia funcional 12.3.1 Clave candidata 12.3.2 Clave principal 12.3.3 Clave fornea
9
12.3.4 Claves alternas 12.4 Normalizacin de la relacin 1FN 12.5 Segunda forma normal (2FN) 12.6 Normalizacin de las relaciones 2FN 12.7 Tercera forma normal (3FN) 12.8 Forma normal de Boyce & Codd (BCNF) 12.9 Cuarta forma normal (4FN) 13. El modelo semntico o modelo E/R 13.1 Las reglas lgicas o reglas del negocio 13.2 Entidades e interrelaciones 13.3 Grado de las interrelaciones 13.4 Correspondencia de las interrelaciones
10
13.5 Cardinalidad de las interrelaciones 13.6 Diagramas E/R 13.7 Conversin de un diagrama E/R a un diagrama referencial (tablas) 13.8 Valores de claves forneas segn cardinalidad 13.9 El modelo E/R extendido 13.1.8.1 La generalizacin 13.1.8.2 La agregacin 13.10 Verificacin del grado de normalidad 14. Integridad de una Base de datos 14.1 Restricciones de dominio 14.2 Integridad de las entidades 14.3 Integridad referencial
11
Textos:
Diapositivas del curso. C. J. Date; Introduccin a los sistemas de bases de datos, Prentice Hall, Sptima edicin, ISBN:968-444-419-2. Siberschatz; Fundamentos de bases de datos, McGraw Hill, Quinta edicin, ISBN: 84-481-4644-1. SQL, manual de referencia, Groff & Weinberg, McGraw Hill, ISBN 84-481-3930-5.
12
Bibliografa
James R. Groff & Paul N. Weinberg; SQL Manual de referencia, McGrawHill, ISBN: 0-07-222559-9 C. J. Date; Introduccin a los sistemas de Bases de datos, PrenticeHall, ISBN: 968-444-419-2, sptima edicin Abraham Silberschatz & Henry Korth; Fundamentos de Bases de datos, McGrawHill, ISBN: 0-07-295886-3, quinta edicin Ramakrishnan Raghu & Gehrke Johannes; Sistemas de gestin de Bases de datos, McGrawHill, ISBN: 978-84-481-5638-1, tercera edicin Ramez Elmasri & Shamkant B. Navathe; Fundamentos de sistemas de Bases de datos, Pearson Addison Wesley, ISBN: 978-84-7829-085-7, quinta edicin Gillenson Mark L.; Administracin de Bases de datos, Limusa Wiley, ISBN-13: 978-968-18-6595-2 Mario G. Piattini & otros; Tecnologa y diseo de Bases de datos; Alfaomega-Rama, ISBN: 978-970-15-1268-5 Prez Csar; Oracle PL/SQL, Alfaomega-Rama, ISBN: 978-970-151374-3 Rodriguez Almeida Miguel; Bases de datos, McGrawHill, ISBN: 847615-807-6
13
Funciones de un DBMS
a. b. c. d. e. f. g. h. Crear y organizar la Base de datos Establecer ndices y mantener rutas de acceso Agregar archivos nuevos a la Base de datos Insertar registros nuevos en archivos existentes Obtener datos de archivos existentes Actualizar datos en archivos existentes Borrar registros en archivos existentes Eliminar archivos de la Base de datos
15
3
16
17
DBMS
18
1.5 Apuntadores
Hay tres clases de apuntadores: 1. Direccin relativa. Es un entero entre 0 o 1 hasta el nmero mximo de registros de un archivo. Debe ser traducida en direccin absoluta. 2. Direccin fsica o absoluta. Es la posicin real de un registro dentro del disco, es decir, el nmero de bloque ocupado por el registro. No necesita ser traducida. 3. ndices: Es un campo propio al registro (clave principal) que lo identifica en forma nica y exclusiva. Deben ser traducidos en direccin absoluta.
19
21
Lote
Grabacin
Movimiento Transaccin Clasificacin Movimiento clasificado Actualizacin Errores Maestra actualizada Cinta maestra
Prevencin No No No
23
Un archivo con organizacin relativa se puede procesar en forma secuencial o en forma directa
24
Al procesar un archivo en forma directa surgen tres inconvenientes: 1. Cmo conocer previamente la direccin relativa? 2. Casi nunca el valor de una clave principal tendr relacin con su direccin relativa. 3. Habra que transformar el valor de la clave principal en su direccin relativa, y el de sta en su direccin absoluta.
25
Para convertir el valor de la clave principal en direccin relativa, los mtodos ms usados son: a) Direccionamiento directo b) Direccionamiento por tablas c) Direccionamiento por algoritmos (hashing)
26
a) Direccionamiento directo
D. relativa 1 2 3 4 5 Cdula (Clave principal) 1012 1013 1014 1015 1016
D. Relativa = clave principal clave ms pequea + 1 Problema: Casi nunca las claves principales son valores consecutivos
27
28
Clave principal = 1.897642.159 N de registros = 20.000 Factor (k) = 0.2 (k=20.000/99.999) Primo prximo al nmero de registros = 19.997 1.897642.159 19.997 = 94.896,340.2 = 18.979,2 Direccin relativa = 18979 Los sinnimos se guardan por separado en un rea de overflow
29
Los registros no se almacenan, ni por clave, ni por direccin relativa, sino por direcciones absolutas, o sea direcciones de bloque en el disco.
30
Archivo de datos
Apellido Serrano Peralta Gmez Durn Rico Flrez Peralta Prez Mantilla Duarte Nombre Rosa Carlos Andrs Carmen Omar Luis Javier Nubia Miguel Felipe Dpt A B A C A A B A B C Cat. 3 4 1 2 1 1 2 4 3 5
31
Archivo de datos
Apellido Serrano Peralta Gmez Durn Rico Flrez Peralta Prez Mantilla Duarte Mantilla Nombre Rosa Carlos Andrs Carmen Omar Luis Javier Nubia Miguel Felipe Diana Dpt A B A C A A B A B C D Cat. 3 4 1 2 1 1 2 4 3 5 1
14 15 16 17 18 19 20
Transaccin
Valida y actualiza
Archivo ISAM
Archivo de nombres
Nombre Departamento Categora Enlace 2 # Puntero 1 5
Archivo de valores
Valor A B C D 1 2 3 4 Enlace 2 3 4 5 6 7 8 # 2 3 1 5 5 1 2 3
Contina en la siguiente diapositiva
punteros 4 10 6 7 8 9
8 6 4 9 7 10
36
Archivo de datos
D. R. 1 2 3 4 5 6 7 8 9 10 Cdula 1190 1234 1893 2472 2500 3030 3500 4567 5000 6500 Apellido Manzur Serrano Peralta Serrano Mantilla Durn Correa Rico Mantilla Echeverry Nombre Helga Rosa Carlos Miguel Diana Carmen Daro Omar Felipe Esperanza Dpto. C A B A D C C A A B Cat. 2 3 4 3 1 2 3 1 2 3 Enlace 2 3 4 5 6 7 8 9 10 #
37
Archivo de nombres
Nombre Departamento Categora Enlace 2 # Puntero 1 5
Archivo de valores
Valor A B C D 1 2 3 4 Enlace 2 3 4 5 6 7 8 # 2 3 1 5 5 1 2 3 8 6 4 11 38 9 7 10 punteros 4 10 6 8 11 7 9
Archivo de datos
D. R. 1 2 3 4 5 6 7 8 9 10 11 Cdula 1190 1234 1893 2472 2500 3030 3500 4567 5000 6500 9876 Apellido Manzur Serrano Peralta Serrano Mantilla Durn Correa Rico Mantilla Echeverry Nstor Nombre Helga Rosa Carlos Miguel Diana Carmen Daro Omar Felipe Esperanza Surez Dpto. C A B A D C C A A B B Cat. 2 3 4 3 1 2 3 1 2 3 4 Enlace 2 3 4 5 6 7 8 9 10 11 #
Archivo de nombres
Nombre Departamento Categora Enlace 2 # Puntero 1 5
Archivo de valores
Valor A B C D 1 2 3 4 Enlace 2 3 4 5 6 7 8 # 2 3 1 5 5 1 2 3
Contina en la siguiente diapositiva
punteros 4 10 6 7 8 9
8 6 4 9 7 10
40
Archivo de datos
D. R. 1 2 3 4 5 6 7 8 9 10 Cdula 1190 1234 1893 2472 2500 FFFF 3500 4567 5000 6500 Apellido Manzur Serrano Peralta Serrano Mantilla Durn Correa Rico Mantilla Echeverry Nombre Helga Rosa Carlos Miguel Diana Carmen Daro Omar Felipe Esperanza Dpto. C A B A D C C A A B Cat. 2 3 4 3 1 2 3 1 2 3 Enlace 2 3 4 5 6 7 8 9 10 #
Archivo de nombres
Nombre Departamento Categora Enlace 2 # Puntero 1 5
Archivo de valores
Valor A B C D 1 2 3 4 Enlace 2 3 4 5 6 7 8 # 2 3 1 5 5 1 2 3
Contina en la siguiente diapositiva
punteros 4 10 6 8 7 7 9
8 6 4 9 7 10
42
Archivo de datos
D. R. 1 2 3 4 5 6 7 8 9 10 Cdula 1190 1234 1893 2472 2500 3030 3500 4567 5000 6500 Apellido Manzur Serrano Peralta Serrano Mantilla Durn Correa Rico Mantilla Echeverry Nombre Helga Rosa Carlos Miguel Diana Carmen Daro Omar Felipe Esperanza Dpto. C A B A D C B A A B Cat. 2 3 4 3 1 2 3 1 2 3 Enlace 2 3 4 5 6 7 8 9 10 #
D. R. 1 2 3 4 5 6 7 8 9 10
Valor A A B C D 1 2 3 3 4
Enla ce 2 3 4 5 6 7 8 9 10 # 2 9 3 1 5 5 1 2
Punteros 4 10 6 8 6 4 9 7 7 8
Bandera S N N N N N N S N N
10 3
Archivo de valores con registros de longitud fija para una organizacin inversa
44
Archivo de nombres
Nombre Departamento Categora Enlace 2 # Puntero 1 5
Archivo de valores
Valor A B C D 1 2 3 4 Enlace 2 3 4 5 6 7 8 # Punteros 2 3 1 5 5 1 2 3 Contador 4 2 3 1 2 3 4 1 45
Archivo de datos
D. R. 1 2 3 4 5 6 7 8 9 10 Cdula 1190 1234 1893 2472 2500 3030 3500 4567 5000 6500 Apellido Manzur Serrano Peralta Serrano Mantilla Durn Correa Rico Mantilla Echeverry Nombre Helga Rosa Carlos Miguel Diana Carmen Daro Omar Felipe Esperanza Dpto. C A B A D C C A A B Cat. 2 3 4 3 1 2 3 1 2 3 Enlace 2 3 4 5 6 7 8 9 10 # Enla ce D 6 4 10 8 # 7 # 9 # # Enla ce C 6 4 # 7 8 9 10 # # #
46
El archivo de datos en una organizacin multilista tiene un apuntador por cada clave secundaria, que apunta al siguiente registro que la cumple. El contador del archivo de valores en una organizacin multilista es usado por el DBMS para procesar consultas por claves mltiples con el operador AND, pues comenzando por el contador ms pequeo minimiza la bsqueda. Con el operador OR utiliza una tabla de referencia adicional en donde va guardando los registros que cumplen, en las diferentes sublistas, la condicin de las claves en forma simultnea.
Dir. Relat. del registro 8 Enlace de categora #
3.3 Organizacin multianillo Un anillo es una lista enlazada en donde el ltimo nodo se encadena con el primero
A B C D
Para bsquedas en ambas direcciones se necesita un apuntador adicional que contenga la direccin del nodo anterior. As el primer nodo se encadena con el ltimo
A B C D
48
1234
2472
4567
5000
1893
6500
1190
3030
3500
2500
Transaccin
Valida y actualiza
Base de datos
Prevencin Si Si Si
Esquema conceptual
Esquema interno
51
4.1 Nivel interno de una Base de datos Est constituido por el conjunto de bloques de disco, con sus diferentes registros y sus respectivas direcciones, apuntadores, contadores y datos. El nivel interno es el que toca al sistema operativo (el servidor del disco) y a la tarjeta controladora del disco, por lo cual es un esquema fsico binario, en la intimidad del hardware.
52
4.2 Nivel conceptual de una Base de datos Es el que corresponde a la percepcin de datos comn a todos los usuarios de una organizacin. Por lo tanto se ve como un conjunto universal de entidades vinculadas entre si, y cada una con sus propios atributos. La apariencia de este nivel salta a la vista aunque no tiene existencia fsica.
53
4.3 Nivel externo de una Base de datos Es el que corresponde a la percepcin de datos que individualmente o en grupo tienen los usuarios de una misma rea funcional de una empresa. Es una vista o subconjunto del conjunto universal, que describe nicamente la parte de los datos de inters para cada usuario y que tampoco tiene existencia fsica. Cada vista puede omitir uno o ms registros, atributos o relaciones del esquema conceptual, o tambin cambiar su orden. A diferencia de los otros esquemas, el esquema externo es mltiple.
54
4.4 Mapeo de datos La existencia de tres niveles impone al DBMS la necesidad de transformar los datos de un formato a otro. Existiendo tres niveles, existirn dos formatos de transformacin: Conceptual-interno y conceptualexterno. Tanto el formato conceptual-interno como el conceptual-externo opera en los dos sentidos: De lo conceptual a lo interno y viceversa, y de lo conceptual a lo externo y viceversa. El DBA debe indicar la correspondencia entre formatos mediante las reglas de correspondencia (mapping rules)
55
5.2 Seguridad. Los datos deben estar protegidos contra accesos no autorizados, y adems reservados en diferentes rangos de permisividad para accesos autorizados. 5.3 Integridad. Los datos, apuntadores, direcciones, enlaces, ndices y contadores, deben mantenerse siempre incorruptibles. La corrupcin puede aparecer por fallas del hardware, defectos del software, actualizaciones incompletas o invlidas, o la violacin a las reglas de integridad referencial.
57
5.4 Respaldo y recuperacin. Es la facilidad para obtener copias de la Base de datos (backups de respaldo) que permitan recuperar la Base de datos ante cualquier falla. 5.5 Control de redundancia. Es la propiedad por medio de la cual, la repeticin de datos es mnima y es controlable. El proceso de normalizacin busca precisamente reducir al mximo la redundancia de datos, aunque nunca al 100%
58
5.6 Consistencia. Es la propiedad que impide las contradicciones entre datos. Si la redundancia estuviera descontrolada, un mismo dato repetido en lugares diferentes podra tener valores diferentes, y por tanto inconsistentes. 5.7 Auditora. Es el examen de la Base de datos y su entorno, a fin de comprobar que se ajusta a lo establecido. Este examen no es solo a posteriori sino que tambin es a priori
59
5.8 Control de concurrencia. Es la capacidad para ejercer un riguroso control en la ejecucin simultnea de transacciones con el fin de proteger la consistencia de las actualizaciones y consultas a la Base de datos. Veamos lo que ocurrira si no hubiese control de concurrencia. Supongamos en un banco, la ejecucin simultnea de una transaccin de consignacin de un cheque de 100 (T1) en una ventanilla, y una transaccin de retiro de 50 en efectivo (T2) en otra ventanilla. Los pasos que se sucederan en Ram se muestran en la siguiente diapositiva.
60
Registro inicial
Tiempo
t=0
SAL CON RET 200 0 0 T2 Lea cuentas RET = RET 50 Regrabe cuentas
T1 Lea cuentas
Observamos que el saldo en el sistema es de 300 (SAL = SAL + CON RET), mientras que el saldo real debe ser 250. Para evitar estas inconsistencias los DBMS conforman sus transacciones atmicamente por medio de seguros (locks) y puntos de sincronizacin (commit/rollback). 5.9 Rutas de acceso. Es la facilidad para obtener diferentes rutas de acceso, por medio de claves primarias y secundarias, pudiendo obtener respuesta a diferentes consultas aplicando diversos criterios de bsqueda.
62
63
6.1 El administrador de la Base de datos (DBA). El DBA es la persona o equipo de personas que se encarga de mantener en regla el entorno de una Base de datos (BD), para lo cual utiliza el siguiente software: a) b) c) d) e) f) De carga para crear inicialmente la BD. De reorganizacin de la BD (para liberar espacio). De registro de transacciones en bitcora (log). De recuperacin despus de un fallo. De anlisis de estadsticas de desempeo. De manejo de autorizaciones de acceso.
64
6.2 El diccionario de datos. El diccionario de datos es el conjunto de datos que describen la BD, y contiene: a) La descripcin de todos los esquemas (Externo, conceptual e interno). b) La descripcin de todos los campos (o atributos), registros (o tuplas) y referencias cruzadas entre las tuplas de varios archivos (o tablas, varrels o entidades). c) Los cdigos de autorizacin y seguridad de los datos y sus redefiniciones con las que puedan ser referidos con nombres diferentes en programas diferentes.
65
6.3 Lenguajes de una Base de datos. Estos lenguajes permiten primero (DDL) describir, y despus (DML) manipular o sea consultar y actualizar la BD. Adems proporcionan interfaces con lenguajes de programacin como Cobol, PL/1, Fortran, C, o Java, ya que los lenguajes de BD no son por si mismos de programacin, excepto por los PSM o mdulos almacenados persistentes.
6.3.1 DDL. Con este leguaje nos valemos para describir los esquemas conceptual y externo. El compilador DDL al compilar los esquemas produce el diccionario de datos y los esquemas conceptual y externo. 6.3.2 DML. Con DML nos valemos para insertar, modificar, borrar o seleccionar tuplas o atributos de una BD.
66
Las solicitudes en DML son precompiladas (o interpretadas) resultando cdigo de tercera generacin (en Cobol, PL/1, Fortran, C, Java,). Existen dos tipos de DML: a) Procedimental, con el cual el usuario especifica al DBMS, qu quiere y cmo debe hacerlo. b) No procedimental, con el cual el usuario nicamente especifica lo que quiere. SQL es un lenguaje de 4 generacin o sea 4GL (en realidad conformado por DDL y DML), por ser no procedimental. Inicialmente SQL era un sublenguaje pero con la incorporacin de los PSM (Persistent Stored Modules) en 1996, ahora es un lenguaje ms completo. Por lo tanto ya no hay necesidad de combinar SQL con algn lenguaje anfitrin.
67
7. Clases de DBMSs.
Hasta el da de hoy ha habido cuatro clases de DBMS: Jerrquicos, en Red, Relacionales y de Objetos. Los dos primeros ya han quedado obsoletos, mientras que el modelo relacional se mantiene en vigor todava. Hasta la fecha el modelo de objetos no es ms que una extensin del modelo relacional. Sin embargo, el modelo semntico contiene al modelo relacional, y sin ste, el semntico no existira.
68
7.3 El enfoque relacional. El enfoque relacional, sin lugar a dudas, es el fundamento de la tecnologa moderna de BD, y lo que hace que este campo sea una ciencia. El modelo relacional se ocupa de tres aspectos principales: Su estructura, La manipulacin de datos, La integridad. De aqu en adelante, toda la teora de este curso har referencia exclusiva al enfoque relacional.
69
De acuerdo a las recomendaciones ANSI/SPARC, el modelo est conformado por las siguientes partes: el nivel conceptual, el nivel externo, el nivel interno y el lenguaje de datos. 8.1 Nivel conceptual. Est representado por todo el conjunto de tablas descritas en SQL, cada una de las cuales tiene existencia por si sola, y se traducen en un archivo almacenado a nivel fsico. C. J. Date diferencia una tabla de una varrel. La sentencia SQL para crear una tabla es create table cuyo formato se observa en la siguiente diapositiva.
71
create table nombre-tabla (nom-col1 tipo-dato [not null] tipo-dato [not null] [, nom-col2 [, primary key (nom-col1 [, nom-col2] ) [, foreign key (nom-col-ajena1) references tabla-objetivo1 [, foreing key (nom-col-ajena2) references tabla-objetivo2 ); Ejemplo: Supongamos las relaciones S (proveedores), y P (partes), en donde un proveedor puede haber suministrado varias partes, y una parte puede haber sido suministrada por varios proveedores. Estas tablas (con los mismos datos) sern utilizadas durante todo el curso.
72
S
S# snombre edo 20 10 30 20 30 ciudad Londres Pars Pars Londres Atenas S1 Salazar S2 Jaimes S3 Bernal S4 Corona S5 Aldana
SP
S# S1 S1 S1 S1 S1 S1 S2 pnombre Tuerca Perno Birlo Birlo Leva Engrane color Rojo Verde Azul Rojo Azul Rojo peso 12 17 17 14 12 19 ciudad Londres Pars Roma Londres Pars Londres
73
P# P1 P2 P3 P4 P5 P6 P1 P2 P2 P2 P4 P5
cant 300 200 400 200 100 100 300 400 200 200 300 400
P
P# P1 P2 P3 P4 P5 P6
S2 S3 S4 S4 S4
Cuando una asociacin es muchos a muchos como se ve en lo subrayado atrs (las reglas del negocio), se requiere una tercera relacin adems de las relaciones S y P, para poder averiguar los proveedores que han suministrado cada parte, y las partes que han sido suministradas por cada proveedor. En este caso, como las reglas del negocio estn en pasado, la historia de envos, SP, puede satisfacer el requisito en cuestin. De este modo, la asociacin entre S y SP es uno a muchos, y entre P y SP uno a muchos tambin. La creacin en SQL de estas tablas est en la siguiente diapositiva.
74
create table S (s# char(2) not null, snombre char(10) not null, edo smallint not null, ciudad char(10) not null, primary key (s#)); create table P (p# char(2) not null, pnombre char(10) not null, color char(10) not null, peso smallint not null, ciudad char(12) not null, primary key (p#)); create table SP (s# char(2) not null, p# char(2) not null, cant integer, primary key (s#, p#), foreign key (s#) references S, foreign key (p#) references P);
75
Null es algo indefinido que no es igual a nada, no es igual a cero, no es igual a blanco, ni siquiera es igual a null. Por ejemplo, s# y p# deben tener valores definidos o si no sern rechazados, pero cant debe ser null para cuando no se conozca la cantidad enviada. Para modificar una tabla ya existente, est la sentencia alter table. Si queremos agregar una columna, la sentencia tendra la forma alter table nombre-tabla add nom-col tipo-dato; Ejemplo: alter table S add descuento smallint;
76
Al aadir a la tabla S el atributo descuento, S crece en lo conceptual, pero el nuevo atributo ser nulo, pues esta sentencia no permite especificar not null. Crecer en lo conceptual significa que la expansin de los registros no se da en lo fsico sino que solo se modifica su descripcin en el diccionario de datos. Al introducir un nuevo proveedor s crecer fsicamente, excepto que su descuento siga siendo nulo. Tambin se puede alterar una tabla eliminando o modificando columnas. Una tabla se puede eliminar con drop table que tiene el formato: drop table nombre-tabla;
77
8.2 Nivel externo: vistas. En este nivel la BD se percibe como una vista externa propia, o escenario particular a cada usuario. Una vista se crea en SQL con la sentencia create view cuyo formato es create view nombre-vista [(columna [, columna] )] as select columna [,columna] from nombre-tabla where condicin Una vista no existe fsicamente pero en el diccionario de datos si est guardada su definicin. Una vista es un subconjunto de una tabla.
78
Por medio de las vistas se logra la independencia lgica de los datos. Adems permiten a diferentes usuarios ver los mismos datos, de distintas maneras, al mismo tiempo. Finalmente, las vistas protegen los datos, pues los no visibles para un usuario, estn a salvo de accesos indebidos.
79
Una vista se puede borrar del diccionario de datos mediante la sentencia drop que tiene el siguiente formato: drop view nombre-vista 8.3 Nivel interno: ndices. Con las sentencias SQL create index y drop index se crea y se destruye ndices, pero stas son las nicas sentencias que los manejan, pues los DBMS relacionales lo hacen en forma automtica. La sintaxis de la sentencia create index es: create [unique] index nombre-ndice on nombre-tabla (columna [orden] [,columna [orden]]) [cluster] En donde el orden puede asc (ascendente) o desc (descendente).
80
La opcin cluster indica que el ndice es de agrupamiento, o sea que los datos para un mismo ndice son reunidos en secuencia fsica igual a la lgica. Ejemplo: create unique index xsp on SP (s#, p# desc) cluster; As se crea el ndice xsp sobre la tabla SP, en el cual las entradas se ordenan segn s# ascendentemente, y segn p# descendentemente. Con unique se asegura que el ndice no se repita. Con la sentencia drop index se destruye un ndice previamente creado. El nivel interno es pues el mismo conjunto de tablas del nivel conceptual, pero almacenadas como archivos indexados.
81
El modelo relacional permite as crear, alterar y destruir tablas, vistas e ndices, en cualquier momento, pues es muy tolerante. 8.4 El lenguaje de datos. SQL incluye tanto sentencias de especificacin o descripcin de datos (DDL), como sentencias de manipulacin (DML). SQL tiene fundamentos del lgebra relacional por lo cual en algunos aspectos es procedimental. Tambin del clculo relacional por lo cual en otros aspectos es no procedimental. De ah que para continuar con SQL, sea necesario estudiar lgebra relacional y clculo relacional.
82
9. lgebra relacional
El lgebra relacional deriva del lgebra de conjuntos, por lo cual consta de operandos (que son relaciones) y operaciones sobre relaciones. Cada operacin produce siempre como resultado una nueva relacin y la relacin resultado se puede someter a nuevas operaciones. Las operaciones del lgebra relacional se clasifican en tres categoras: a) Operaciones de conjunto (unin, diferencia, y producto cartesiano). b) Operaciones unarias (proyeccin y seleccin). c) Operaciones adicionales (reunin, interseccin, y divisin). 83
9.1 Operaciones de conjunto. Estas operaciones son binarias ya que operan sobre dos relaciones para producir una tercera relacin. Unin. Construye una relacin formada por todas las tuplas que aparecen en cualquiera de las dos relaciones A y B especificadas. Se puede denotar como A U B, o A unin B.
Lo sombreado es A U B A B
84
Ejemplo
A S# s1 s4 B S# s1 s2
edo 20 20
edo 20 10
edo 20 10 20
Diferencia. Construye una relacin formada por todas las tuplas de la primera relacin A que no aparezcan en la segunda B, de las dos relaciones especificadas. Se denota A B
A B Lo sombreado es A - B
86
Ejemplo
A S# s1 s4 B S# s1 s2
edo 20 20
edo 20 10 B-A S# s2
A-B S# s4
snombre Corona
edo 20
ciudad Londres
snombre Jaimes
edo 10
ciudad Pars
87
Producto cartesiano. Construye una relacin a partir de dos relaciones A y B especificadas, que contiene todas las combinaciones posibles de tuplas de cada relacin. Se denota A x B o A times B
AxB ax B x y ay bx by cx cy
A a b c
88
S y P deben ser disyuntos (sin atributos comunes) por lo que se debe renombrar primero la ciudad en S o en P as: S rename ciudad as sciudad;
89
9.2 Operaciones unarias. Las operaciones unarias se realizan sobre una relacin y dan como resultado una nueva relacin. Proyeccin. Extrae los atributos especificados de una relacin A dada, eliminando los duplicados. Se denota A[x, y] o x, y
A u x v y w
90
Ejemplo
S[ciudad] ciudad Londres Pars Atenas P[color, ciudad] color rojo verde azul azul ciudad Londres Pars Roma Pars
91
Seleccin. Extrae las tuplas especificadas de una relacin A dada, que cumple la condicin. Se denota con where condicin o condicin
A Lo sombreado es la seleccin A where condicin
9.3 Operaciones adicionales. Son operaciones complementarias que ayudan a simplificar algunas consultas. Reunin (join). Toma dos relaciones que tengan en comn una o ms columnas y crea una nueva relacin concatenando tuplas que coincidan en un mismo valor en una determinada columna. La operacin join realiza el producto cartesiano especificando una condicin, o sea SxPcondicin = S join P Cuando la condicin es diferente a la igualdad, el join se conoce como reunin y se denota S x P, siendo la condicin.
94
Cuando la condicin expresa igualdad, el join se llama equireunin. Si a la equireunin se le suprimen las columnas iguales, se llega al producto natural que se denota S * P Si en el producto natural las relaciones no tienen ningn campo en comn, S * P = S x P El producto natural es tan importante que en general S join P se toma S * P
a1 a2 a3 b1 b1 b2 b1 c1 c2 c3 a1 b1 b1 b2 c1 c1 c2
b2 b3
a2 a3
95
Ejemplo: S join P
s# s1 s1 s1 s2 s2 s3 s3 s4 s4 s4 snombre edo Salazar Salazar Salazar Jaimes Jaimes Bernal Bernal Corona Corona Corona 20 20 20 10 10 30 30 20 20 20 ciudad P# pnombre Tuerca Birlo Engrane Perno Leva Perno Leva Tuerca Birlo Engrane color peso Rojo Rojo Rojo Verde Azul Verde Azul Rojo Rojo Rojo 12 14 19 17 12 17 12 12 14 19 Londres p1 Londres p4 Londres p6 Pars Pars Pars Pars p2 p5 p2 p5
96
Interseccin. Construye una relacin con las tuplas comunes a las dos relaciones especificadas A y B. Se denota como A B o A intersect B
Lo sombreado es A B o A intersect B
83
97
Comprobar que A B = A (A B) = A join B, si los atributos de A y B son comunes. Si no son comunes, A join B = A x B. Divisin. Sea A de grado m+n (m+n columnas) y B de grado n. La divisin entre A y B es el conjunto de tuplas (cociente) de m columnas que concatenadas con las tuplas de B producen tuplas contenidas en A.
A a a a b c
x y z x y
98
B x z
AB a
Si A es de grado m+n, y B de grado n, y tomando la relacin T = A[1,2,,m], la divisin tambin se puede expresar en funcin de la proyeccin, el producto cartesiano, y la diferencia, as: T = ((T x B) A)[1,2,,m] = A B Ejemplo1: Sea el dividendo A = SP[s#, p#], para los sucesivos divisores mostrados en la siguiente diapositiva, los respectivos cocientes son:
99
B A s# p# s1 s1 s1 s1 s1 s1 s2 s2 s3 s4 s4 s4 p1 p2 p3 p4 p5 p6 p1 p2 p2 p2 p4 p5 B p# p2 p4 B p# p1 p2 p3 p4 p5 p6 p# p1
AB s# s1 s2 AB s# s1 s4
AB s# s1
100
71
2 Obtener el cdigo de los proveedores de Pars cuyo estado sea > 20. 3 Obtener los nombres de los proveedores que suministran la parte p2 4 Obtener los nombres de los proveedores que suministran todas las partes. 5 Obtener los nombres de los proveedores que no suministran la parte p2. 6 Obtener todas las parejas de nmeros de proveedor, digamos sx y sy, tales que suministren cada una, el mismo conjunto de partes.
101
71
1 Obtener los nombres de los proveedores y su ciudad, cuyo estado es < 20. 2 Obtener los nombres de las partes cuyo color sea azul, o se almacenen en Roma. 3 Obtener los nombres de las partes cuyos envos hayan sido inferiores a 200 unidades. 4 Listar los nombres de los proveedores que hayan suministrado alguna parte, indicando los nombres de las partes, excepto la parte p2. 102
5 Listar los nombres de los proveedores que no hayan suministrado la parte p2, pero si alguna otra parte. 71 6 Listar los nombre de los proveedores que no hayan suministrado la parte p2. 7 Listar los nombres de las partes suministradas por todos los proveedores 7 Listar los nombres de los proveedores que suministran todas las partes 8 Listar el color y el nombre de las partes que no hayan sido an suministradas por algn proveedor. 9 Obtener los envos mayores de 200, indicando el nombre del proveedor, el nombre de la parte y la ciudad desde donde se ha hecho el despacho.
103
104
CodigoM NombreM 1436 Fsica 1520 Clculo 1670 Ondas 1700 Historia 1745 Mecnica 1815 Qumica 1820 Algebra
105
CodigoM Horario CodigoA 1520 A1 05700 1520 A1 07100 1670 H1 05600 1670 H1 06078 1700 D1 05600 1700 D1 07203 1815 J1 06078 1815 J2 07100 1815 J2 07301 1820 E1 06150 1820 E1 07100
Nota 4.7 3.9 3.9 3.6 3.8 5.0 4.7 4.8 2.8 4.0 4.1
106
10 Sean las relaciones A (alumnos), M (materias), C (cursos) mostradas en las anteriores diapositivas: Obtener el cdigo y el nombre de los estudiantes de Sistemas que tengan ms de 120 crditos. 11 Obtener el cdigo y el nombre de los estudiantes que estn viendo clculo. 12 Obtener el cdigo y el nombre de los estudiantes que no estn viendo historia. 13 Listar las notas de los diferentes estudiantes indicando el nombre de la materia, y el cdigo del estudiante y su nombre. 14 Obtener el cdigo y el nombre de los estudiantes que estn viendo todas las materias. 15 Obtener el cdigo y el nombre de las materias cursadas por todos los estudiantes.
107
Note que en clculo, el usuario se limita a expresar las caractersticas que definen el resultado deseado, tocndole al sistema decidir exactamente cules operaciones ejecutar para construir el resultado. Mientras el clculo solo plantea el problema, el lgebra proporciona un procedimiento para resolver ese problema. Una expresin de clculo relacional (de tuplas), tiene la forma {t/P(t)} la cual se lee el conjunto de tuplas t tal que el predicado P se cumple para t. El predicado es la expresin del criterio de seleccin en la recuperacin de los datos. Una expresin se forma con variables (de tuplas), condiciones y cuantificadores.
109
10.1 Variables de tuplas. Son variables que recorren las tuplas de una relacin, las cuales son su nico dominio. Se escriben en minscula (t, u, v, ) y su notacin t[nombre-campo] denota el valor de t en el atributo. Sea t la primera tupla de la relacin S mostrada en la diapositiva 71 . Entonces t[s#] = s1 y t[snombre] = Salazar Tambin vale t[1] para indicar el valor del primer atributo en la tupla dada: t[1] = s1 y t[2] = Salazar. Etc Siendo una relacin un conjunto de tuplas, se utiliza la notacin de conjuntos t S para indicar que la tupla t est en S.
110
10.2 Condiciones de comparacin. Estas comparan componentes de tuplas o tuplas enteras, combinando variables y constantes con operadores de comparacin y aritmticos, dando como resultado el valor verdadero o falso, o nulo. Ejemplo: t[1] > t[2], t[3] = 10, t[1] = t[1] + u[2]. 10.3 Condiciones de pertenencia. Se denotan con la notacin S(t), que significa: Si la tupla t pertenece a la relacin S, entonces la condicin S(t) toma el valor verdadero, y falso en caso contrario. 10.4 Condiciones compuestas. Combinan las condiciones de comparacin y las de pertenencia con los operadores lgicos and, or y not, pudiendo ser el resultado verdadero falso.
111
Ejemplos: (t[1] > t[2]) and (t[3] = 10) (S(t) or (t[1] > 10) 10.5 Cuantificador existencial. Este se representa por t(Q(t)) y significa que existe una tupla t, tal que cumple la condicin Q(t). Toma el valor verdadero si al menos hay una tupla en la que se cumple la condicin, y falso en caso contrario. 10.6 Cuantificador universal. Se representa por _ Vt(Q(t)), que significa que para todas las tuplas t se cumple la condicin Q(t). Si para todos los valores de la variable t se cumple la condicin, el resultado ser verdadero, y falso en caso contrario. E
112
10.7 Expresiones. En general, una expresin en clculo relacional tiene la forma {t/F(t)} en donde F es una frmula bien formada o WFF (Well Formed Formula), la cual se construye con condiciones, operadores lgicos y cuantificadores. Recursivamente se define que: a) Si F es una frmula bien formada, lo es not F b) Si F y G son frmulas bien formadas, tambin lo son (F and G) y (F or G) 10.8 Tipos de variables de tuplas. En una frmula puede haber diversas variables de tuplas que pueden ser: a)Variables libres si no estn ligadas a un cuantificador b) Variables acotadas si estn unidas a un cuantificador.
113
10.9 Ejemplos. Sean sx, sy y sz variables de tuplas que recorren la relacin S, px, py y pz que reocrren P, y spx, spy, y spz que reocrren SP. Ver tablas en diapositiva 71
1) Obtener los nmeros de los proveedores de Pars cuyo estado sea mayor que 20 2) Obtener los nombres de los proveedores que suministran la parte p2 3) Obtener los nombres de los proveedores que suministran todas las partes 4) Obtener los nombres de los proveedores que no suministran la parte p2 5) Obtener los nombres de los proveedores que suministran al menos una parte roja.
114
Problemas. (tablas en
71
1) Obtener los nombres de los proveedores y su ciudad cuyo estado es menor que 20 2) Obtener los nombres de las partes cuyo color sea azul, o se almacenen en Roma 3) Obtener los nombres de las partes con envos inferiores a 200 unidades 4) Listar los nombres de los proveedores que hayan suministrado alguna parte, indicando los nombres de las partes, excepto la parte p2 5) Listar los nombres de los proveedores que no hayan suministrado la parte p2 pero si alguna otra parte 6) Listar los nombres de los proveedores que no hayan suministrado la parte p2
115
7) Listar los nombres de las partes suministradas por todos los proveedores. (Tablas en 71 ) 8) Listar el color y los nombres de las partes que no hayan sido an suministradas por algn proveedor 9) Obtener los envos mayores de 200 indicando el nombre del proveedor, el nombre de la parte, y la ciudad desde donde se ha hecho el despacho 10) Sean las relaciones alumnos A , materias M y cursos C : Obtener el cdigo y el nombre de los estudiantes de Sistemas que tengan ms de 120 crditos. 11) Obtener el cdigo y el nombre de los estudiantes que estn viendo clculo 12) Obtener el cdigo y el nombre de los estudiantes que no estn viendo historia
116
13) Listar las notas de los diferentes estudiantes indicando el cdigo y el nombre del estudiante, as como el nombre de la materia. Tablas en A M C 14) Obtener el cdigo y el nombre de los estudiantes que estn viendo todas las materias 15 Obtener el cdigo y el nombre de las materias cursadas por todos los estudiantes.
117
11.1 Consultas simples. Ante todo, el formato de la instruccin select es el siguiente: select [distinct] atributos from relaciones [where condicin] [group by atributos] [having condicin] [order by atributos]; Ejemplos: 1. Obtener el cdigo y el estado de todos los proveedores de Pars (tablas en 71 ): select s#, edo from S where ciudad = Pars;
119
El ejemplo anterior tambin pudiera haber sido escrito: select S.s#, edo from S where S.ciudad = Pars; Un nombre calificado de campo se compone de un nombre de tabla (o nombre de variable de recorrido) y un nombre de campo, separados por punto (.) 2. Obtener el cdigo de la parte de todas las partes suministradas: select distinct p# from SP;
Probar con y sin la opcin distinct.
120
71
3. Obtener de las partes el cdigo de la parte y su peso en gramos (estando en la tabla el peso en libras y siendo una libra igual a 454 grs.): select P.p#, peso en gramos = , peso*454 from P; 4. Obtener todos los datos de los proveedores: select * from S; tambin select s#, snombre, edo, S.ciudad from S;
121
71
5. Obtener los cdigos de los proveedores de Pars cuyo estado sea mayor que 20: select s# form S where ciudad = Paris and edo > 20;
71
6. Obtener el cdigo y el estado de los proveedores radicados en Pars en orden descendente de estado: select s#, edo from S where ciudad = Paris order by edo desc;
122
7. Obtener de las partes, el nmero de parte y su peso en gramos en orden ascendente por el peso en gramos: select P.p#, peso en gramos = , peso *454 from P 71 order by 3; 11.2 Consultas de reunin. Una reunin ocurre cuando la consulta se obtiene de ms de una tabla: 8. Obtener todo de los proveedores y partes que estn situados en la misma ciudad: select S.*, P.* from S, P where S.ciudad = P.ciudad;
123
En la anterior consulta se repiten las columnas ciudad, por lo que se llama equireunin simple. 9. Obtener de los proveedores el cdigo, el nombre, el estado, y su ciudad, y de las partes el cdigo, el nombre, el color y su peso, donde los proveedores radiquen en la misma ciudad donde se almacena la parte: select s#, snombre, edo, S.ciudad, p#, pnombre, color, peso from S, P 71 where S.ciudad = P.ciudad; En este resultado no se repiten las columnas ciudad, por lo que se llama equireunin natural.
124
10. Obtener todo de los proveedores y partes donde la ciudad del proveedor siga a la ciudad de la parte en orden alfabtico: select S.*, P.* from S, P where S.ciudad > P.ciudad
71
11. Obtener todo de los proveedores y partes que estn en la misma ciudad, pero omitiendo los proveedores cuyo estado sea 20: select S.*, P.* from S, P where S.ciudad = P.ciudad and edo <> 20;
125
12. Obtener todas las parejas de ciudades tal que un proveedor situado en la primera ciudad suministre una parte almacenada en la segunda ciudad: select distinct S.ciudad, P.ciudad from S, SP, P where S.s# = SP.s# and P.p# = SP.p#;
71
13. Obtener todas las parejas de cdigo de proveedor tal que ambos proveedores estn en la misma ciudad: select primera.s#, segunda.s# from S primera, S segunda where primera.ciudad = segunda.ciudad and primera.s# < segunda.s#
126
Las anteriores variables primera y segunda son de recorrido sobre la misma tabla S. Adems, la condicin primera.s# < segunda.s# suprime las parejas de la forma (x, x) y deja una sola de las parejas (x, y) (y, x). 11.3 Funciones integradas. Aunque la instruccin select ya es poderosa, no es adecuada por si sola para consultas tan sencillas como cuntos proveedores hay? Para cosas como estas existen las funciones integradas: Count, cuenta el nmero de valores de una columna. Sum, suma los valores de una columna. Avg, promedia los valores de una columna. Max, toma el valor ms grande de una columna. Min, toma el valor ms pequeo de una columna
127
1. Obtener la cantidad total de proveedores: select count (*) from S; Count ir con distinct si no debe contar los duplicados. 2. Obtener la cantidad total de proveedores que suministran partes en la actualidad: select count (distinct s#) 71 from SP; 3. Obtener la cantidad de envos de la parte p2: select count (*) from SP where p# = p2;
128
4. Obtener la cantidad total suministrada de la parte p2: select sum (cant) from SP where p# = p2; 5. Obtener el cdigo de parte y la cantidad total suministrada de cada parte: select p#, sum(cant) from SP 71 group by p#; 6. Obtener los cdigos de partes suministradas por ms de un proveedor: select p# from SP group by p# having count (*) > 1;
129
La clusula having siempre va con group by pues trabaja con grupos lo mismo que where con las tuplas. Cmo sera la respuesta sin having? 11.4 Caractersticas avanzadas de select. 1. Obtener todas las partes cuyos nombres comiencen con la letra b select P.* 71 from P where pnombre like b%; Los atributos usados en like deben ser de tipo char o graphic. El comodn _ representa cualquier carcter individual. % representa cualquier cadena de caracteres. Los dems caracteres se representan as mismos. Tambien se puede usar not like (diferente a)
130
2. Supongamos que el proveedor s5 tiene un nulo en el campo edo, en lugar de 30. Obtener el cdigo de los proveedores cuyo estado sea mayor que 25: select s# from S 71 where edo > 25; El resultado ser s3 porque en s5 el resultado es desconocido, pues edo no es > 25, ni edo es < 25, ni edo es = 25, ni edo es <> 25, ni edo es = null, ni edo es <> null. Para detectar la presencia de nulos habra que decir: select s# from S where edo is null;
131
3. Obtener los nombres de los proveedores que suministran la parte p2: select snombre from S where s# in (select s# from SP where p# = p2); select snombre from S where s# in (s1, s2, s3, s4); select snombre fron S, SP where S.s# = SP.s# and SP.p# = p2;
71
132
4. Obtener los nombres de los proveedores que suministren por lo menos una parte roja select snombre from S where s# in (select s# from SP where p# in (select p# from P where color = rojo)); select distinct S.snombre from S, SP, P where S.s# = SP.s# and P.p# = SP.p# and P.color = rojo;
133
71
5. Obtener el cdigo de los proveedores situados en la misma ciudad que el proveedor s1: select s# from S where ciudad = (select ciudad 71 from S where s# = s1); Si el resultado de una subconsulta es exactamente un valor se puede utilizar un operador como =, >, etc, en vez de in. 6. Obtener los cdigos de los proveedores cuyo estado sea menor que el valor mximo actual de estado: select s# from S where edo < (select max(edo) from S);
134
7. De nuevo, obtener los nombres de los proveedores que suministran la parte p2. select snombre from S where exists 71 (select * from SP where s# = S.s# and p# = p2); Nota: exists es el cuantificador existencial que implica una bsqueda. As para cada snombre en S se busca en SP una tupla que satisfaga la condicin de la subconsulta.
E
135
8. Obtener los nombres de los proveedores que no suministran la parte p2. select snombre from S where no exists (select * from SP where s# = S.s# and p# = p2); select snombre from S where s# not in (select s# from SP where p# = p2);
136
71
9. Obtener los nombres de los proveedores que suministran todas las partes. select snombre from S where not exists (select * 71 from P where not exists (select * from SP where s# = S.s# and p# = P.p#));
Da lo mismo decir no existe una condicin en un conjunto que todo el conjunto cumple la no condicin. Por ejemplo no existen partes que no estn en envos es igual a todas las partes estn en envos. not exists no es igual, aqu, a not in porque las subconsultas sobre P y SP no dan conjuntos definidos de valores. En general in se puede expresar con exists pero no al contrario.
137
10. Obtener los cdigos de los proveedores que suministran por lo menos todas las partes suministradas por el proveedor s2. select distinct s# from SP spx where not exists (select * from SP spy where s# = s2and not exists ( select * from SP spz where spz.s# = spx.s# and spz.p# = spy.p#));
71
138
11. Obtener los cdigos de las partes que pesen ms de 16 libras o sean suministradas por el proveedor s2, o las dos cosas. select p# from P where peso > 16 union select p# from SP where s# = s2;
71
139
12. Obtener los cdigos de las partes que pesen ms de 16 libras y sean suministradas por el proveedor s2. select p# from P where peso > 16 intersect select p# from SP where s# = s2;
71
140
13. Obtener los cdigos de las partes que pesen ms de 16 libras que no sean suministradas por el proveedor s2. select p# from P where peso > 16 minus select p# from SP where s# = s2;
71
11.5 Proposiciones de actualizacin. update tabla set campo = expresin [, campo = expresin] [where condicin];
141
1.Cambiar a amarillo el color de la parte p2, aumentar su peso en 5, e indicar que su ciudad es desconocida (null). update P set color = marillo, peso = peso + 5, ciudad = null 71 where p# = p2;
Si se omitiera la clusula where se modificaran todas tuplas de la tabla.
142
2. Duplicar el estado de todos los proveedores de Londres update S set edo = 2*edo where ciudad = Londres; 3. Poner en ceros la cantidad enviada por todos los proveedores de Londres update SP set cant = 0 where Londres = (select ciudad from S where S.s# = SP.s#);
71
143
4. Cambiar el cdigo del proveedor s2 a s9. update S set s# = s9 where s# = s2; update SP set s# = s9 where s# = s2;
71
Con update solo se puede actualizar una tabla, siendo entonces necesarios tantos update como tablas se deseen modificar. Por lo tanto cada update, insert delete ponen en peligro cada vez la integridad referencial.
144
1. Aadir la parte p7 (ciudad Atenas, peso 24, nombre y color desconocidos) a la tabla P. insert into P (p#, ciudad, peso) values (p7, Atenas, 24);
El nombre y el color se crean nulos asumiendo que en create table no se hubiera especificado not null.
71
2. Aadir la parte p8 con nombre cadena, color rosa, peso 14 y ciudad Niza, a la tabla P. insert into P values (p8, cadena,rosa, 14, Niza);
146
3. Insertar un nuevo envo con cdigo de proveedor s20, cdigo de parte p20, y cantidad 1000. insert into SP (s#, p#, cant) 71 values (s20, p20, 1000);
Esto causara problemas con la integridad referencial si antes no se inserta el proveedor s20 en S, y la parte p20 en P.
2. Eliminar todos los envos cuya cantidad sea mayor que 300. 71 delete from SP where cant > 300;
148
4. Eliminar todos los envos de los proveedores situados en Londres. 71 delete from SP where Londres = (select ciudad from S where S.s# = SP.s#);
149
5. Eliminar todos los proveedores que no hayan suministrado partes rojas. delete from S where not exists (select * 71 from SP where S.s# = SP.s# and SP.p# in (select p# from P where color = rojo));
Cuando se usa el SQL embebido dentro de un lenguaje husped, es necesario usar ciclos y cursores para apuntar a cada tupla, por la des-adaptacin de impedancias entre SQL y los lenguajes de tercera generacin, pues estos solo entienden registros por vez y no tablas.
150
Problemas 1.Obtener los nombres de los proveedores y su ciudad, cuyo estado sea menor que 30. 71 2. Obtener los nombres de las partes cuyo color sea azul, o se almacenen en Roma. 3. Obtener los nombres de las partes con envos inferiores a 200 unidades. 4. Listar los nombres de los proveedores que hayan suministrado alguna parte, indicando los nombres de las partes, excepto el de la parte p2. 71 5. Listar los nombres de los proveedores que no hayan suministrado la parte p2 pero si alguna otra parte.
151
6. Listar los nombres de los proveedores que no hayan suministrado la parte p2. 71 7. Listar los nombres de las partes suministradas por todos los proveedores. 8. Listar el color y el nombre de las partes, que no hayan sido an suministradas por algn proveedor 9. Obtener los envos mayores de 200 indicando el nombre del proveedor, el nombre de la parte, y la ciudad desde donde se ha hecho el despacho. 10. Sumar 5 a la cantidad enviada por todos los proveedores de tuercas. 71 11. Eliminar todos los proveedores que hayan suministrado partes verdes almacenadas en Pars.
152
12. Insertar el proveedor de cdigo s20, nombre Ulloa, estado 10, y residente en Girn. 71 13. Sean las tablas A alumnos, M materias y C cursos. Obtener el cdigo y el nombre de los estudiantes de sistemas que tengan ms de 120 crditos. 14. Obtener el cdigo y el nombre de los estudiantes que estn viendo clculo. 15. Obtener el cdigo y el nombre de los estudiantes que no estn viendo historia. 16. Listar las notas de los estudiantes cuyo promedio sea mayor o igual a 3.8, agrupando y ordenando ascendentemente por cdigos de estudiante, indicando su cdigo, su nombre, su promedio, y el nombre de cada materia.
153
17. Obtener el cdigo y el nombre de los estudiantes que estn viendo todas las materias. 18. Obtener los cdigos de los estudiantes que estn viendo alguna materia vista por el estudiante de cdigo 07100.
A
19. Sumar 0.5 a la nota de clculo obtenida por todos los estudiantes de sistemas.
M
20. Eliminar todos los estudiantes que hayan obtenido notas inferiores a 1.0 en lgebra.
C
21. Insertar la materia con cdigo 1900, deportes, de 2 crditos y sin requisitos.
154
Uno intuitivo y natural que se aproxima a objetos en cuanto determina la estructura de las tablas (los atributos que les pertenecen y las identifican), pero no su funcionalidad. Este camino produce, relaciones bastante normales por si solas. El otro camino aunque extrao es ms oficial, y es el seguido en este captulo. Parte de una mezcla anormal de todos los atributos posibles en una misma relacin, la cual es llamada la relacin universal. Por este motivo es necesario hacer normal (normalizar) la relacin universal, mediante una serie de pasos de descomposicin. As pues, la normalizacin consiste en descomponer tablas aislando atributos y reagrupndolos en nuevas relaciones que se parezcan ms a objetos de la vida real. 156
12.1 La relacin universal. Supongamos que se desea implantar una Base de datos (simplificada al extremo) para el suministro de partes a una empresa. Los datos (atributos) a mantener son los siguientes: La identificacin del proveedor (s#), el nombre del proveedor (snombre), el estado del proveedor (edo), la ciudad donde reside el proveedor (ciudad), la cantidad suministrada por el proveedor en cada envo (cant), la identificacin de cada parte (p#), el nombre de cada parte (pnombre), su color (color), su peso (peso), y la ciudad en donde se almacena la parte (ciudad). Todos estos atributos arreglados en una misma tabla produce la relacin universal (U).
157
U
s# snombre edo 20 ciudad cant p# pnombre p1 tuerca p2 perno p3 birlo p4 birlo p5 leva p6 engrane p1 tuerca p2 perno p2 perno p2 perno p4 birlo p5 leva 200 400 200 100 100 s2 Jaimes s3 Bernal s4 Corona 10 30 20 Pars Pars 300 400 200 300 400 Londres 200 color rojo azul rojo azul rojo rojo peso 12 17 14 12 19 12 ciudad Londres Pars Roma Londres Pars Londres Londres Pars Pars Pars Londres Pars
158
s1 Salazar
Londres 300
verde 17
La principal anormalidad de la relacin U consisten en que para cada proveedor se abre una lista de partes enviadas, por lo cual los atributos cant, p#, pnombre, color, peso y ciudad, no son atmicos, o sea que se pueden dividir en varias sub-tuplas. Adems, en algunas tuplas los atributos s#, snombre, edo y ciudad no quedan definidos, pero en otras tuplas si. As, con DDL no podra ser creada la tabla U expresando null y simultneamente not null, en estos atributos. La correccin de las anteriores anomalas normalizar la relacin U, resultando una nueva relacin que se suele llamar la relacin 1NF (First Normal Form).
159
Una relacin est en primera forma normal cuando el valor de sus atributos en cada tupla es atmico.
En otras palabras, en la interseccin de cada tupla con cada columna, siempre hay exactamente un valor, nunca un conjunto de valores. Entonces, para obtener la 1NF es necesario determinar valores nicos o atmicos en cada interseccin. As, la relacin U queda transformada en la relacin 1NF que se muestra en la siguiente diapositiva. Para las explicaciones subsiguientes, se ha incluido el atributo fecha, y el estado de s3 se ha cambiado de 30 a 10. Adems, es necesario repasar los conceptos de claves y dependencia funcionales.
160
1NF
s# s1 s1 s1 s1 s1 s1 s2 s2 s3 s4 s4 s4 snombre Salazar Salazar Salazar Salazar Salazar Salazar Jaimes Jaimes Bernal Corona Corona Corona edo 20 20 20 20 20 20 10 10 30 20 20 20 ciudad cant fecha 10/5 10/8 11/9 p# p1 p2 p4 pnombre tuerca perno birlo birlo leva engrane tuerca perno perno perno birlo leva color rojo verde azul rojo azul rojo rojo verde verde verde rojo azul peso 12 17 17 14 12 19 12 17 17 17 14 12 ciudad Londres Pars Roma Londres Pars Londres Londres Pars Pars Pars Londres Pars Londres 300 Londres 200 Londres 400 Londres 200 Londres 100 Londres 100 Pars Pars Pars 300 400 200
11/10 p5
161
12.3 Qu es una dependencia funcional (DF)? El concepto de dependencia funcional viene de las matemticas, y significa que si el valor de una variable y est siempre determinado por el valor de otra variable x, se dice que y est en funcin de x, y se denota y = f(x). Entonces, dados dos atributos A y B de una relacin R, B ser funcionalmente dependiente de A si para cada valor de A existe un valor de B y solo uno, o sea que al conocer el valor de A se podr conocer el valor de B. Esto se denota tambin A B. A y B deben pertenecer a la misma relacin pues no tiene sentido la dependencia funcional entre atributos de diferentes relaciones.
162
Al analizar las dependencias funcionales de los atributos entre si, se encontrarn atributos simples o compuestos cuyos valores son nicos, y entonces pueden ser usados para identificar las tuplas de una relacin. Tales atributos se llaman claves. Existen diferentes clases de claves. 12.3.1 Clave candidata. Es cualquier atributo simple o compuesto que puede ser utilizado para identificar las tuplas de una relacin, por lo que su valor debe ser nico an en el caso de ser compuesto. 12.3.2 Clave principal. Es la clave candidata elegida como identificador, en la que ningn componente puede tomar el valor nulo. Toda relacin debe tener una calve principal. 12.3.3 Clave fornea. Tambin llamada clave ajena o clave externa, es un campo de una relacin que acta como clave principal en otra relacin.
163
12.3.4 Clave alterna. Es la clave candidata que no es clave principal. Como s# es nico en S, es una clave candidata. Si snombre fuera nico, tambin sera una clave candidata. Si se elige s# como clave principal, snombre sera una clave alterna. Toda relacin tiene al menos una clave candidata ya que ninguna relacin puede contener tuplas repetidas. Los dems atributos no clave deben depender funcionalmente de la clave candidata. 12.4 Normalizacin de la relacin 1NF. La relacin 1NF tiene una estructura indeseable. Para apreciar esto se utilizan los llamados diagramas de dependencias funcionales o diagramas DF. El diagrama DF para la relacin 1NF es el siguiente:
164
edo
5
s# cant
1
ciudad p# fecha
6 7 8 9
165
Sobre el diagrama DF anterior vemos que la nica clave candidata es el atributo compuesto (s#, p#, fecha). En una relacin normal cualquier atributo no clave debe depender funcionalmente de la clave candidata, pero esto no se cumple en la relacin 1NF. El nico atributo que depende por completo de la clave candidata es cant pero los dems no, como se ve en el diagrama DF. Si hay atributos no clave que no dependen de la clave candidata, entonces para qu la clave candidata? Sin embargo, se ve cierta dependencia no completa de los restantes atributos a la clave candidata: flechas 2, 3, 4, 6, 7, 8, 9.
166
Una dependencia funcional completa se define cuando un atributo B depende funcionalmente de A, pero no de ningn subconjunto propio de A. Por ejemplo, snombre depende de la clave candidata (s#, p#, fecha) pero no completamente porque tambin depende de s# solo. Estas otras dependencias diferentes a la clave candidata hacen anormal la relacin 1NF, generando redundancias obvias: Por ejemplo, todas las tuplas con s# = s1 indican que la ciudad es Londres; y las tuplas con ciudad de proveedor = Londres indican que el estado (edo) es 20. Estas redundancias provocan las conocidas anomalas de actualizacin, que son problemas surgidos al actualizar la Base de datos con insert, delete o update.
167
La primera redundancia se origina por la dependencia no completa s# ciudad (flecha4) y causa que no se pueda insertar (insert) un nuevo proveedor hasta que no suministre al menos una parte. De ah que en la relacin 1NF no se haya podido incluir el proveedor s5 situado en Atenas, pues sin un suministro no se puede tener una valor apropiado para la clave primaria. Adems, al eliminar (delete) la nica tupla de un cierto proveedor se perder no solo la informacin del envo sino tambin la del proveedor. De ah que al eliminar la tupla cuyo s# = s3 se eliminen los datos del envo pero tambin los del proveddor en los que dice que s3 est en Pars. El problema radica en que la relacin 1NF contiene demasiados datos y as, al eliminar una tupla de elimina demasiado.
168
La solucin a este problema es desempacar, o sea separar los datos de envos en una relacin y los de proveedores en otra. As pues, la normalizacin es un proceso de desempaque que coloca datos separados en relaciones separadas. Igualmente, no se puede actualizar (update) la relacin 1NF sin tener que recorrer todas sus tuplas para evitar las inconsistencias. Por ejemplo, si el proveedor s1 se cambia de Londres a Amsterdam. La correccin de todas estas anormalidades transforma la relacin 1NF en un conjunto de relaciones en segunda forma normal (2NF), en las cuales los datos quedan desempaquetados al eliminar las dependencias funcionales no completas.
169
Una relacin est en segunda forma normal (2NF) si y solo si est en 1NF y todos sus atributos no clave dependen por completo de la clave principal.
Se puede ver que las siguientes relaciones corresponden a las relaciones 2NF, en las cuales, s es posible incluir datos del proveedor s5 aunque no haya hecho envos. Adems, las redundancias han desaparecido y se pueden aplicar operaciones insert, delete y update sin los problemas ya vistos.
170
S
S# snombre edo ciudad S1 Salazar S2 Jaimes S3 Bernal S4 Corona S5 Aldana 20 Londres 10 Pars 10 Pars 20 Londres 30 Atenas
SP
S# S1 S1 S1 S1 S1 S1 pnombre Tuerca Perno Birlo Birlo Leva Engrane color Rojo Verde Azul Rojo Azul Rojo peso 12 17 17 14 12 19 ciudad Londres Pars Roma Londres Pars Londres
171
P# P1 P2 P3 P4 P5 P6 P1 P2 P2 P2 P4 P5
fecha 10/5 10/8 10/12 11/9 11/15 11/18 10/7 10/10 10/2 11/3 11/8 11/10
cant 300 200 400 200 100 100 300 400 200 200 300 400
P
P# P1 P2 P3 P4 P5 P6
S2 S2 S3 S4 S4 S4
Finalmente es posible apreciar en la relaciones 2NF que las dependencias funcionales son completas, como se muestra en los diagramas DF a continuacin: SP
2
snombre s# p# fecha
1
S
s# cant
3 4
edo
5
ciudad p#
6 7 8 9
Las relaciones 2NF representan mejor el mundo real que la relacin 1NF y cualquier informacin derivable de sta lo ser tambin de las relaciones 2NF, aunque lo contrario no se cumple. Por ejemplo, el proveedor s5 no puede ser representado en la relacin 1NF. 12.6 Normalizacin de las relaciones 2NF. Aunque las relaciones P y SP son satisfactorias, la relacin S tiene todava una dependencia mutua entre sus atributos no clave (flecha 5 en el diagrama DF de la 2NF). En trminos ms especficos, la dependencia del atributo edo con respecto a s#, aunque es funcional y completa, es transitiva a travs de ciudad.
173
Si en una relacin R, R.A R.B y R.B R.C, por transitividad R.A R.C Por causa de la transitividad no se puede insertar (insert) el estado de una ciudad hasta que no haya un valor no nulo para la clave s#. Por ejemplo, no se puede insertar Roma con edo 50, si no hay un proveedor all. Tampoco se puede eliminar (delete) una tupla sin perder ms datos de la cuenta. Por ejemplo, si se elimina Aldana se pierde la ciudad Atenas y tambin el hecho de que a Atenas le corresponde el estado 30. Como S todava tiene redundancias es necesario recorrerla toda al actualizar (update) algo, para no dejar inconsistencias. Por ejemplo, si a Londres se le cambia el estado de 20 a 40.
174
relacin S en dos relaciones 3NF, las cuales desempaquetan ms datos eliminando las dependencias transitivas.
Una relacin est en tercera forma normal (3NF) si y solo si est en segunda forma normal (2NF) y todos los atributos no clave dependen de manera no transitiva de la clave principal.
175
S
S# S1 S2 S3 S4 S5 snombre Salazar Jaimes Bernal Corona Aldana ciudad Londres Pars Pars Londres Atenas
C
ciudad Atenas Londres Pars Roma edo 30 20 10 50
Ahora s es posible incluir el estado 50 para Roma. Se puede eliminar Aldana sin borrar los datos de Atenas. Las redundancias desaparecieron bastando modificar el estado de Londres en una sola tupla.
176
As, las dependencias transitivas han desaparecido, como se puede observar en los diagramas DF para las relaciones S y la nueva relacin C (ciudad): S
s#
4
snombre ciudad
C
ciudad edo
Si en 3NF se puede representar datos que en 2NF no se poda, 3NF representa mejor el mundo real que 2NF.
177
12.8 Forma Normal de Boyce & Codd (BCNF). Pero, la 3NF originalmente debida a Codd, no satisface el caso en el cual una relacin tiene: a) Varias claves candidatas b) Claves candidatas compuestas c) Claves candidatas traslapadas Por esto, la definicin original de 3NF se sustituy por una definicin ms adecuada que tuviese en cuenta el caso abc. Pero como Ronald Fagin ya haba definido la 4NF, la nueva 3NF no se pudo llamar 4NF sino Forma Normal de Boyce & Codd o BCNF.
Cuando un atributo depende por completo de otro atributo, ste determina al primero y se le llama un determinante. Por ejemplo, el snombre y la ciudad del proveedor dependen por completo de s# en la relacin S. Tambin el pnombre, el color, el peso y la ciudad de las partes dependen por completo de p# en P. Igualmente en SP, la cantidad enviada depende por completo de (s#, p#, fecha). Y en C, el estado depende por completo de ciudad. Por lo tanto, s#, p#, (s#, p#, fecha) y ciudad son todos determinantes en sus respectivas relaciones.
179
Una relacin est en forma normal de Boyce y Codd (BCNF), si y solo si todo determinante es una clave candidata.
Esta definicin es ms sencilla que la antigua 3NF puesto que no hace referencia explcitamente a la 1NF, ni a la 2NF, ni a la dependencia transitiva. De acuerdo a esta definicin, las relaciones S, P, SP y C, estn en 3NF, pero tambin en BCNF. Pero la relacin 1NF (ver su diagrama DF) contiene 4 determinantes, s#, p#, ciudad y (s#, p#, fecha), de los cuales solo (s#, p#, fecha) es clave candidata, y por esto que la relacin 1NF n est en BCNF.
180
Tampoco las relaciones en 2NFestn en BCNF porque ciudad es determinante pero no es clave candidata (ver el respectivo diagrama DF). Las relaciones S, P, SP, y C por el contrario, estn todas en BCNF porque en todos los casos la clave principal es el nico determinante en cada relacin. Pero consideremos ahora un caso en que haya varias claves candidatas (sin atributos comunes). Supongamos que en la relacin S cada s# tiene un nombre nico. Entonces el diagrama DF sera:
s# ciudad snombre
181
Ahora, aunque hay varias claves candidatas, los nicos determinantes son dichas claves candidatas, o sea que las nicas flechas son las que salen de las claves candidatas, lo cual significa que la relacin S est en BCNF. Consideremos ahora la relacin estudiante (E) para el caso en que haya varias claves candidatas que se traslapan (que tienen atributos comunes). Supngase que E tiene los atributos cdigo de estudiante (ce), nit (n#), cdigo de carrera (cc) y promedio (p), es decir, E(ce, n#, cc, p). Las claves candidatas son (ce, cc) y (n#, cc). Est E en BCNF? No porque contiene dos determinantes, ce y n#, que no son claves candidatas, pero si se determinan el uno al otro.
182
La relacin E est en 3NF porque ningn atributo no clave es transitivamente dependiente de la clave principal, y el atributo no clave (p) es totalmente dependiente de la clave principal, ya sea (ce, cc) (n#, cc). Sin embargo, E no est en BCNF. Admtase la relacin E con los siguientes datos:
ce
071 071 071 072 072
n# cc
n1 n1 n1 n2 n2 10 11 12 10 13
p
3.7 3.9 3.5 3.8 3.3
183
Puede verse que la relacin E contiene el mismo tipo de redundancias vistas atrs y por lo tanto est sujeta al mismo tipo de anomalas de actualizacin. La solucin es normalizar la relacin E, es decir, descomponer la relacin en dos proyecciones, que en este caso seran las proyecciones Estudiantes (E) y Promedios (P), de la siguiente manera: E(ce, n#) y P(ce, cc, p) o bien E(ce, n#) y P(n#, cc, p). En la siguiente diapositiva se muestran de la relacin E, los diagramas DF, primero en 3NF pero n en BCNF, y segundo en BCNF.
184
ce cc n#
Diagrama DF de E en 3NF pero no en BCNF
ce ce n# cc
Diagrama de E en BCNF
185
12.9 Cuarta Forma Normal (4NF). A veces se presentan en la vida real, relaciones muy singulares, en las cuales no es posible identificar las dependencias funcionales convencionales. Por ejemplo, sea la relacin con los atributos curso, profesor, texto, por lo cual se puede denominar la relacin CPT (curso, profesor, texto). Se puede observar que: Dado un curso, no se puede saber, ni el profesor, ni el texto, porque un curso puede ser dictado por varios profesores y utilizar varios textos. Tambin que, dado un profesor, no se puede saber, ni el curso, ni el texto, porque un profesor puede dictar varios cursos, y utilizar varios textos.
186
Finalmente que, dado un texto, no se puede saber, ni el curso, ni el profesor, porque un texto puede ser utilizado por varios profesores en distintos cursos. Al tabular algunos datos, la relacin CPT no normalizada se vera as: CPT
curso Fsica profesor Rosas Ramos Matemticas Rosas texto Mecnica ptica Mecnica ptica Mecnica Vectores Funciones
187
La nica operacin normalizadora disponible sera aplanar la relacin CPT, de la siguiente manera: CPT
curso Fsica Fsica Fsica Fsica Matemticas Matemticas Matemticas profesor Rosas Rosas Ramos Ramos Rosas Rosas Rosas texto Mecnica ptica Mecnica ptica Mecnica Vectores Funciones
188
Las redundancias que muestra la relacin CPT lleva a anomalas de actualizacin, a pesar de que CPT est en BCNF al ser toda clave. Pero no se puede utilizar DF para descomponer CPT ya que no existen DF. Solo hasta 1977 Ronald Fagin estableci el concepto de dependencias multivaluadas (DMV), con el cual es posible normalizar la relacin CPT. Una DMV es una generalizacin de DF, ya que toda DF es una DMV, aunque no al contrario. En CPT se puede considerar las siguientes DMV:
CPT.curso CPT.profesor CPT.curso CPT.texto
189
La primera DMV significa que aunque un curso no es determinante de un profesor, de cualquier manera un curso determina un conjunto muy bien definido de profesores. De la misma manera se interpreta la segunda DMV.
Una relacin est en 4NF si y solo si est en BCNF y no contiene dependencias multivaluadas (DMV).
Aunque de CPT no se puede eliminar las DMV, s se puede descomponer para eliminar las redundancias y las anomalas de actualizacin.
190
En general, una relacin R(A, B, C) con las DMV, AB, y AC, se puede descomponer sin prdidas en R1(A, B) y R2(A, C). De ah que la relacin CPT se haya descompuesto en las relacioes CP (curso, profesor) y CT (curso, texto), o sea: CT CP
Curso Fsica Fsica Matemticas Profesor Rosas Ramos Rosas Curso Fsica Fsica Matemticas Matemticas Texto Mecnica ptica Mecnica Vectores
Matemticas Funciones
191
Al ir ms all de esta descomposicin, para este caso, se salta a la conversin de cada uno de los atributos de CP y CT en relaciones individuales, cada una, a su vez, con sus propios atributos. O sea las relaciones: C (cursos) con sus propios atributos, P (profesor) con sus propios atributos, y T (textos) con sus propios atributos. Al concebir, en otra alternativa, entidades normales en lugar de relaciones anormales susceptibles de ser descompuestas, el diseo de una BD puede ajustarse mejor a un mundo real compuesto de objetos, ya que una entidad es una aproximacin a un objeto,
192
En el siguiente captulo se tratar el modelo semntico, en el cual se habla de entidades mas no de relaciones, por lo que al modelo semntico tambin se le llama modelo entidad/relacin.
193
Taller 1-12: Analizar las DF de las relaciones Bancos (B), Cuentas (C), Cheques (Ch) y Transacciones (T).
B
nit nombre telefono saldo
C
cuenta# retiros consignaciones saldo nit
Ch
cheque# Valor_ch Fecha_ch cuenta#
T
tr fecha_tr horatr usuatr valortr cheque#
194
Taller 2-12: Analizar las DF de las relaciones Depositarios (D), Contratos (C), Hatos (H) y Ventas (V).
D
cedula nombre_d val_con_d telef_d
C
contra# fechac clasec valorc cedula
H
contra# nombre_h cab_h kilos_h
V
contra# nombre_h fechav valorv cabv kilosv
195
196
Las
198
Una interrelacin es un enlace entre entidades y describe: Asociacin: Oficina y representante Generalizacin: Cliente, representante Agregacin: Pedido y producto (tem), Computador, pantalla y teclado Una interrelacin es representada por flechas y rombos, tringulos y recuadros.
199
Entidad 1
Entidad 2
Entidad 1
vnculo
Entidad 2
Entidad 1
Entidad 2
entidad n
vnculo
grado n-ario
200
201
Una a muchas. Es cuando a cada tupla de una entidad 1 le corresponden varias tuplas de una entidad 2, pero a cada tupla de la entidad 2 le corresponde a lo sumo una tupla de la entidad 1. 1:N
clientes pedidos
Muchas a muchas (grado dos). Es cuando a cada tupla de una entidad 1 le corresponde varias tuplas de una entidad 2, y a cada tupla de la entidad 2 le corresponde varias tuplas de la entidad 1. M:N
clientes productos
202
Muchas a muchas a muchas (grado tres), etc. Es cuando a cada tupla de una entidad 1 le corresponde varias tuplas de una entidad 2 y varias tuplas de una entidad 3, y a cada tupla de la entidad 2 le corresponde varias tuplas de la entidad 1 y varias tuplas de la entidad 3, y a cada tupla de la entidad 3 le corresponde varias tuplas de la entidad 1 y varias tuplas de la entidad 2. L:M:N
clientes repventas
productos
Trabaja en
oficinas
repventas
Es dirigido
clientes
Es hecho por
pedidos
solicita
productos 206
Error frecuente 1: Aunque a veces s es posible considerar un sustantivo como una interrelacin (en este caso pedidos), no se puede dejar una contradiccin como la que se ve entre la lnea verde y la roja
Trabaja en
oficinas
repventas
Es dirigido
clientes
pedidos
productos 207
Error frecuente 2: Tampoco se puede eliminar la interrelacin es atendido por para unificarla con pedidos en una interrelacin uno a muchos a muchos. Una interrelacin uno a muchos a muchos son dos interrelaciones uno a muchos diferentes.
Trabaja en
oficinas
repventas
Es dirigido
clientes
pedidos
productos 208
Error frecuente 3: Si en un modelo E/R aparece un ciclo, no se puede decir que alguno de sus caminos sea redundante sin un previo anlisis de sus cardinalidades para todas las posibles consultas. Analcese el siguiente caso:
1:N clientes (1,1) (1,N)
Es atendido por
(1,1)
repventas (1,1)
1:N
hecho por
(1,N)
pedidos
(1,N)
Tomado por
1:N
Redundante (?)
Redundante (?)
clientes (1,1)
(1,N)
Es atendido por
(1,1)
repventas (1,1)
1:N
hecho por
(0,N)
pedidos
(1,N)
Tomado por
1:N
No redundante
No redundante 209
En el ciclo con redundancia, si el representante de un cliente dado ha tomado pedidos, tal cliente ha hecho pedidos, porque la cardinalidad (1,N)(1,1) obliga a que el cliente siempre tenga al menos un pedido. El camino tomado por y hecho por seran caminos redundantes pues para una consulta se podra obtener la misma informacin por cualquiera de ellos. En el ciclo sin redundancia, si el representante de un cliente dado ha tomado pedidos, no se puede saber si tal cliente ha hecho o no ha hecho pedidos, porque la cardinalidad (0,N)(1,1) permite que el cliente exista sin pedidos. Si el representante de un cliente dado ha tomado pedidos y el cliente ha sido atendido por su representante, no se puede deducir que el cliente haya hecho pedidos, y es necesario el camino hecho por al menos para sta consulta. Siempre es necesario tener mucha cautela con los caminos aparentemente redundantes.
210
S
(1,1)
1:1 (0,1)
S S
(0,1) 1:1
P
(0,1)
SP P
211
S (1,*)
M:1
P (0,1)
212
213
214
(partes)
pnombre Tuerca Perno Birlo Leva Engrane
p# P1 P2 P3 P4 P5
El caso S(1,1)P(0,1) se convierte en dos entidades en donde la entidad referente s permite valores nulos en la clave fornea, pero de valor nico si es no nulo, propiedades stas que le impiden ser clave candidata en S. S
(proveedores)
s# S1 S2 S3 S4 S5 S6 snombre Salazar Jaimes Bernal Corona Aldana Forero p# (nulo o nico) P3 P5 P1 P2 P4 nulls
P (partes)
p# P1 P2 P3 P4 P5 pnombre Tuerca Perno Birlo Leva Engrane
216
El caso S(0,1)P(0,1) se convierte en tres entidades con una entidad referente que permite valores nulos en las dos claves forneas, con valores nicos si son no nulos. S (proveedores) SP S# snombre
S# (nulo o nico) nulls S2 S1 S3 S4 S5 S6 nulls P# (nulo o nico) P3 nulls P1 P2 P4 nulls nulls P5 S1 S2 S3 S4 S5 S6 Salazar Jaimes Bernal Corona Aldana Forero
P (partes)
P# P1 Pnombre Tuerca Perno Birlo Leva Engrane
P2 P3 P4 P5
217
El caso S(1,M)P(1,1) se convierte en dos entidades en donde la entidad con (1,M) es la entidad referente con no nulos en la clave fornea, y adems de valor no nico. S
(proveedores)
s# S1 S2 S3 S4 S5 S6 S7 snombre Salazar Jaimes Bernal Corona Aldana Forero Prez p# (no nulo y no nico) P3 P5 P1 P2 P4 P2 P1
P (partes)
p# P1 P2 P3 P4 P5 pnombre Tuerca Perno Birlo Leva Engrane
Corresponden muchas tuplas de S mnimo 1 a cada tupla de P, y 1 tupla de P exactamente a cada tupla de S.
218
El caso S(0,M)P(1,1) se convierte en tres entidades con la nueva entidad como referente de dos claves forneas. La clave referida a S con un valor nulo nico, y la clave referida a P con no nulo y no nico. S (proveedores) SP
S# (nulo o nico) S1 S2 null S5 S4 S3 P# (no nulo y no nico) P1 P1 P2 P3 P4 P5 s# S1 S2 S3 S4 S5 snombre Salazar Jaimes Bernal Corona Aldana
P (partes)
p# P1 P2 P3 pnombre Tuerca Perno Birlo Leva Engrane
Corresponden muchas ninguna tupla de S a cada tupla de P, y 1 tupla de P a cada tupla de S exactamente.
P4 P5
219
El caso S(0,M)P(0,1) se convierte en tres entidades con la nueva entidad como referente de dos claves forneas. La clave referida a S con un valor nulo nico, y la clave referida a P con nulo pero no nico. S (proveedores) SP
S# (nulo o nico) S1 S2 null S5 S4 null S3 P# (nulo o no nico) P1 P1 P2 P3 null P4 P5 s# S1 S2 S3 S4 S5 snombre Salazar Jaimes Bernal Corona Aldana
P (partes)
p# P1 P2 P3 pnombre Tuerca Perno Birlo Leva Engrane
Corresponden muchas ninguna tupla de S a cada tupla de P, y 1 o ninguna tupla de P a cada tupla de S.
P4 P5
220
El caso S(1,M)P(0,1) se convierte en dos entidades en donde la entidad con (1,M) es la entidad referente con nulos en la clave fornea, y adems de valor no nico. S
(proveedores)
s# S1 S2 S3 S4 S5 S6 S7 snombre Salazar Jaimes Bernal Corona Aldana Forero Prez p# (nulo o no nico) P3 P5 P1 P2 null P4 P1
P (partes)
p# P1 P2 P3 P4 P5 pnombre Tuerca Perno Birlo Leva Engrane
Corresponden muchas tuplas de S mnimo 1 a cada tupla de P, y 1 tupla de P o ninguna a cada tupla de S.
221
El caso S(1,M)P(1,N) se convierte en tres entidades con la nueva entidad como referente de dos claves forneas. La clave referida a S con un valor no nulo y no nico, y la clave referida a P con no nulo y no nico. S (proveedores) SP
s# snombre Salazar Jaimes Bernal Corona Aldana S# (no nulo y no nico) S1 S1 S1 S2 S3 S3 S4 S5 S5 S5 P# (no nulo y no nico) P1 P2 P4 P3 P2 P5 P1 P1 P2 P4 S1 S2 S3 S4 S5
P (partes)
p# P1 P2 P3 P4 P5 pnombre Tuerca Perno Birlo Leva Engrane
Corresponden muchas tuplas de S, mnimo 1, a cada tupla de P, y muchas tuplas de P mnimo 1, a cada tupla de S.
222
Volviendo a nuestro diagrama E/R, ste quedar convertido a tablas, en lo que C. J. Date llama el Diagrama referencial de la siguiente diapositiva. Segn el diagrama referencial del libro, las cardinalidades son las mostradas aqu:
oficinas
(1,N) Dirigida por Es atendido por (0,1)
repventas
(1,N)
clientes
pedidos
(1,N) solicita (1,1)
productos
223
Diagrama referencial
oficinas oficina
ciudad region dir objetivo ventas
repventas num_empl
nombre edad oficina_rep titulo contrato director cuota ventas
Directores
Dirije_a Dirigido_por
clientes num_clie
empresa rep_clie lim_credito
pedidos num_pedido
fecha_pedido clie rep fab producto cant importe
224
isa
repventas
clientes
225
De esta manera, con solo indicar que is a class al crear la tabla personas, y que is a persona al crear tanto la tabla repventas como la tabla clientes, estas tablas (repventas y clientes) heredaran de la tabla personas todos los atributos propios de una persona (como la cdula, los nombres, los apellidos, el telfono, el celular, la direccin, etc. etc.), sin necesidad de declararlos como atributos explcitos en las tablas repventas y clientes. Lo anterior se podra rudimentariamente implementar, si el motor no reconoce herencia, mediante claves forneas en las tablas repventas y clientes haciendo referencia a personas. Para ver la implementacin de la agregacin, analcese el caso de proyectos en una empresa, desarrollados por diferentes departamentos y en donde cada departamento puede estar desarrollando ms de un proyecto. Supngase adems que el departamento financiero no desarrolla proyectos pero si est encargado del control financiero del desarrollo; no del control de cada proyecto ni de cada departamento. Para llevar a cabo este control nombra uno o ms de sus funcionarios para esta tarea. El diagrama E/R para este caso se muestra en la siguiente diapositiva.
226
funcionarios
controla
!?
proyectos
desarrolla
departamentos
funcionarios
controla
proyectos
desarrolla
departamentos
227
La interrelacin entre los rombos controla y desarrolla no es permitida en los modelos E/R. Pero, controla debe convertirse en tabla porque tiene atributos propios como la fecha hasta la que el funcionario asignado tiene la facultad de controlar y el presupuesto general a controlar por cada funcionario. El rombo desarrolla debe convertirse en otra tabla diferente porque tambin tiene atributos propios como la fecha en que cada departamento inici el desarrollo de cada proyecto. El rombo desarrolla se convierte a una tabla que tiene como claves forneas la clave primaria de la entidad proyectos y la clave primaria de la entidad departamentos. El rombo controla queda interrelacionado al recuadro entero (una entidad compuesta), y no meramente al rombo desarrolla. Por lo tanto, el rombo controla se convierte a una tabla que tiene como claves forneas la clave primaria de la tabla desarrolla, y la clave primaria de la entidad funcionarios.
228
controla Control#
Cedula Desa# Presup Hasta
proyectos Proy#
Nombre Valor
desarrolla Desa#
Proy# Dep# Inicio
departamentos Dep#
Nombre Telefono
229
Aunque es posible que la interrelacin desarrolla tenga como clave primaria la concatenacin de Dep# y Proy# (las claves primarias de la entidades interrelacionadas), aqu se prefiere que la clave primaria de desarrolla sea un nmero consecutivo (Desa#) para cada desarrollo. As los atributos Dep# y Proy# como claves forneas en desarrolla quedan en libertad para poder tomar valores nulos o no nicos si las reglas del negocio as lo demandaran. Similarmente, aunque la interrelacin controla podra tener como clave primaria la concatenacin de (Dep#, Proy#) a la sazn clave primaria de la entidad compuesta desarrolla, y Cedula clave primaria de la entidad funcionarios, aqu se prefiere que la clave primaria de controla sea un nmero consecutivo (Control#) para cada control. As los atributos Desa# (que es Dep# y Proy#), y Cedula como claves forneas en controla quedan en libertad para poder tomar valores nulos o no nicos si las reglas del negocio as lo demandaran.
230
231
Considerando cada tabla obtenida tras la conversin del modelo E/R a tablas, cada una de tales tablas debe ser verificada individualmente y conjuntamente para asegurar un grado de normalidad al menos hasta Boyce & Codd. Individualmente verificando que las dependencias funcionales de los atributos de cada tabla sean las permitidas, y solo las permitidas, con respecto a su clave primaria. Adicionalmente debe ser verificado el hecho por el que cada uno de sus atributos debe ser mantenido por obligacin dentro de sus dominios permitidos. Conjuntamente verificando que los valores de sus claves forneas sean los permitidos con respecto a las claves primarias de las dems tablas con las que se interrelaciona cada tabla en particular, segn las restricciones de la integridad referencial. Pero tambin verificando que los valores de sus claves forneas sean los permitidos segn la cardinalidad de cada una de sus interrelaciones.
232
Taller 1-13. Se desea construir una Base de datos para llevar los asuntos acadmicos de una universidad. Las siguientes son las reglas acadmicas (conocidas en general como reglas del negocio):
Un estudiante cursa semestralmente diversas materias, an de distintas carreras. Por cada materia de cada carrera tiene una nota que debe permanecer en la Base de datos hasta que el estudiante se grade. Ya matriculado, en general a cada estudiante le dictan clase diversos profesores, de diferentes materias, en distintos das, a diferentes horas y en distintos salones, a travs de cursos.
13. Modelo semntico. 233
As mismo, un profesor pertenece a una sola escuela (o carrera) pero puede dictar varias materias a muchos estudiantes en distintos das, a distintas horas y en distintos salones, es decir, que cada profesor puede dictar varios cursos. Un curso es vigente solo por un semestre pues, una vez actualizada la Base de datos con las diferentes actas de notas, el cuso desaparece para permitir la creacin de nuevos cursos en el siguiente semestre. Cada materia es ofrecida por una sola escuela segn su pensum, pero puede ser dictada por distintos profesores, a muchos estudiantes, en el mismo o en diferentes das, a la misma o a diferentes horas y en el mismo o en diferentes salones: O sea que, una materia puede ser ofrecida en varios cursos pero sin ninguna interferencia.
13. Modelo semntico. 234
Para que un estudiante pueda matricular una materia, l debe cumplir distintos requisitos, unos son otras materias, y otros son crditos cursados. Un materia puede ser requisito para varias materias, y una materia puede tener varias materias como requisitos. Estrategia: Si el requisito son crditos, el cdigo del requisito puede ser menor o igual de
400, y si es una materia el cdigo del requisito es el cdigo de la materia y ser mayor de 400.
En cada saln, en un da especfico, a una hora especfica, solo se puede dictar una materia. Sin embargo, pueden ser dictadas diferentes materias, por el mismo o por diferentes profesores, a muchos estudiantes, siempre y cuando el da y/o la hora sean distintos. Lo cierto es que al finalizar cada semestre todos los salones deben quedar libres y disponibles para el siguiente semestre. Finalmente, a una hora especfica en un da especfico un saln ..
13. Modelo semntico. 235
puede estar libre u ocupado, pero en este caso lo estar por un solo profesor quien estar dictando una sola materia a varios estudiantes. Con todo, a una hora especfica en diferentes das, habr muchos salones ocupados por muchos estudiantes asistiendo a cursos de diferentes materias dictados por diferentes profesores.
1. Construir el diagrama E/R 2. Convertir las entidades resultantes en el diagrama a relaciones (normales) con atributos y claves. 3. Crear las tablas correspondientes a las relaciones. 4. Actualizar la Base de datos con las matrculas, teniendo en cuenta los requisitos de cada materia y la pertenencia del estudiante a la escuela.
13. Modelo semntico. 236
5. Actualizar la Base de datos con las notas definitivas de las distintas materias cursadas, re calculando el promedio ponderado y los crditos cursados. 6. Eliminar los estudiantes cuyo promedio ponderado sea menor de 3.2 por tercera vez consecutiva. 7. Listar los estudiantes cuyo promedio ponderado haya sido mayor a 4.5 8. Producir los polgrafos.
237
empleado
carrera
trabajador
tiene
estudia
pensum
da
hora
saln
profesor
estudiante
tiene notas
materias requisito
carrera da currcula hora saln profesor estudiante notas materias requisitos pensum
cursos
239
Taller 2-13. Reglas del negocio de una librera Una librera desea desarrollar su propia Base de datos. Los libros estn dispuestos en estantes por temas. Cada estante est rotulado con el nombre del tema de los libros que alberga, el cual es fcilmente visible a simple vista. En dicha librera se sabe que una editorial usualmente publica muchos libros sobre diferentes temas y de diferentes autores. Sin embargo, de un mismo tema pueden escribir muchos autores de diferentes editoriales y por lo tanto pueden existir muchos libros de un tema determinado. Por otra parte un libro solo trata de un tema especfico y es editado por una editorial especfica, aunque puede ser
13. Modelo semntico. 241
escrito por varios autores. Del mismo modo, un autor puede escribir muchos libros sobre diferentes temas y an en diferentes editoriales. 1. Construya a partir de estas reglas un modelo E/R. 2. Convierta a tablas el modelo obtenido, proponiendo usted los atributos que debe contener cada relacin. 3. Cree las tablas de esta Base de datos. 4. Pueble la Base de datos obtenida. 5. Liste los libros de cada editorial en orden alfabtico del nombre de libro, indicando el nombre del autor.
242
Las reglas generales se refieren a la validez de las interrelaciones entre las entidades de un modelo E/R, o sea, a la correspondencia entre las claves primarias y las claves forneas de las respectivas tablas de una BD.
Que la cantidad despachada no sea mayor que la existencia. Que el mes sea uno de los valores alfanumricos 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11 o 12. Que el nombre del cliente sea alfanumrico de diez caracteres y no pueda ser ignorado, o sea, char (10) not null. Etc.
Muchas son las reglas de integridad especficas las cuales se codifican en la descripcin de las tablas con create table como restricciones de dominio. Con SQL2 se usa la clusula check como se ilustra en el siguiente ejemplo: Create table empleado ( edad smallint not null check (edad >=18); El conjunto de las reglas especficas o restricciones de dominio puede ser distinguido aqu como la regla 0 y puede ser enunciada as:
245
Regla 0: Los valores de cualquier atributo de una BD siempre deben ajustarse a su correspondiente dominio.
246
cursos
profesor
escuela
247
Cada flecha significa que existe una clave fornea en la entidad de la cual sale la flecha, que hace referencia a la clave primaria de la entidad a la cual apunta la flecha. A diferencia de una clave primaria, una clave fornea si puede tomar valores nulos si la cardinalidad expresada en las reglas del negocio consideran la opcionalidad. Pero si el valor de una clave fornea es no nulo, debe ser idntico al valor de la clave primaria de alguna tupla en la entidad referida. La entidad referida y la referente pueden llegar a ser la misma entidad, y entonces se le llama una entidad autorreferencial. Este es el caso de los representantes y sus directores para la empresa distribuidora de pedidos. A veces, la clave fornea puede simultneamente componer la clave primaria en la relacin que la contiene. Por ejemplo, en la relacin SP, s# y p# son ambas claves forneas y simultneamente componen la clave primaria (s#, p#). Pero a menudo, la clave fornea es distinta de la clave primaria, como en el caso de la agregacin de atrs con la relacin desarrolla en donde la clave primaria fue Desa#, y las claves forneas Dep# y Proy#.
248
Las claves forneas que no constituyen la clave primaria tienen toda la libertad para que sus dominios incluyan valores nulos o repetidos y as puedan reflejar con mayor exactitud las reglas del negocio. Observe tambin que, una relacin dada puede contener muchas claves forneas. En general, si en una interrelacin hay n entidades participantes, la entidad de la interrelacin contendr n claves forneas. Sean las relaciones R1, R2, , Rn-1, Rn, tal que existe una restriccin referencial de R1 a R2, otra de R2 a R3, y otra de Rn-1 a Rn produciendo el diagrama referencial: R1R2 R3 Rn-1 Rn. La sucesin de entidades y flechas desde R1 hasta Rn representa un camino o ruta referencial de R1 a Rn. En un diagrama referencial puede haber muchas rutas referenciales en las que las claves forneas deben concordar con las claves primarias. Entonces, la regla 2 dice: Regla 2: Una Base de datos no puede contener valores de clave fornea sin concordancia.
249
O sea, si R1 hace referencia a R2, R2 debe existir. Y si R2 va a ser eliminada (delete), R1 debe impedirlo, eliminarse tambin o, poner nulos en su respectiva clave fornea, segn sea la cardinalidad expresada en las reglas del negocio, para mantener la integridad referencial. El mismo cuidado hay que tener al hacer inserciones (insert) y modificaciones (update), para mantener la concordancia entre claves forneas y claves primarias. Pero quin debe tener cuidado al realizar operaciones con las claves forneas? Lo ideal es que el control est a cargo del DBMS y no del sujeto programador, aunque ste debe dar al DBMS las indicaciones adecuadas. As, el DBMS debera entender por si solo, que al cancelar una cuenta corriente, por ejemplo, los cheques girados posteriormente buscando ser insertados, deben ser rechazados. O que si un cliente cancela su deuda total, el DBMS debe eliminar (delete) automticamente y en cascada todas las facturas pendientes de dicho cliente.
250
Entonces, el usuario debe cuestionar por cada clave fornea, cuales operaciones (insert, delete o upadate) han de rechazarse, y cuales han de aceptarse y con qu operaciones de compensacin si es el caso. Por ejemplo Insertando una tupla, puede aceptar nulos su clave fornea? Esto se sabra revisando la cardinalidad y los valores posibles para las claves forneas. Y Qu debe suceder si hay intento de eliminar una tupla referida por una clave fornea? Al analizar este caso, hay tres posibilidades de eliminacin: Eliminacin restringida (restricted), si el delete a la tupla se puede realizar solo si no existen otras tuplas que en sus claves forneas la referencien. Si existen se rechaza. Eliminacin propagada (cascade), si el delete a la tupla se propaga (en cascada) eliminando tambin las tuplas que hacen la referencia. El programador no necesita as codificar sucesivos deletes. Eliminacin anulada (set null), si el delete a la tupla se permite pero asignando nulos a las claves forneas. El programador no necesita codificar sucesivos updates.
251
Y Qu debe suceder si hay un intento de modificar la clave primaria referida en una clave fornea? Una vez ms hay tres posibilidades como en la eliminacin. Modificacin restringida (restricted): Solo podr estar permitida la modificacin si no est referida, pero se rechazar si lo est. Modificacin en cascada: La modificacin se propagar (en cascada) modificando tambin la clave fornea. Modificacin anulada (set null): Se asignarn nulos a la clave fornea.
Observe que la respuesta a cada pregunta depende de lo que expresen las reglas del negocio en la organizacin que se est modelando. Para responder cada pregunta, en DDL se considera la siguiente sintaxis de create table:
create table foreign key (clave) references tabla objetivo on delete efecto on update efecto
En donde el efecto puede ser no action o sea restricted, cascades o set null.
252
Por ejemplo:
create table facturas (factura# char(5) not null, fecha date not null, valor number(9) not null, cedula# char(10) not null, primary key factura#, foreign key (cedula#) references clientes on deletes cascades on update cascades);
Las anteriores preguntas tambin se pueden responder con DML si su respuesta no fue clara al momento de describir las tablas con DDL. Para responder cada pregunta con DML, particularmente si la operacin es restringida por una condicin, se utilizan las afirmaciones o asertos (assert) y los disparadores (trigger), cuya sintaxis es:
create assertion nombre del aserto check condicin;
Ejemplo para asegurar que el objetivo de cuota de cada oficina no supere la suma de las cuotas de sus representantes:
create assertion cuota_valida check (oficinas.objetivo <= sum(repventas.cuota) and repventas.oficina_rep = oficinas.oficina);
Ejemplo para asegurar que el total de los pedidos de cualquier cliente no supera su lmite de crdito.
create assertion control_pedidos check (clientes.limite_credito >= select sum(pedidos.importe) from pedidos where pedidos.clie = clientes.num_clie);
Los asertos describen restricciones que pueden definirse como diferidas al fin de cada transaccin aunque inicialmente sean declaradas inmediatas, o al contrario. No obstante, tales caractersticas pueden ser modificadas dinmicamente con la instruccin set constraints.
254
Por ejemplo, supongamos que la anterior asercin sea declarada diferible al terminar una transaccin pero inicialmente inmediata:
create assertion control_pedidos check (clientes.limite_credito >= select sum(pedidos.importe) from pedidos where pedidos.clie = clientes.num_clie) deferrable initially immediate;
Esta restriccin ser procesada automticamente instruccin por instruccin (lneas negras) pero despus del set constraints control_pedidos deferred ser procesada diferida (deferred) al terminar la transaccin (lneas rojas), inmediatamente despus del commit.
Commit;
255
Los trigger son fragmentos de cdigo que se ejecutan en forma implcita con la ejecucin de un insert, de un update o de un delete sobre una tabla. Aunque los conceptos de los trigger son muy consistentes de unos motores a otros, sus particularidades sintcticas si varan bastante de un motor a otro. Para oracle, su sintaxis es la siguiente:
create [or replace] trigger
nombre del trigger
Suponiendo definidas las tablas cursos (C), estudiantes (E) y matriculas (M), veamos el trigger para actualizar los atributos total_matriculas y total_crditos matriculados en cada curso, creando el curso si no existe, cada vez que se inserte, se actualice o se borre una tupla de matriculas. Tambin se asume C(1,*)E(1,*) como cardinalidad.
Cursos (C)
cod_c total_matriculas total_creditos
create or replace trigger actualiza_cursos after insert or delete or update on M declare cursor c_Totales is select cod_c, count(*) totalmatriculas, sum(creditos) totalcreditos from M group by cod_c begin for v_Totales in c_Totales loop update C set total_matriculas = v_Totales.totalmatriculas total_creditos = v_Totales.totalcreditos where cod_c = v_Totales.cod_c; if sql%notfound then insert into C (cod_c, total_matriculas, total_creditos) values(v_Totales.cod_c, v_Totales.totalmatriculas, v_Totales.totalcreditos); end if; end loop; End actualiza_cursos;
257