herramientas os/2 - epbcn · bases de datos relacionales no . novedades en versión 2.1 2:/2 ibm...
TRANSCRIPT
HERRAMIENTAS OS/2
Bases de datos relacionales no .
Novedades en
versión 2.12:/2
IBM DATABASE 2" v.",""
forOSf2° ~ )
Hace relativamente poco que ha aparecido en el mercado la versión 2.1 de DB2/2.
DB2/2 es la versión para OS/2 de DB2, la conocidísima base de datos relacional de IBM, líder
absoluto en el mercado mundial de bases de datos relacionales. En este artículo, basado
en nuestro contacto con la beta de junio de este producto y con la versión final,
examinaremos algunas de las novedades que la nueva versión aporta.
DB2 (DataBase 2) es la implementación SQLde IBM. Hay versiones para OS/2, para sistemas Unix (actualmente AIX, HP-UX ySolaris), para OS/400, y para mainframes
en VSE, VM y MVS. Las distintas versiones están convergiendo, de modo que se habla de un common serverpara OS/2 y las plataformas Unix (la mayoría del código es el mismo). El hecho de que el mismo producto estédisponible en varias plataformas permite un nivel deescalabilidad casi ilimitado: es posible escribir una aplicación en un ordenador Jntel de prestaciones relativamente limitadas, convertirla automáticamente en cliente-servidor sin más que añadir nodos de LAN, migrar aun sistema Unix cuando las posibilidades de un servidorJnte! empiecen a agotarse, e ir aumentando así sucesivamente la capacidad del servidor hasta un super-mainframe con sistema MVSIESA, que admite decenas demiles conexiones simultáneas, sin necesidad de tocar niuna sola línea de la aplicación ni de nuestra base dedatos.
OS/2 dispone de bases de datos relacionales desde laversión 1, donde se podía adquirir OS/2 como StandardEdition, que constaba sólo del sistema operativo base,o como Extended Edition, que incluía además soporte
para comunicaciones SNA (Communications Manager)y bases de datos SQL (Database Manager). La versión2 separó los componentes propios de la Extended Editionde la versión 1 en un paquete llamado Extended Services;a continuación, estos componentes empezaron a venderse por separado; es allí donde aparece por primeravez DB2/2 como producto independiente. La última versión ampliamente distribuida antes de la que nos ocupaes la versión 1.2.
José María Blasco
José María E/asco, nacido en 1960, es Licencíado en Matemáticaspor la Universidad de Barcelonn. Ha sido profesor de Programación enla Facultad de Infonnática de Barcelona, y Coordinador Nacional de la.
red EARN en Alemania. Sus temas de interés más recientes son lasredes, la programación orientada a objeto, las bases de datos, y toda lo
relacionado con OS/2. Su direcciónlntemet [email protected].
Francesc Rosés
Francesc Rosés. nncido en Barcelonn en 1958, es licenciado enFilología Catalana por la Universidad de Barcelona. Desde 1985 desarrolla en el Centre dÍnjormiltica de la Universitat de Barcelonn (ClUB)la coordinación iliformárica de diversos proyeClos de lexicografia com-
putacional. Profesor del Máster de Lingüistica Aplicada de laUniversidad de Barcelona. Desde 1994 es el responsable de la sección
de Microinformárica del ClUB. Su direccián lnternet [email protected].
RPP Nº 16
37
La comunicación entre clientes y servidoreses posible utilizando cualquierade los protoc~los más comunes
HERRAMIENTAS OS/2
DB2 2.1 no es sólo un nuevo release de DB2, sino una nueva versión,y se nota. El procedimiento de instalación utiliza el software installer haciael que están convergiendo todos losproductos IBM. Una instalación completa del servidor coloca 44 megas enel directorio SQLLIB, contra 9 MBpara la versión 1.2. La nueva carpetade información de DB2 contiene 10libros (books en formato .INF) en vezde los 3 de la 1.2; los nuevos librosson absolutamente exhaustivos. Seincluye también una carpeta con todaslas utilidades necesarias para accedera DB2 desde Windows (directamente,o mediante aplicaciones que utilicenODBC), También es posible gestionarel servidor mediante SNMP, para loque se incluyen iconos para activar ydesactivar el agente SNMP para DB2.
Novedadesen la administraciónLos usuarios de DB2/2 1.2 se encontrarán con una sorpresa: QueryManager ha desaparecido. Y es unalástima: aunque Query Manager estaba bastante anticuado, y no soportaba las adiciones más recientes a DB2/2,era bastante práctico para tener unapanorámica de la estructura de la basede datos, o para crear y manipulartablas. Con la nueva versión se hacenecesario guardar cuidadosamente lasdefiniciones SQL de nuestra base dedatos (probablemente en ficherosASCII), para poderlas revisar y cambiar cuando lo deseemos. Otra alternativa es utilizar el producto de IBMVisualizer Query, que no revisamosaquí, y del que sólo diremos que ofrece un nivel de integración con el
-Workplace Shell de OS/2 y una capacidad de administración de DB2 que
alcanza niveles simplemente impresionantes, o la versión más reducida,Visualizer Flight, que está actualmente en beta gratuita disponible enInternet. Otra posibilidad es administrar nuestras bases de datos con laayuda de las herramientas especializadas que se incluyen en las versionesavanzadas de Vispro/REXX oVX'REXX.
Las diferentes utilidades de administración presentes en la versión 1.2(CONFIG.EXE, RECOVERY.EXE yDIRECT.EXE) han sido substituidaspor una nueva herramienta unificada,llamada Database Director, que esmucho más potente y general, aunquela encontramos bastante lenta en estaversión.
La comunicación entre clientes yservidores es posible utilizando cual-
quiera de los protocolos más comunes: APPC (que es parte de SNA),IPX/SPX (mediante la ayuda de unservidor Novel! Netware que actuarácomo router), NETBIOS (nativo, osobre IP), y TCP/IP (nuevo en esta versión). Una vez instalado el software,habrá que indicar cuáles son los protocolos mediante los cuales deseamosque nuestro servidor sea accesible. Estose hace añadiendo una línea al CONFIG.SYS, por ejemplo:
SET DB2COMM=NETBIOS,TCPIP
Esta línea indica que entre todoslos protocolos posibles, elegimos quenuestro servidor sea accesible simultáneamente mediante NETBIOS yTCP/IP (esta información está bastante escondida en los manuales delCD-ROM). La adición de TCP/lP esmuy importante, porque permite, porejemplo, publicar servidores de DB2
RPP Nº 16
38
en Internet, o instalarlos en MANs yWANs que sólo soporten IP sin tenerque añadir NETBIOS sobre IP, comoera necesario hasta ahora.
En cuanto a la ubicación física delas bases de datos, DB2 ofrece ahorados posibilidades: podemos dejar alsistema la responsabilidad de escogerel lugar de almacenamiento de losficheros que implementan nuestra basede datos (como en la versión 1.2, sólonecesitaremos entonces especificar launidad lógica en la que se va a guardar la base de datos), o bien podemosdefinir una serie de espacios de tablas(tablespaces) en la misma o diferentes unidades lógicas, para decidir después dónde queremos almacenar nuestras tablas o índices.
Si optamos por esta última posibilidad, el nivel de control del almacenamiento físico es muy grande: cadatablespace puede consistir en un numero arbitrario de directorios, posiblemente distribuidos en diferentes unidades, y para cada directorio podemosindicar al sistema una estimación delcoste de acceso (tiempo de acceso,transferencia media por segundo, ete.),que será utilizada por el optimizadorde DB2 al elegir la distribución de losdatos. A continuación, para cada tabladefinida, podemos indicar el tablespace en el que se va a almacenar, indicando si lo deseamos diferentes tablespaces para los índices o para losobjetos largos (BLOBs, CLOBs yDBCLOBs, de los que hablamos másadelante). De este modo, si contamoscon un servidor con varias unidades dedisco duro SCSI, para las cuales esposible la entrada y salida simultáneadesde varias unidades, es posible distribuir, por ejemplo, las diferentestablas de un join muy utilizado en discos distintos, de modo que los datosdel join se carguen en paralelo; o podemos poner los índices de una tabla enun disco y los datos en otro, de modoque el acceso al índice y a los datosasociados pueda ejecutarse simultáneamente, etc. En resumen, en esteaspecto el nivel de control permitidoes similar al de los grandes sistemas
HERRAMIENTAS OS/2
Figura A DB2 incluye soporte integrado paraWindows y ODBC
zando SU forma entrecomillada (es decir, reproduciendo exactamente su secuenciade mayúsculas, minúsculas,espacios en blanco, etc.):
Create Table T ("Columna "Integer, uCoLuMnP~2n Floü~)
Crea una tabla con doscolumnas llamadas exactamente "Columna 1" (con blancos en medio), y "CoLuMnA_2" (con la combinaciónmostrada de mayúsculas y
minúsculas).
Cláusula AS en la instrucción
SELECT
Select DlA, Max (VALOR) AS ;'lAXlMO From ...
Cuando una de las columnas de unselect en DB2/2 1.2 era una expresión,DB2 asignaba automáticamente a lacolumna del resultado un nombre,normalmente COLn, donde n era elnúmero de columna. Con DB2/2 2.1,podemos indicar mediante la cláusula AS de la instrucción select cuál es elnombre de la columna:
expresión-cornún-de-t?-blaSELECT
Expresiones comunes de tabla
es un select cuyo resultado es una tablacon dos columnas, de nombre DIA yMAXIMO. Aquí también es posibleutilizar identificadores entrecomillados. Y el mecanismo es válido paradefinir vistas, que pueden tener así losnombres de columna que deseemos. Esespecialmente interesante combinaresta posibilidad con el uso de funciones incorporadas para obtener directamente selects y vistas que con la versión anterior de D B2 requerían de unamini-aplicación.
Las expresiones comunes de tabla(common-table-e~pressions)permitenla definición local de tablas auxiliares dentro de una instrucción selecto Lasintaxis es:
Logolf
I~~l ...LeganCommandLine Processar OOBCltlstallar OientSetup
y objetos largos. Examinaremos estosdos tipos de extensiones separadamente.
Funciones
Extensiones de usabilidad
CAST ( micalumna_entera AS FLOAT)
DB2/2 2.1 incorpora gran cantidadde funciones, además de permitir alusuario definir las suyas propias. Estosignifica que gran parte del formateonecesario de los datos puede realizarlo el servidor, y que, mediante el usode vistas escogidas cuidadosamente,podemos presentar al usuario la información de modos mucho más sofisticados que en las versiones anteriores.Además, disponemos de la construcción CAST, que permite la conversiónexplícita de un tipo a otro, y que ilustramos con un ejemplo:
Identificadores entrecomillados
DB2/2 2.1 permite el uso de identificadores entrecomillados en la mayoría de los lugares en los que sintácticamente se requiere el uso de unidentificador. Los identificadoresentrecomillados pueden contener mayúsculas y minúsculas (que se respetan), caracteres especiales, y espaciosen blanco. Esto permite asignar nombres más significativos a, por ejemplo, las columnas de una tabla o unavista, pero también nos obliga a referirnos siempre al identificador utili-
REAOME
~ Wmdows Support - Vista de Iconos
B ~06211'l1oml3:ÍiJn W~SuppOl1: 1M!zII.000UtI.ly Co,1\fnondLMP/'OCOl:o;OI REAOME $te.1DB2
I ' ~ 'u\'StM SNl-IP SuboQ&n\ S10p SNMP Sub~enl ClilJI'lI S41fUp D~ Otr&aor R«overy Job. ~"'I S~'I
de bases de datos de un mainframe, pero sin obligar anadie: si se desea, todo el trabajo lo realiza DB2, escogiendo por nosotros valorescorrectos para nuestra basede datos.
El sistema de backup hacambiado también bastante:en vez de realizar los backupsdirectamente a una unidadlógica, como en la versión 1.2(lo cual obligaba muchasveces a utilizar trucos de redmecliante NET USE o MAP para poderhacer backups a unidades de discoduro), ahora los backups se realizandirectamente a un directorio o a undispositivo (como una unidad decinta). Los backups son extensivos, yocupan mucho espacio, incluso parabases de datos pequeñas. El truco está,si deseamos transportarlos en disquete, en hacer previamente un ZIP deldirectorio de backup. Por ejemplo, labase de datos SAMPLE ocupa unos 8MB, pero comprimida ocupa sólo 0.5MB Ycabe perfectamente en un disquete.
El lenguaje SQL implementado por laversión de DB2/2 que estamos examinando ha evolucionado de formamuy notable desde la versión 1.2, ylo ha hecho al menos en dos direcciones clave: por una parte, al implementar numerosas extensiones quepodríamos llamar de usabilidad, quepermiten obtener salidas más claras,realizar con mucha facilidad tareasque antes eran complejas o requerían el uso de pasos intermedios (comola creación de tablas auxiliares), odescargar la aplicación en favor delservidor, al implementar nuevas funciones incorporadas ejecutables directamente por el servidor y, por otraparte, al incluir toda una serie deextensiones objetuales, como los tiposdefinidos por usuario, funciones definidas por el usuario, triggers, checks,
Novedades en el lenguajeSal
RPP Nº 16
39
HERRAMIENTAS OS/2
donde una expresión común de tablatiene la forma
nombre-de-tabla [(columna[,columna ... )'1 AS linstrucción-selectl
Supongamos, por ejemplo, quetenemos una tabla VALORES con doscolumnas, DIA y VALOR; para cadaDIA disponemos de varios VALORes.Deseamos construir un select que nosentregue, para cada DIA, el máximoyel mínimo VALOR. Podemos escribirlo elegantemente así:
\1ITHI.axirr:.os AS
(Select Dia, MaxlValorlAs Maximo From Valores Group By Dial,
l~inimos ."SISelec~ Dia, Min(Valor)
As Mini. o F'rem Valores Group By :.lia)SELECT ~axim s.Dia, Maximos.Maximo,Minimos.HinimoFROl·: Maxirnos, Mi irnosoffiERE Max·mos.Di = Min~mos.Dia
El ejemplo nos permite observarque las expresiones comunes de tablapueden ser objeto de todas las manipulaciones propias de una tabla normal. A efectos de la instrucción select,esas tablas existen con el mismo rangoque cualquier otra tabla, pero se creany se destruyen dinámicamente en elámbito de su ejecución. De hecho, lastablas se crean por orden de aparición, de modo que si escribimos WITHectl, ect2, ect3 SELECT. .. , donde ectison expresiones comunes de tabla,ect2 puede hacer referencia a ectl, y
ect3 a ectl y ect2.
Éxpresiones CASE
Las expresiones CASE permitencalcular un valor como el resultado de calcular una expresión uotra según se cumplan determinadas condiciones. La expresión
AIB
da un error de desbordamiento siB es O. Si el problema que nosplanteamos requiere substituir laexpresión por Osi B=O, en DB2/21.2 nos vemos forzados a escribir
SEL CT AIB FROM ... WHERE B <> oUN IONSELECT o FROM ... WHERF. B = o
lo cual es poco claro. Con DB2/2 2.1podemos escri bir
SELECTCl\SE
'tIREN B <> o 'rHEN i'./B
ELSE oEND
FRQt.1 ...
que está mucho mejor. Otro ejemplo es
CASEWHEN A < B THEN 'Menor'WHEN A > B THEN 'Mayor'ELSE 'Igual'
END
Restricciones ("constraints")
Las restricciones son condiciones asociadas a una tabla que limitan losvalores de una columna o de toda lafila a cumplir determinado conjunto de condiciones. Permiten implementar hasta un cierto punto la integridad de dominio, cuando se aplicana una sola columna, y definir condiciones estructurales para las tuplas ofilas de la tabla cuando se aplican avarias. Veamos unos ejemplos:
Create T ble T (DIA Integer Check (elABe "'Jeen 1 And 31), ... )
define una columna DIA de tipoINTEGER que sólo podrá tener valores entre 1 y 31; si intentamos ejecutar una instrucción INSERT oUPDATE que cambie el valor de DIAen alguna fila a un valor que no estéentre 1 y 31, la instrucción fallará.
DB2 Infarmatioll - Vlsta de iconos
Aclministration Guide Commond Reference CPI-C Return Codesand APPC Sansa Dala
Datobose System Monitor Glossary lnformation and Master IndaxGuide 8.nd Reference Cancepts Guida
Message Reference Problem SOL ReferenceOetermine.~on Guide
Figura B La carpeta de ¡n"formación deDB2 es muy completa
RPP Nº 16
40
Crea~e Table T (t.ipidos FloatP..GS Float,AG.' Float,.l;GE' Flo t,
Constrainc Acidos_Grasos CheckIAGS+AG'P+AGt'l <= Lipidos)}
obliga a que cualquier fila cumpla lacondición de que la suma total de losácidos grasos no sea superior a la cantidad de lípidos. La restricción tieneun nombre ("Acidos_ Grasos"), ypuede ser objeto de manipulación (p.ej. "ALTER TABLETDROPCONSTRAINT Acidos_Grasos"). Si intentamos añadir una restricción a unatabla y existe alguna fila que no laverifica, la instrucción de añadido falla.
Las restricciones sólo pueden referirse a las columnas de una fila de latabla a la que se aplican; si se deseaimplementar condiciones más complicadas, deberemos recurrir a los triggers, explicados más adelante.
Extensiones objetuales
Las extensiones que hemos llamadode usabilidad son especialmente útiles para el usuario "clásico" de DB2:son un conjunto de extensiones naturales al DB2, que lo hacen muchomás potente, y con toda seguridadmás de un usuario habrá anticipadosu creación al preguntarse por quéno se implementaron antes. En cambio, las extensiones objetuales (objetos largos, y tipos y funciones definidos por el usuario) están destinadas
a abordar un nuevo tipo de problema.
Por ejemplo, multimedia: interesa poder almacenar en bases dedatos relacionales campos de tipoimagen, audio o vídeo, de modoque la información sobre un objeto multimedia (por ejemplo autor,tamaño, y fecha) esté almacenadajunto con el propio objeto.
Los datos podrán guardarse enla base de datos si admitimos unaextensión al SQL que permita elalmacenamiento de objetos largos.Pero almacenar los datos no es suficiente, pues -además de las con-
HERRAMIENTAS OS/2
TCP/IP
~ System dalabase directory
~ Nade directory
.. Database connection services direclOry
malmente utilizables sobre integer noestán disponibles (a menos que lashabilitemos manualmente mediantefunciones definidas por el usuario).De este modo, no será posible calcular Max(Alumnos.ID), lo cual tienebastante sentido.
¡¿¡rector ~.::~c..!!.d:..-.,;Y.",jew"-,!!=::e",-Ip"",-,"""",-"""",,,,,,,,__
B D Database managers
~ Local database direclory
Figura e La nueva herramientade admini~tración, el Databa~eDirector, muy potente y completopero algo lento
Databases
Las funciones definidas por e! usuariotienen dos usos fundamentales: permitir que un tipo de datos creado pornosotros vea alguna de las funcionesincorporadas (por defecto no ve ninguna, como hemos explicado), y realmente definir nuevas funciones, aplicables a uno o más valores, ya sean detipos definidos por el sistema o de tiposdefinidos por el usuario. Esto último se
Funciones definidas por el usuario
Figura D El cliente puede acceder a ~er"
vidore~ (nodo~) utilizando diferente~ prolocolo~ de comunicacione~
IEIMSRV
Commenl c= _~Local
:,jAPpe
.:.; IPX/SPX
• t"iETBios~ uTCP/IP
Tipos definidos por el usuario
Los tipos definidos por el usuario(user-defined types) permiten partirde un tipo definido por el sistema ycrear un nuevo tipo, con un nombredefinido por nosotros; SQL tratará apartir de entonces e! nuevo tipo comoun tipo más, permitiéndonos crearcolumnas de ese tipo, y además realizará verificaciones strongly-typedsobre los valores correspondientes.
Supongamos, por ejemplo, quedeseamos construir una tabla de alumnos y otra de cursos, ambas con claves primarias enteras. Definiremosprimero dos tipos:
de! servidor al cliente puede ser muycostoso, y que en muchos casos sólointeresa obtener una parte del valor,DB2/2 2.1 implementa el concepto delocalizador LOB, que permite obtener un apuntador al valor de un objeto grande y utilizar después ese apuntador para efectuar operaciones sobreel valor, obteniendo al final sólo laparte resultante de la operación, queposiblemente será mucho más pequeña que e! valor inicial, y por tanto cargará menos la máquina cliente. Porejemplo, un BLOB que sea un vídeopuede fácilmente ocupar muchos MBde memoria, pero si pedimos sólo undeterminado frame la memoria requerida es mucho más pequeña.
A continuación podemosdefinir las tablas:
... )
. .. )
Create Table Alumnos (ro Alumno,
Create Distinc~ 'fype ALm~,o asIl,rrEGER Tl'Jith ComparisonsCreate Distinct Type CURSO asINTEGER With Comparisons
Create Table Cursos (ID Cu~so,
en las que hemos utilizadoalumno y curso como tipos,respectivamente, en vez de integer. De este modo, si intentamos comparar Alumnos.IDcon Cursos.ID, el sistema detectará el error a nivel sintáctico.Además, las funciones nor-
sultas SQL usuales- hemos de poderconsultar los valores de esos camposen cuanto a su subestructura. Poiejemplo, si disponemos de una basede datos con campos de autor, fechay texto estructurado, hemos de poderpreguntar ¿cuáles son los documentos del autor X escritos antes del 15de Diciembre que contienen la palabra "cristalografía" en la bibliografíadel documento? La segunda parte dela pregunta se refiere a la estructurainterna de! campo de texto estructurado. O bien, si disponemos de unabase de datos de imágenes, hemos deser capaces de buscar imágenes parecidas a una tomada como referencia,consistiendo e! parecido en determinados criterios de color, sombreadoo textura que nosotros especificaremos.
DB2/2 2.1 incorpora algunas de lasextensiones del SQL3, y permite definir tipos definidos por el usuario basados en tipos existentes, incluyendo losobjetos largos, y asociados a funciones definidas por el usuario, ademásde triggers ("gatillos" o "disparadores"). Mediante todo ello es posibledefinir objetos en SQL, almacenarlosen tablas, y manipularlos mediante lasinstrucciones usuales de SQL, ademásde mediante las que el propio objetodefine. Estudiaremos primero cadauna de estas extensiones, para comentar después cómo pueden utilizarsepara implementar extensiones relacionales.
Objetos grandes
Los objetos grandes (Large Objects, oLOBs) son nuevos tipos de datos básicos que se pueden utilizar para almacenar cualquier tipo de información.Hay de tres tipos: CLOBs, o tiras decaracteres largas, asociados con unapágina de códigos y con una longitudmáxima de 2 gigabytes; DBCLOBs, otiras de caracteres de doble byte, conuna longitud máxima de 1 GB; YBLOBs, objetos binarios largos, sinpágina de códigos y de hasta 2 GB.
Dado que transferir un objeto largo
RPP NQ 16
41
HERRAMIENTAS OS/2
Conclusión
miten la adición de nuevos tipos dedatos orientados a objeto a nuestrabase de datos. Un nuevo tipo stronglytyped accesible mediante funciones eslo más parecido que conocemos a unobjeto. IBM dispone de extensionesrelacionales para imágenes, audio,vídeo y texto estructurado, que seincorporan a DBl y permiten utilizaresos nuevos tipos como si fuesen nativos, manipulando cada uno de ellosde acuerdo con sus características.
Por ejemplo, la extensión de textopermite definir campos de texto, quepodrán después buscarse por contexto, por sinónimos en 17 idiomas, porproximidad, o por contenido, sin másque instalar la extensión. En realidad,lo que IBM ha hecho ha sido convertir su producto SearchManager/2, quees una evolución OS/2 del antiguoSTAIRSNS, en una extensión relacional que permite la extracción de información de documentos estructurados(por ejemplo, en SGML).
la extensión para imágenes queincorpora la tecnología QBIC (QueryBy Image Contents), que permite buscar imágenes por forma, color o textura (el anuncio de las botellas que seestá publicando actualmente).
Hemos intentado cubrir las novedadesde DB2/2 2.1 que nos hanparecido más llamativas enlos primeros meses de contacto; obviamente, nohemos podido explicarlastodas. El producto ha crecido mucho, y para bien,de modo que no tiene nadaque envidiar a los sistemasdel mainframe. Esto se ha
conseguido mediante mejoras en laadministración, extensiones de usabilidad del lenguaje SQL que lo hacenmucho más potente, y una primeraaproximación a las bases de datos relacionales orientadas a objeto que -estamos seguros- es sólo un primer pasoy abre un futuro que promete ser apa-sionante. P
y
Create Trigger Desp dirAfter Dele ,e On PersonalFor Each Row Mode DB2SQLUpda e Estadisticas Set Emp eados o
Empleados - 1
Su significado es bastante evidente.Los triggers funcionan del modo atómico a que estamos acostumbrados conDB2: si una instrucción SQL activa untrigger y por alguna razón éste no seejecuta con éxito, la operación entera sedeshace por completo (rollback). Estoquiere decir que, siguiendo con nuestro ejemplo, Estadisticas.Empleadoscontendrá el número de filas de Personalexactamente, con el mismo grado defiabilidad a que estamos acostumbrados cuando empleamos la integridadreferencial o las unidades lógicas de trabajo. O sea que, efectivamente, estamos añadiendo integridad estructurala nuestra base de datos a unos nivelesimpensables antes de la aparición de lostriggers. Naturalmente, un trigger, alser activado, puede a su vez activar unoo más triggers suplementarios, y asísucesivamente. Además, las restricciones (constraints) correspondientes severificarán. La operación que estamosrealizando seguirá siendo para nosotros atómica, o se ejecuta todo bien, ono se ha ejecutado nada.
Las extensiones relacíonales
Los mecanismos que hemos descritoconstituyen una arquitectura bastantecompleta para la implementación deextensiones relacionales. Una extensión relacional es un paquete de tiposy funciones definidos por el usuario,junto con algunos triggers, que per-
Si una instrucción SQL activa un triggery éste no se ejecuta con éxito,
la operación entera se deshacepor completo (rollback)
Empleados
"Triggers"
hace escribiendo código en lenguaje C,que, una vez compilado, se añade a ladefinición de la base de datos. De estemodo, es la base de datos y no la aplicación la que contiene la definición dela función, de modo que la posibilidadde errores (accidentales o intencionados) se ve muy reducida, y el mantenimiento de múltiples aplicaciones sobrela misma base de datos muy simplificada. No reproducimos aquí nada del diagrama sintáctico para las funciones definidas por el usuario, aunque indicaremQsdos cosas: que es posible definir atribu~
tos que indican cosas como si una función tiene o no efectos laterales, y que,dado que escribimos nuestras funcionesen lenguaje C, es posible que, de haberefectos laterales, éstos tengan efecto sobreuniversos distintos al SQL: por ejemplo,podemos escribir una función que envíecorreo electrónico.
Create Trigger ContratarAfter lnsert O PersonalFor Eac Row Mode DB2SQLU date Estadisticas Set
Empleados + 1
Los triggers ("gatillos" o "disparadores") son mecanismos que son activados ("disparados") cuando se produceuna determinada modificación en unatabla. Por ejemplo, podemos tener uncontador de personal en una tabla decontadores que se incremente automáticamente cada vez que se añade una filaa la tabla de personal y se decrementeautomáticamente cuando se suprimauna fila. O podemos man-tener automáticamente unatabla de seguridad con losvalores suprimidos omodificados en otra tabla quecontenga datos altamentesensibles. La idea de lostriggers es a la vez muy sen-cilla yextraordinariamen-te potente (especialmentesi los combinamos con las restricciones ("constraints") y con las funcionesdefinidas por el usuario. Como ejemplo" escribiremos los triggers para mantener el contador de personas.
RPP Nº 16
42