‘I 1 S.E.P. D.G.I.T. S.E.I.T. CENTRO NACIONAL DE INVESTIGACION Y DESARROLLO TECNOLOGICO cenidet “EXTENSIÓN AL LENGUAJE SQL PARA EL MANEJO DE DOMINIOS COMPUESTOS” T E coMo QUE OBTENER EL S I REQUrslTo DE GRADO S : CENTRO DE p.,FORMAC,O,. MAESTRO EN CIENCIAS E N C I E N C I A S C O M P U T AC I O N AL E S P R E S E N T A JOSÉ ANTONIO MARTÍNEZ FLORES CUERNAVACA,MOR DICIEMBRE DE 1996 CENlDET SEP r SW SISIEhIA NACIONAL D I 5 INS !I I’UI‘OS ’I’ECNOLOGICOS 1; Centro Nacional I de Investigación yI Desarrollo Tecnológico ACADEMIA DE LA MAES’I‘RIA EN CIENCIAS DE LA COMPUTACION Cueniavaca Mor., a 1O de Diciembre de 1996 I t Dr. Juan Manuel Rica170 Castillo Director del CENIDET Presente, At’n: Dr. José Ruiz Ascencio Jefe del Dpto. de Computación I grato comunicarle, que coiifoniie a los liiieaniientos establecidos para .la Nos es .obtención del grado de niaesiría de este centro, y después de haber sometido a revisión académica el trabajo de tesis denominado: I “Extensión al Lenguaje SQL para el Manejo de Dominios Conipuestos” que presenlo el Ing. José Antonio Martíiicz I:loi.cs. y Iiabiciido ciiiiiplido con todas las correcciones ‘que le fueron indicadas, .acordamos no tener objeción para que se le conceda la autorización de impresión de la tesis, así como de lijar la fe& del examen correspondiente. Sin más por el momento, qucdaiiios de usted. I A t c n t a ni e n t e Comisión de revisiói Director de tesis cenide I1 1. , . hl):irt;iito 1’0st;il Iiilri’ior liiici-rindo 1’:iIiiiir;i SIN C.P. 62490 5-164,C.P. 62050. Ciiriri;iraca Mor., Rl<xicn Ids. (73) IX-77-41 y 12-76-13, Ear. 12-24-34, k@P SlSl ERlA N A C IONhL DE INS11 lU1OS IECNOLOGICOS Centro vacional de Investigación y Desarrollo Tecnológico Ciieniavaca M o r , a I6 de diciembre de 1996 Iiig. José Aiitoiiio Martiiiez Flores Candidato al h.ado de Macstro ai Cieiicias de la Coiiiputacióii PRESENTE Despdés de Iiaber sometido a revisión acadéiiiica, y de Iiaber coiiíiniiado las sugereiicias indicadas por"eIjuiado 1 ' _ de su trabajo de tesis dciioiiiiiiado: "Extensión nl Lenguaje SQL para el Rlaiiejo de üoiiiinios Coiiipuestos" me es grato jcointuiicarle, que coiiforiiie a los liiieaiiiieiitos establecidos para la obteiicióii del grado de maestiía de este centro, se le coiicedc la autorimcióii respective para quc proceda coil la iinpresióii de su tesis. Siii más por el iiioiiieiito, rec.iba mis felicitaciones por el téniiiiio de sil tralxijo de tesis, deseándole éxito en el exainai coi-i-espoiidieiite. 'I Ateiitaiiieiite 1) c.c.p. M.C. Wilbeitli Alcocer I<. c.c.p. lug. David CIihez Agiiilar Siildii cccióii Ac:idéiiiic:i Dpto dc Seilicios Escolates .. liilcrior 1iiirin:ido P:iliiiii.1 S/N C.P. 62490 Iixr1:idii Piis1;il 5-164. C.P. 6?050. Ciierrinvacn Mor.. México Ti.ls. (73) 18-77-41 y 12-76-13. Fax. 12-24-34 : . . ..., ....,. DEDICATORIA A Dios Padre, de corazón, por mostrarnos su infinito amor a iravés de su amado hijo, Jesucristo. Con cariño y respeto a mispadres, por darme a la vida y los medios para andarla. A mis abuelos Beto y Gricy y hermanas Grin, Geny, Sandra, Gaby, Are& y Gryspor su inapreciable compañía. A mis tíos yprimos, por impulzarme con su apoyo y confianza. ' Y en general, a todos mis amigos por brindarme su amistad idivino tesoro ! I/ AGRADECIMIENTOS A mis padres, hemanos y abuelos por cuanto han contribuido en mí crecimiento, tanto material como espiritual, mil y un gracias. Agradezco de manera muy especial a mi tíos: Felipa, Miguel, Valenth, Beto por sus sabios y útiles consejos; y a m i s primos Andrés, Lalo, Toño por su apoyo y afecto. Gracias doy a la mstitución que me permitió realizar m i s estudios de maestria, al Centro Nacional de dvestigación y Desarrollo Tecnológico. Gracias al Instituto de Investigaciones Eléctricas, en especial al Departamento de Sistemas de Información las facilidades brindadas para el desarrollo de mi tesis de maestría. Reconozco y agradezco el apoyo económico brindado por CONACYT en mis estudios demaestna. '! Le estoy profimdamente agradecido a mi a&wr de tesis, Dr. Rodolfo A. Pazos Rangel, por su apoyo, orientación y tiempo dedicado para la culminación de este trabajo de tesis. Expreso mi agradecimiento al M. C . Joaquín Pérez Ortega y M. C. Andrés Rodríguez por su apoyo, hugerencias y buenos consejos. ,I Agradezco a mis maestros del CENIDET por su apoyo y por haberme transmitido sus experiencias y sabios conocimientos. Agradezco ai jefe del Depto. de Ciencias Computacionaiei Dr. José Ruíz Ascencio, por su apoyo brindado. A mis revisores de tesis por sus comentarios, criticas y por su valiosa cooperación en la revisión de este trabajo. A mis compañeros y amigos de generación Anastacio A,, Carlos V., Claudia, Claudia H, Fo~tino,Hugo I., Javier S., Ma. Ya-, Miguel A. y Paula A. por su amistad y compañía. .. A m i s amigos de hgeniena de software Alicia, E d , Hugo y Lety por los!'gratos momentos compartidos. A mis amigos de CENIDET Victor, Juan Gabriel, Juan de 'Dios, Leopoldo, Elsa, Ariel, Laura Edith, Cecí y Ver0 por apreciable compañía. TABLA DE CONTENIDO LISTA DE TABLAS Y FIGURAS ............... ...................................................................... 1v CAPíTULO 1 INTRODUCCIÓN ............. ............................. ...................................... ........................... ........................................................... 1.3.Beneficios .,.. ........................... .................................................. ......................................................... 1.4.Estado del Arte en SMBDDRs......... . 1.5. Urganizacion de la tesis ........................................................................ 1 1 3 4 . I CAPÍTULO 2 CONCEPTOS SOBRE DOMINIOS ............................................................................................ .................................................................................. 2.1.El Estándar SQL .................. ...................................................... 2.2. Tipos de datos en el estánd . 2.3. Definición de dominios ....... ................................................................................ ...................................................... 2.3.1. Definición de d 2.3.2. Definición de 2.4. Razones para el uso de dominios _.._. 2.5. Uso de dominios en tab1 9 9 10 11 I1 CAPíTULO 3 PLANTEAMIENTO Y ANÁLISIS DEL PROBLEMA 3.1. Antecedentes del proyecto ............... 3.1.1. SiMBaDD 3.1.2.Tipos deDatos del SiMBaDD 3.2. Alcance delatesis.. 3.3. Lenguaje de Definición de Datos ..... ............... 3.3.1.1.Dificultades aResolver enlacreación dedominios simples ...... 3.3.1.2.Dificultades aResolver en lacreación de dominios ................20 .......................................................................... 3.3.5.Dificultades aResoIver en la mantenimiento de dominios .._ 3.3.6. Dificultades a Resolver en la declaración de variables 3.4. Lenguaje de Manipulación de Datos . 3.4.1. Dificultades a Resolver en 1 i 20 , 3.4.3.Dificultades a Resolver en la instrucciónUPDATE........................................ 25 3.4.4. Dificultadesa Resolver en la'instrucciónDELETE ......................................... 26 CAPíTULO 4 METODOLOGÍA DE SOLUCI~N............................................................... 4.;. Alternativas para la implementación de dominios compuestos ........... 4.2. Gramática para la definición de dominios ............................................ 4.2.1. Gramática para la definición de dominios simples .......................................... 4.2.1.1,CREATEDOMAIN........................................................................ 4.2.1.2, ALTER DOMAW........................................................................... 4.2.1.3.DROPDOMAIN............................................................................. 4.2.2. Gramática para la definición de dominios compuestos................................... 4.2.2.1, CREATE COMF'OUNDDOMAIN................................................ 4.2.2.2,DROP COMPOUNDDOMAIN. 4.3. Gramática para la definición de tablas e índices ........ 4.3.1. CREATE TABLE ............ 4.3.2. CREATE INDEX ............. 4.4. Diccionario de Datos 4.4.1. Actualizaci as ......................................................... 4.4.2. Estructura de,losdiccionarios de dominios ..................................................... 4.5. InstrucciónBEGIN DECLARE SECTION...................................................................... ., 4.6. Instruccion INSERT.......................................................................................................... ., 4.7. Instruccion SELECT......................................................................................................... ., 4.8. Instruccion UPDATE ....................................................................................................... 4.9. Instrucción DELETE ............................................. 28 29 30 32 32 32 40 40 43 44 44 46 CAPÍTULO 5 IMPLEMENTACIÓN. 5.1. Transporte del SiMBaDDdel ambiente D 5.1.1. Motivos ....................................... ,: 5.1.2. Cambios realizados 5.2. Implementación del Diccionari ...................................................................... 5.2.1. Actualización del DicciOnaio de Archivos Distribuidos (DAD) .................... 5.2.2. Anexión del archivo de dominios en el DAD 5.3.implementación de dominios.................................. 5.3.1.Creación de dominios simples ......................................................................... 5.3.2. Creación de dominios compuestos .................................................................. 5.4. Creación de tablas e índices .. 5.4.1. Creación de tablas 5.4.2.Representación d 5.4.2.1.Dominios simples en una tab1 5.4.2.2. Domini .. 5.4.3. Creacion de indices .......................................................................................... 5.5. Instrucción DROP ....... ........................................................................ 5.5.1.Borrado deDominios ....................................................................................... I . ii ..47 48 48 49 49 S4 54 54 5.5.1.1.Borrado de dominios simples 5.5.1.2.Borrado de dominios compuestos 5.6. Instrucción INSERT........................................... ............................................................. ............................................................. ............................................................................ 60 CAPÍTULO 6 PRUEBAS DE FUNCIONALIDAD ........................................................ 6.i. Objetivo de las pruebas ............................................................. 6.2. Descripción del ambiente de pruebas ............................................................................... ............................................................... 6.3. Presentación de las pruebas 6.3.1,Contenido inicial de la base de datos de prueba ............................................. 6.3.2.Programas de prueba ...... .............................................. 62 .62 63 66 CAPÍTULO 7 /I C0MEN;TARIOS FINALES ..................................................................... 7.1. Conclusiones ................................................... 7.2. Posibles extensiones ........................................ 7.3. Observaciones ................................................................................ ANEXOS ANEXO A GRAMÁaCADEL LENGUAJE SQL SOPORTADAPORELSiMñaDD ..98 ANEXO B PROCEDIMIENTOS Y FüNCI.ONJZSIMPLEMENTADOSPARA EL MANEJO DE DOMINIOS ........................................................................................................................ ANEXO C LISTA DE ERRORES ,103 ,105 REFERENCIAS....................................................................... ....... ....106 11 I BiBLIOGRAFiA................................................................................................................................... ... Ill 1o9 LISTA DE TABLAS Y FIGURAS # TablalFig . Descripción Pag . Tabla 2.1 Representación de una Relación en Forma de Tabla ............................................. 14 Tabla 4.1 Representación de PtoGeo en TRegTabla. Campo por Elemento......................... 28 Tabla 4.2 Representación de PtoGeo TRegTabla. Campo por Dominio Compuesto............ 28 Tabla 4.3 Representación de Dominios Simples en la Estructura TregDom......................... Tabla 4.4 Representación de Dominios Compuestos en la Estructura TregDomC................ 43 Tabla 5.1 Representación de la Tabla Temper en TRegTabla.............................................. 52 Tabla 5.2 Estructura Física de la Tabla Temper .................................................................. 52 Tabla 5.3 Búsqueda de un Elemento de una Columna Compuesta en TregTabla.................53 Tabla 6.1 Datos del archivo Temper.Dat............................................................................. 64 Tabla 6.2 Datos del archivo Contam.Dat............................................................................ /I 64 Tabla 6.3 Datos del archivo Altura.Dat ................................................................................ 65 Tabla 6.4 Datos del Archivo de Dominios Simples.............................................................. 65 Tabla 6.5 Datos del Archivo de Dominios Compuestos....................................................... 66 Figura 2.1 Representación de la Relación Jugador ................................................................ 15 Figura 3.1 Arquitectura del Manejador de Archivos............................................................. 17 Figura 3.2 Diagrama a Bloques del Precompilador............................................................... 19 Figura 3.3 Presentación gafica de un Ciclo......................................................................... 21 Figura 5.1 Lista de Cláusulas para Ejecución del SELECT................................................... 57 42 'I N En este capítulo se muestra el objetivo y los beneficios obtenidos en el desarrollo del presente trabajo de tesis, además del estado del arte en Sistemas Manejadores de Bases de Datos Relacionales (SMBDRs) y se dkscribe a grandes rasgos como está organizada la tesis. 1.1. Evolución de las Bases de Datos Cuando el manejo de bases de datos se p o p u l d durante los setentas y los ochentas emergió un puñado de modelos de datos. Cada uno de estos primeros modelos de datos tenían ventajas y desventajas que jugaron papeles impoitantes en el desarrollo del modelo de datos relacional. En muchos sentidos el modelo de datos relacional representó un intento de simpliñcar los modelos de datos anteriores. Antes de la mtroducción de los sistemas manejadores de bases de datos, todos los datos perfnanentemente almacenados en un sistema informática, se almacenaban en archivos mdividuales. Un sistema admmistrador de archivos, generalmente proporcionado por el fabricante del computador como parte del sistema operativo, llevaba el control de los nombres y ubicaciones de los archivos; básicamente no tenía un modelo de datos, no sabía nada acerca de los contenidos internos de los archivos. El conocimiento acerca del contenido de un archivo (sus datos y estructura) estaba incorporado a los programas de aplicación que utilizaban el archivo; si la estructura de los datos cambiaba (por ejemplo, ai añadir un nuevo campo), todos los programas que accesaban el archivo tenían que ser modificados. Los problemas de mantener grandes sistemas basados en archivos condujo, a finales de los sesentas, al desarrollo de los sistemas manejadores de bases de datos. Primeramente se desarrolló el modelo de datos jerárquico M G 9 3 a l FOR93al. En este modelo cada registro de la base de datos representa una pieza específica. Los registros tenían enlaces (relaciones) padredijo. 1 CAPíTULO 1 I' I"IRODUCCI6N I/ La remPerdCión de 10s datos en una base de datos jerárquica requiere navegar a través de los registros, moviéndose hacia arriba, hacia abajo y hacia los lados de un registro cada unode los sistemas manejadores de bases de datos jerárquicas más popdares fue el Infomation Management System (ms)de b M FZIB3bl FOR93b] [DAT93b], introducido primeramente en 1968. Las ventajas del IMS y'su modelo jerárquico son las.siguientes: ,,ez. I/ - Estructura simple. Organizació'n padrefijo I1 Rapidez. La estructura sencilla de una base de datosjerárquicos se convertía en una desventaja cuando los datos tenían una estructura más compleja; la estructura de este tipo de datos simplementeno se ajustaría a la jerarqha estricta de IMS, por lo cual se desarrolló un nuevo modelo de datos en red para manejar estructuras complejas. El modelo de datos en red extendía el modelo jerárquico permitiendo que un registro participara en múltiples enlaces padrehijo. En 1971 la Conferencia sobre Lenguajes de Sistemas de Datos publicó un estándar oficial para bases de datos en red, que se hizo conocido como el mbdelo CODASYL w G 9 3 c l [KOR93c] [DAT93b] [GR092a]. I/ Una vez más el programador tenía que recorrer la base de datos registro a registro, especiiicando esta ve4 qué relación recorrer además de indicar la dirección. Las bases de datos de red tenían vanas ventajas: 1) - - Flexibilidad. 11 Normalización. Rapidez. Las desventajas de los modelos jerárquicos y de red condujo a un intenso interés en el nuevo modelo de datos relacional cuando fue presentado por primera vez por el Dr. Codd en 1970 m @ 3 d ] FOR93dl [DATgSa]. El modelo relacional era un intento de simplificar la estructura de las bases de datos. E l h n a b a las estructuras explícitas padrehijo de la base de datos y en su lugar representaba todos lob datos en la base de datos como simples tablas (relaciones) fia/columna de ,I valores de datos. Una de las prinkipales diferencias entre el modelo relacional y los modelos de datos prbitkos es que los punteros expiícitos, tales como los enlaces padrehijo de una base de datos jerárquica, están prohibidos en las bases de datos relacionales. Obviamente esos enlaces siguen existiendo en una base de datos relacional. Tal enlace padrefijo está representada por valores de datos comunes almacenados en las dod'tablas. Todos los enlaces de una base de datos relacional están representados de este modo, lo que permite recuperar de la base de datos, datos relacionados manipulando estos enlaces de un modo sqciilo y directo [GRO92b]. Las relaciones poseen ciertas propiedades, todas ellas consecuencia inmediata de la definición de relación que en el Capítulo 2 se dará en detalle. I/ 2 ., CAPíTllLO 1 - INTRODUCCI~N '1 No existen'hplas repetidas. Las tuplas no están ordenadas (de arriba hacia abajo). Los atnbuths no están ordenados (de izquierda a derecha). Todos los valores de los atributos son atómicos. Con respecto a la cuarta propiedad, una forma más precisa de expresarla es: "todos los valores de los atributos simples son atómicos", es decir, contienen sólo valores atómicos. (Aún si existen atributos compuestos, éstos no son sino una simple concatenación de atributos simples; por ejemplo, las fechas y horas). Las relaciones construidas con base en lo anterior se denominan normalizadas, o bied'se dice que están enprimeraform normal. En otras palabras, la primera forma normal implica sencjllamente la amencia de grupos repetitivos. La razón de insistir en la normalización de todas las relaciones es la siguiente: En esencia una relación normalizada es una estructura más simple, desde el punto de vista matemático, que una no normalizada. En conkecuencia se logra sencillez, es decir, sencillez en la estructura de los datos, lo cual conduce a su vez a simplificaciones correspondientes en todos los aspectos del sistema 'I y en menor número) PAT93cl. (operadores más sencillos 1.2. Objetivo I/ El objetivo de esta tesis es diseñar e implementar en un Sistema Administrador de Bases de Datos Distribuidas (SABDD) la definición y manipulación de dominios simples y compuestos, y usar éstos en la definición be las tablas en lugar de usar tipos de datos básicos como se hace actualmente en los SABDDs Relajando esta limitación se puede lograr el manejo de dominios compuestos en las columnas, y con el prksente trabajo de tesis se pretende demostrar la factibilidad de manejar dominios compuestos en el mopelo relaciona1 sin afectar el lenguaje de manipulación de datos. Dadas las ventajas que ofrecen la deñnición y manipulación de dominios, se han agregado a un prototipo experimental denominado SiMBaDD [SOS95] (estema manejador de bases de datos distribuidas), nuevaslmtiuas que permiten el manejo de dominios, en particular las extensiones al Lenguaje de Definición de Datos (LDD) de Stmctured Query Language (SQL) que permiten la I definición de dominios compuestos en Bases de Datos Distribuidas (BDDs) y su manejo por parte del Lenguaje de Manipulación de Datos (LMD). 1 Cabe aclarar que este proyecto es parte de una larga sene de trabajos realizados en el Instituto de Investigaciones Eléktricas (DE)y el Centro Nacional de Investigación y Desarrollo Tecnológico (CENIDET) en el área de bases de datos distribuidas, que tienen por objeto estudiar problemas y desarrollar tecnologd relacionados con manejadores de bases de datos distribuidas 3 7 CAPiiULO 1 1.3. Beneficios II INTRODUCCIÓN II 11 Los principales beneficios que se pueden obtener con el uso de dominios en u11 Sistema Manejador de Bases de Datos Relacionales (SMBDR) son los siguientes. - Definir nuevos tipos de datos a partir de los básicos (Char, Integer, Long&, y Date), con lo cual el usuario podrá contar con un mayor número de tipos. I1 - Proporcionar mayor legibilidad en el desarrollo del código, ya que el programador podrá crear y manejar los tipos deñnidos adecuadamente a su aplicación. - Ayudar a detectar errores en la comparación de columnas que tengan dominios diferentes - Usar en fo&a normal tipos de datos estructurados (dominios compuestos) sin afectar al lenguaje de manipulación de datos del manejador. 11 - Tener en el caso de los dominios compuestos un nivel más de abstracción con el manejo de 'I registros, en forma análoga a los lenguajes C y Pascal. I/ 1.4. Estado del Arte en SMBDRs En 1990 apareció una nueva obra de Codd [DAT95b], en la que presenta la segunda versión del modelo relacion&(RMN2), ampliando y profundizando en ciertos conceptos como los dominios, restricciones de integidad, catálogo, vistas, etcétera, proponiendo un mejor tratamiento de los valores nulos (a los que denomina murcus "marks") y de sus operaciones asociadas, y estudiando otros temas, como los relativos a la administración, autorización, distribución, y protección de datos. Todo elio organizado en las 333 características (agrupadas en 18 clases) que, s e w él, habría de tener un sistema para ser considerado como relacional, versión 2 N G 9 3 e l . Cabe hacer mención que gran parte de los SMBDRs comerciales (sistemas manejadores de bases de datos relacionales) hoy en día no ofrecen el manejo de dominios [ m 9 2 ] pOC94] [DAT95c], hay otros hue manejan dominios simples (como RDB PIG911 y Microsoft SQL Sewer QvlIC87a]), pero ninguno considera el uso de dominios compuestos debido a las dificultades técnicas iiivolucradas FOR93el PAT95dI. A continuación se describen los principales sistemas manejadores de bases de datos distriiuidas relacionales que permiten el nianejo de dominios simples y que se encuentran actualmente en el mercado. Además de describir un protonpo. 4 I1 INGRES 11 Ingres wG93flha sido uno de los mayores competidores de Oracle en el mercado de las Vax y de Unk,y d lenguaje Query Language (QUEL) fue uno de los más fuertes competidores de SQL como el lenguaje estándar relacional. Ingres soporta la creación de tipos de dato del usuario y tiene la más fuerte mtegridad en dominios que cualquier otro manejador de bases de datos relaciona1 pAT95eI. Ingres ofiece dos versiones de SQL IngresíSQL, el cual es compatible con el nivel 1 del ANSI, y el Open SQL, un subconjunto que puede ser usado con el ingredGateway para consulta a sistemas no relacionales Ingres. II PROGRESS m & 3 g ] Los dommioi pueden deñnirse como caracteres, enteros, reales, booleanos, fechas, o vectores de una columna. La longitud y demás características (ámbito de los dígitos aceptables como por ejemplo la obligatoriedad de introducir todos los dígitoo, un determinado dígito en una posición determinada, mayúsculas, etc.) se definen en la metabase. Se dispone del valor nulo (desconocido) para cualquiera de ekos tipos. Los datos se almacenan en longitud variable. I/ Se definen los dominios directamente en la metabase, y su especiñcación es dinámica; es decir pueden variarse enlcualquier momento (con la salvedad de que los datos existentes queden coherentes con la restricción introducida). La integridad de dominio incluye la desautorización del valor nulo, y la comprobación del cumplimiento de una fórmula @.e., se puede controlar cada digto introducido comprobando que figure en mayúsculas, minúsculas, figure en una lista de digitos permitidos, ...). En lo que a fechas se refiere, sólo se permite la introducción de los dígitos que corresponden a los días existentes. Un dominio puede deñnirse como sensible a la distinción entre mayúsculas y minúsculas, o no. Microsoft/SYBASE SQL Server I/ Sybase w C 8 7 b l es un sistema de gestión de bases de datos relacionales por lo que soporta plenamente el concepio de relación. Para garantizar la integridad de los datos, Sybase soporta la idea de dominio como conjunto de valores relacionados de forma lógica que pueden tomar las columnas. El servidor proporciona mecanismos para garantizar que cualquier valor que se pretenda dar a una columna definida sobre un determinado dominio, esté en el conjunto de valores permitidos. 11 En el nivel más básico el servidor asegura la integridad, comprobando que el valor que se 'I introduce para una columna es del tipo correcto. Para definir dodinios más especXcos, Sybase permite al usuario crear reglas que pueden asociarse directamente a una o varias columnas de una o .I vanas tablas en una o varias bases de datos, o bien a un tipo de dato creado por el usuario; de esta forma se consigue que los dominios soporten algo de semántica. 11 I/ 5 I1 11 CAPíTULO I INTROD UCCI6N '1 Este concepto de regla se utiliza también para introducir en la base de datos determinadas restricciones de &ario, tales como, por ejemplo, que la edad de un empleado no sea inferior a dieciséis años. Para soportar esta restricción se asociaría una regla a la columna edad de la tabla empleados o se crearía un tipo de datos edad al que se le asociaría la regla. i CA-DATACOM I/ Una restrichón en CA-DATACOM N G 9 3 h l son los dominios, éstos aseguran que en operaciones de mantenimiento, únicamente se pueden incluir rangos de valores preseleccionados y válidos en los renglhes de cualquier tabla. . I/ Las facilidades de integración de dominio se aplican a todas las tablas de una base de datos, hayan sido creadas en el ambiente nativo de Datacom o vía SQL. 6 CA-IDMSIDB I/ CA-IDMSDB N G 9 3 i l almacena las reglas de integridad en un diccionario centralizado 'I desde donde son compartidospor las aplicaciones, sin necesidad de repetirlas en cada programa. Esto se traduce en reducción del desarrollo y de los costos de mantenimiento, así como en mejora del rendimiento, control y fiabilidad. La integridad referencial se define en CA-IDMSDB a nivel del diccionario para establecer relaciones entre tablas. Estas relaciones se refuerzan siguiendo la coiivención ANSI. ,I La integridad de dominio impone restricciones sobre columnas o campos. Estas reglas se 4 almacenan también en el diccionario y permiten especificar un dominio de valores válidos para un campo. 11 I/ Prototipo Mariposa WAR961 i El prototipo Mariposa ha sido desarrollado por la Universidad de Berkeley, California en Estados Unidos, el chal se basa en el modelo Relacional. Este prototipo ofiece el uso de dominios simples y en cierta forma, la de los dominios compuestos. Es decir, el prototipo Mariposa al crear una estructura compuesta, la define como un objeto al incluirle métodos. ii Estándar SQL I ps Últimamente, -pos de trabajo de ANSI X3H2 y el ISO/IEC han elaborado una nueva versión del SQL (SQL/92) [IS0921 que incrementa substakialmente la capacidad semántica del esquema relacional, se,añaden nuevos operadores, se mejora el tratamiento de errores, proporciona borrados y actualizaciones en cascada, y se incluyen normas para el SQL intercalado. I/ I/ 6 CAPíTVLO I .I INTRODUCCIbN I/ En la actualidad también se están elaborando nuevas propuestas N c 9 3 j l [GRO92c] m 0 9 6 1 Para extender el SQL (el llamado SQL3) dotándolo, además de una mayor capacidad semántica, de cieitos principios del paradigma de orientación de objetos. Se pretende incluir en el lenguaje, tipos ide dato definidos por el usuario, disparadores, jerarquías de generalizaciódespeciaiización,llamadas a procedimientos externos, etc. I/ Por Ú l h o , cabe destacar que en próximas versiones del lenguaje SQL (como la denominada SQL3) se están definiendo más elementos a ñu de soportar directamente la herencia por medio de las denominadas subtablas píiG93jl. /I En conclusión se ve claramente que el estándar SQL a evolucionado, desde la definición, manejo y protecciód de datos hasta normas para instrucciones intercaladas, conforme las bases de datos relacionales se han ido popularizando las necesidades de los usuarios se han vuelto más I/ sofisticadas;debido a lo anterior no es exagerado proponer la inclusión de dominios compuestos en el estándar SQL. , I/ 1.5. Organización de la Tesis 11 El contenido de la presente tesis está organizado de la forma siguiente. I/ En el Capítulo 2 aparecen algunos conceptos sobre dominios, los beneficios que proporcionan y su inclusión en el estándar SQL, así como también los tipos de dato que se consideran en este estándar Además en este capítulo se ejemplifica el uso de dominios en la creación de relaciones 11 En el Capítulo 3 se presentan los antecedentes de la tesis, su alcance y se proporciona un planteamiento del ptoblema a resolver para la definición y manipulación de dominios simples del estándar SQL En este capítulo se describen también los problemas a solucionar para el uso de los dominios compuestob (propuestos para el estándar SQL). En el Capítulo 4 se mencionan las posibles soluciones conceptuales y se determina la factiiilidad de solución. En este capítulo se descriien algunas de las estructuras y métodos empleados para la solución del problema así como la gramática propuesta para la definición y borrado de dominios compuestos. I1 En el Capítulo 5 se explican con detalle los algoritmos que permiten la definición de dominios 11 simples y compuestos, así como su manipulación en un sistema manejador de bases de datos distribuidas experimental. I En el CapítUio 6 se presentan las pruebas efectuadas al sistema manejador de bases de datos 4 distribuidas experimental con las que se demuestra la equivalencia semántica de las instrucciones SQL-Pascal, para el uso de dominios (simples y compuestos). I/ 1 7 I1 8 En este capítulo se describen algunos de los conceptos sobre dominios y su inclusión en el estándar SQL (SQL2), y los beneficios que proporcionan, así como también los tipos de datos que proporciona el estándar SQL. También se muestra el uso de los dominios en la creación de relaciones. 2.1. El Estándar SQL t En 1970, E.7. Codd, en ese entonces miembro del San Jose Research Laboratory de iBM (ahora el Almaden Research Center), publicó un artículo, un clásico en nuestros días, titulado: "A Relational Model of Data for Large Shared Data Banks" pAT93d], en el cual menciona u0 conjunto de principios abstrdkos para la administración de bases de datos: el llamado modelo relacional. Posteriormente se presentaron investigaciones las cuales implementaban prototipos de una variedad de lenguajes relacio~ales.Uno de estos lenguajes en particular fue el SEQUEL, definido por D.D. Chamberlin y otros mvectigadores del Research Laboratory de ISM (en 1974). Una versión revisada del SEQUEL, llamada SEQUELR, se deñnió en 1976-77 (el nombre fue cambiado a SQL (Stnictured Query Languaje, Lenguaje de Consulta Esiruchrrado por razones legales). Este lenguaje fue implementado en'hprototipo llamado System R, el cual se convertiría en un sistema comercial muy popular @lAT89]. Posteriormente otros vendedores también anunciaron productos basados en SQL. Estos anunciosincluianproductos enteramente nuevos tales como DG/SQL (1984) y SYBASE (1986), y además interfaces para productos establecidos tales como iNGRES (1981, 1985) e iDM (1982, 1985). En 1992 había más de 100 productos en el mercado que soportaban algún dialecto de SQL, corriendo desde computadoras personales hasta las grandes computadoras. SQL se convirtió en el esfandar de facto en,el mundo de bases de datos relacionales. Además, SQL es también ahora un estándar oficial. El estándar original (publicado por el American National Standards Instmite (ANSI) en 1986, y por la International Standards Organization 9 /I CAPfTULO 2 CONCEPTOS SOBRE DOMINIOS 11 American National Standards Institute (ANSI) en 1986, y por la International Standards Organization (ISO) en 1987, c o m h e n t e conocido como SQLí86) fue extendido en 1989 para incluir una característica de mejora en la integridad. A esta versión extendida frecuentemente se le llama informalmente como "SQLí89". IBM ha publicado su propio estándar de SQL intercalado, el Systems Application Architecture Database Interface (SAA-SQL) [GRO92c]. El comité de IS0 y ANSI ha estado trabajando por varios años para definir una versión revisada (y expandida) del estándar on@ conocido informalmente como "SQL2" (más recientemente "SQL/92") que vino a ratificar el estándar Internahonal S t d r d ISO/IEC 9075:1992, Database Languaje SQL (Estándar Internacional ISO/IEC 9075: 1992, Lenguaje de Bases de Datos SQL") [ISO92], a h a l e s de 1992 Sus principales ventajas son las siguientes. I1 - - Reducir el costo de aprendizaje. Portabilidadb longevidad en las aplicaciones Comunicación intersistemas. Manejo de dominios Las características y beneficios de SQL que le han permitido tener éxito son las siguientes [GR092d]: I/ Su independencia de los vendedores. Su portabiiidad a través de sistemas informáticos. Los estándares SQL. El apoyo de IBM. Su fundamento relacional. Su estructura de alto nivel (no procedimental). Las consultas interactivas ad hoc. Su acceso a la base de datos mediante programas. Las vistas múltiples de datos. El ser un lenguaje de bases de datos. Su definición dinámica de datos. La arquitectura cliente/servidor. I I1 2.2. Tipos de Datos en el Estándar SQL El estándar SQL d e h e distintos tipos de datos definidos por los siguientes palabras clave: - - CHARACTER CHARACTER VARYING I/ BIT BIT VARYING NUMERIC " DECIMAL INTEGER '/ 10 CAP~TULOz CONCEPTOS SOBRE DOMINIOS 11 SMALLrn FLOAT REAL I/ DOUBLE PRECISION DATE ,I TIME TIMESTAMP INTERVAT! 1 Cada tipo de dato tiene asociado un descriptor de tipo de dato. El contenido de un descriptor de tipo de dato está ldetenninado por el tipo de dato específico que éste describe. Un descriptor de tipo de dato incluye un identiíicador del tipo de dato y toda la información necesaria para caracterizar una ocurrencia de ese tipo de dato. 1 2.3. Definición de Dominios 11 En el estándar de SQL existe el concepto de dominio (siempre se sobreentiende que los dominios son simples si no se indica de manera explícita lo contrario), y sirve para crear tipos de t básicos, poniéndoles restricciones (valores permitidos) PAT93eI. En este datos adicionales a los aspecto se parecen a algunos lenguajes de programación con la diferencia de que en éstos los datos se pueden agrupar en 11registros. Para subsanar esta deficiencia en esta tesis se están proponiendo los dominios compuestos para el estándar de SQL. I/ 2.3.1. Definición deiDominios Simples Un dominio es el conjunto devalores escalares permitidos para un atributo, todos del mismo tipo, donde los valores escalares representan la menor unidad semántica de información en el sentido de que son atómicos lpAT93eI [ISO92]. Un dominio está descrito por un descriptor de dominio Un descriptor de dominio incluye los ,I siguientes componentes - - El nombre del dominio El descriptor del tipo de dato del dominio El <nombre de la colección> de la <cJáusula de colección>, si la hay del dominio El valor de la <opción por omisión>, si la hay de el dominio El descriptor de restricción del dominio de la restricción del dominio, si la tiene. 'I A continuación se presenta un ejemplo en donde se deñne un dominio para ilustrar lo dicho 11 Supongamos que deseamos crear un dominio Grado. Esto se puede lograr con la siguiente instmcción CAPíTULO 2 CONCEPTOS SOBRE DOMINIOS I1 Ejemplo 2.1 I CREATE DOMAIN Grado INTEGER CHECK(Grado >= O AND Grado <= 179); I/ Una vez creado el dominio simple Grado, el rango de valores que permitiria (cláusula de restricción del dominio) serían valores de tipo entero iguales o mayores a O y menores o iguales a 179, acorde a su cláusula de restricción que restringe los valores reales que puede tomar un grado. La definición del dominio se almacena en el DAD (diccionario de datos, descrito en la Sección 4 4) I1 para ser usada posteriormente. I/ Análogamente se puede crear el dominio Minuto que permita como valores válidos a enteros mayores o iguales que O y menores o iguales que 59 por medio de la siguiente instrucción: I/ Ejemplo 2.2 '/ CREATE DOMAIN Minuto INTEGER CHECK(Minut0 >= O AND Minuto <= 59); I/ 2.3.2. Definición de Dominios Compuestos 1) Informalmente un dominio compuesto es una combinación de dominios, cuyos elementos a '1 su vez son simples o compuestos dependiendo de la naturaleza del dominio sobre el cual se definen. A un dominio compuesto (tipo compuesto) matemáticamente se le denomina producto curtesiano de sus tipos contribuyentes. Esto surge del hecho de que el conjunto de valores defuido por este tipo compuesto consta de todas las posibles combinaciones de valores, tomadas de cada conjunto definido por cada tipo constituyente. Así, el número de dichas combinaciones, también llamadas n-adas, es el ,producto del número de elementos de cada conjunto constituyente [wJR87]. En términos generales, un tipo compuesto T con componentes de los tipos T1, T2, ..., Tn se deñne como sigue: I/ TYPE T = RECORD s1 : T,; S, : T,; ... s, : T,; END card(T) = card(T,) * card(T,) * ___ * card(T,) a1 A continuación se muestran dos ejemplos en donde se definen dominios compuestos para ilustrar este concepton 12 CAPhJLO 2 Ejemplo 2.3 CONCEPTOS SOBRE DOMINIOS '1 11 CREATE COMPOUND DOMAIN Latitud (Grado Grado, Minuto Minuto); I/ I/ en donde la primera aparición de la palabra Grado define el nombre del primer elemento de Latitud, y la segunda aparición se refiere al tipo de dato del elemento (que en este caso es el dominio simple Grado); algo similar ocurre con la palabra Minuto, Ejemplo 2.4 I I CREATE COMPOUND DOMALN Longitud (Grado Grado, Minuto Minuto); ,I La creación de un dominio compuesto PtoGeo, constituído por los elementos Latitud y Longitud, se puede hacer por medio de la siguiente instrucción (propuesta del SQL extendido): Ejemplo 2.5 I1 ,/ CREATE COMPOUND DOMAIN PtoGeo (Latitud Latitud, Longitud Longitud); I/ 2.4. Razones para el Uso de Dominios 'I El uso de dominios nos permite la creación de tipos definidos por el usuario, permitiéndonos I) con ello, contar con los tipos adecuados a la aplicación con lo cual se logra tener tipos nemotécnicos. Esto permite una mayor legibilidad en el desarrollo de código, así como la detección oportuna de errores lógicos al comparar columnas definidas con el mismo tipo base pero con diferente dominio. También permite determinar los tipos de operaciones que se pueden ejecutar con los datos; por ejemplo, no se pueden! aplicar funciones, tales como SUM, a columnas deíinidas en base a un dominio compuesto. Una gran ventaja de los dominios es que restringen los valores a insertar (al deñnir una columna en base a un'dominio), delegando al manejador la responsabilidad de validar los valores a almacenar en la base de datos, con lo cual se logra eliminar la redundancia de la veriíicación en cada programa de aplicacion cada vez que se haga referencia a una determinada columna. Además existe la ventaja de que los dominios compuestos se pueden introducir a SQL de manera natural sin "afectar la sintaxis del lenguaje de manipulación de datos (LMD) como posteriormente se mostrará y de tener un nivel más de abstracción con el manejo de tipos 11 compuestos, en forma análoga a los lenguajes C y Pascal. 13 CAP~VLO2 CONCEPTOS SOBRE DOMINIOS 1 2.5. Uso de Dominios en Tablas SQL se ha fstablecido claramente como el lenguaje de bases de datos relacional estándar Unas de la partes más importantes de este lenguaje son las siguientes: - Lenguaje dL definición de datos (LDD). El SQL LDD incluye instrucciones para d e h i r esquemas de relación (tabla), eliminar relaciones, crear índices, y modificar esquemas de relación. '1 - Lenguaje delmanipulación de datos. El SQL LMD incluye un lenguaje de consultas basado en el álgebra relacional y el cálculo relacional de tuplas. También incluye instrucciones para insertar, suprimir y modificar tuplas de la base de datos KOR93el. La relación es el elemento básico del modelo relacional, y se puede representar como una tabla (ver Tabla Z.l)."En ella podemos distinguir un conjunto de columnas, denominadas atributos, que representan propiedades de la misma y que están caracterizadas por un nombre, y un conjunto de filas llamadas tuplas, que son las ocurrencias de la relación. El número de filas de una relación se denomina cardinalidad, mientras que el número de columnas es el grado. Existen también dominios de donde lbs atributos toman sus valores. En la Figura 2.1 se representa la relación Jugador en donde aparecen los distintos elementos del modelo relacional. I/ AtributoI 1 Atributo 2 ....... Atributo n **** *** ******* ******* ******* Tupla 1 1) ******* ******* ******* ******* Tupla 2 ******* *** *** * ******* Tupla n . ,I ******* I1 'I Un esquema de relación denotado por R(A,:D,, A2:D,, ..., A,,:Dn) es un conjunto den pares atributo-dominio subyacente { (A,:D,) }, donde n es el grado del esquema de relación. El esquema es la parte deñniiona $ estática de la relación, que se corresponde con la cabecera cuando la relación se percibe como una tabla (al conjunto A de atributos sobre los que se define la relación se le suele denominar contexto de la misma). i/ !I 14 CAPíTULO 2 CONCEPTOS SOBRE DOMINIOS I / - b Gad" Figura 2.1. Representación de la Relación Jugador. Una ocurrenda de relación (llamada a veces simplemente relación) denotada por r(R) es un conjunto de m tuplas { t,, t2, ...,t. } donde cada tupla es un conjunto de n pares atributo-valor { I ( 4 V J }, donde V, es el valor j del dominio D, asociado al atributo 4;el número de tuplas m es la cardinalidad. La relación r(R) es por tanto, el conjunto de tuplas que, en un instante determinado, satisfacen el correhondiente esquema de relación R aunque el esquema de relación es relativamente- invariante, su extensión vana en el transcurso del tiempo. I A continuaciónveremos cómo deíinir una tabla usando dominios. Con los dominios definidos en las secciones anteriores podremos crear la tabla Temper con las columnas RoGeo de tipo PtoGeo, Ciudad de !+o Ciudad (dominio simple) y Temper de tipo real. Esto se puede lograr con la siguiente expresión del SQL estándar: I/ Ejemplo 2.6 'I CREATE TABLE Temper (PtoGeo Ciudad Temper 1) PtoGeo, Ciudad Float); li Tanto los atributos compuestos como los dominios compuestos pueden ser tratados, si así lo precisa el usuario y m o piezas monoiíticas de información, es decir, como valores atómicos. LO que permite mantener en cierta forma la restricción de atomicidad del modelo relacional. 15 I/ 3 CAPITULO 3 EL PROBLE,MA En este capítulo se presenta una descripción detallada de los problemas más importantes que involucran la dehicion y manipulación de dominios, en el Lenguaje de Definición de Datos (LDD) y el Lenguaje de M@pulaciÓn de Datos (LMD) del estándar de SQL para los cuales en capítulos subsecuentes se dará la metodologia de solución, así como su hplementación. Además se presentan los antecedentes previos a esta tesis con el ñn de ubicar este trabajo dentro de la infraeshuctura de "software" ya existente, así como el alcance del mismo. 3.1. Antecedentes del Proyecto 3.1.1. SiMBaDD En el Instituto de Investigaciones Eléctricas (IIE)se encuentra en desarrollo un Sistema Manejador de Bases de Datos astribuidas (SiMBaDD) experimental [SOSSS]. El SiMBaDD tiene las siguientes caractensticas: * Soporta el modelo relaciona1 * Utiliza la red Windows for Workgroups Ver. 3.11 WC931. * U t d el sistema operativo Microsoft Windows versión 3.11 [MIC93] * La red está constituida por tres computadoras personales AT. * La forma como opera el SiMBaDD, es a través de aplicaciones escritas en Turbo 16 CAP~TULO3 PLANTEAMIENTO Y ANALISISDEL PROBLEMA I1 Pascal [PAS911 con SQL intercalado * 11 Las instrucciones de SQL para el lenguaje de definición de datos son CREATE TABLE, CREATE INDEX, DROP TABLE y DROP INDEX; y para el lenguaje de manipulación de datos son INSERT, SELECT, UPDATE, DELETE, y la manipulación de cursores. .I El primer trabajo relacionado con bases de datos distribuidas (BDDs) [GUZ90] desarrollado en el departamento de Sistemas de Información del IIE consistió en el desarrollo de un paquete de rutinas que permiten el acceso a los archivos de una BDD por medio de programas escritos en Turbo Pascal. Estas primitivas permiten el acceso concurrente y transparente a las bases de datos distriiuidas.Lo ante* quiere decir que un programa en Pascal que hace uso de estas rutinas, puede accesar los archivos desde cualquier máquina de la BDD, sin necesidad de especificar en qué computadora de la red residen dichos archivos (a ésto se le conoce como transparencia de localización). Las d i n a s fueron escritas en lenguaje ensamblador y en Turbo Pascal, para trabajar con el sistema operativo DOS versión 3.3 WCSS]. El paquete esta constituido por dos niveles de programas (Figura 3! 1) PER881. SERVICIOS DEACCESOAARCHNOS Y REGISTROS EN FORMITRANSPARENT I I il I SERVICIOS DE ACCESO AARCHNOS Y REGISTROS DESDE TURBO PASCAL I "EL1 SERVICIOS DEACCESOAARCHNOS Y NIVEL O I/ Figura 3.1. Arquitectura del Manejador de Archivos. 11 Para facilitar la implementación del paquete, se consideró conveniente desarrollar un gnipo /I de rutinas (nivel 1) que permiten abrir y cerrar archivos, así como leer, escribir, reseivar, y liberar registros en cualquier computadora de la red. Estos servicios se ofrecen como funciones del sistema operativo (denominadas interrupciones), las cuales pueden ser invocadas por medio de lenguaje ensamblador. El nivel 2 ofr&e los servicios de transparencia de localización como un conjunto de nitinas cuya característica es gue permite a los programas de aplicación accesar información de un archivo cualquiera de una BDD, sin necesidad de indicar en qué computadora o disco se encuentra el archivo. Esto se logra ?or medio del Diccionario de Archivos Distribuidos (DAD). El DAD contiene entre otras cosas, una lista de los nombres de los archivos que constituyen la BDD junto con la localización de cada archivo ( o sea, la máquina donde se encuentra cada archivo) y la descripción del I/ registro. 1) 17 !I CAPíTULO 3 PLANTEAMIENTO Y ANALISISDEL PROBLEM 1) El segundo trabajo [ARE921 desarrollado en el IIE consistió en un precompilador del 11 lenguaje SQL,el cual facilita el uso del manejador de archivos (descrito anteriormente), por parte de cualquier desarrollador de aplicaciones que conozca de bases de datos. Este precompilador está basado en el estándar del SQL [ISO89], el cual consta de (1) un lenguaje de de6nición de datos (LDD) que permite la creación, definición y eliminación de las tablas de una base de datos, y (2) un lenguaje de manipuiación de datos (LMD) que sirve para manipular las tablas con operaciones tales como insertar, borrar o consultar renglones de las tablas. De esta manera, los desarrolladores familiarizados con SQL pueden d e h i r y manipular una BDD sin necesidad de conocer las rutinas y los argumentos del manejador de archivos. I/ El precompddor está constituido por un reconocedor de mshicciones de SQL y un traductor (el cual consiste a su vez de un analizador y generador de código). I( El reconocedor de mshicciones de SQL tiene la función de buscar en el programa fuente de SQL intercalado en Turbo Pascal y reconocer cuándo se inicia una instrucción de SQL. I1 El analizador se encarga de identificar los elementos del lenguaje SQL agrupándolos en I construccioneslógicas, y consta de tres partes: I .- El analizado: léxico que se encarga de leer las instrucciones en SQL del programa fuente (carácter por carácter) para reconocer los elementos mínimos del lenguaje llamados unidades léxicas (tokens). I/ 2- 3.- El analizador sintáctico que verifica que la secuencia de las unidades léxicas sean legales de /I acuerdo a las reglas sintácticas especificadaspor la gramática independiente de contexto del lenguaje SQL. I/ El analizador semántico que se encarga de verificar que las instrucciones tengan una semántica o significado correcto 11 El generador de código produce código en Turbo Pascal para DOS que es semánticamente equivalente a la instdcción de SQL analizada. El código generado incluye llamados a los seMcios del manejador de archivos descrito anteriormente. tt Todas estas partes actúan en un solo paso de la siguiente manera: cuando se detecta el símbolo "$", que indica el inicio de una instrucción de SQL,el precompilador transfiere el control al analizador sintácticd (ver Figura 3.2), éste utiliza un esquema de traducción dirigido por sintaxis, el cual está basado en la idea de que las reglas de producción de la gramática del lenguaje SQL se usen para dirigir el tipo de procesamiento que se va a efectuar en las construcciones de lenguaje. De esta forma, para cada regla de producción, el analizador sintáctico puede llamar al análisis semántico apropiado"y.la rutina de generación de código para generar código Turbo Pascal para DOS. i/ 18 CAPíTULO 3 II PLANTEAMIENTO Y A N h S I S DEL PROBLEMA II 1; Figura 3.2. Diagrama a Bloques del Precompiiador. / 3.1.2. Tipos de Datos del SiMBaDD Antes del desarrollo de está tesis el SiMBaDD solamente contenía los principales tipos de datos básicos del SQL, que son los siguientes: li CHAR SMALLINT,I INTEGER DECIMAL I/ SMALLFLOAT FLOAT I/ NUMERIC SERIAL DATE I/ 3.2. Alcance de la Tesis El alcance de ia tesis comprende tanto la deijnición y manipulación de dominios simples como compuestos, así comomtambién el uso de estos en el LMD y LDD del SQL estándar, cumpliendo con las siguientes caracteksticas: Definu dominios con restricciones. Definir y mdpular dominios compuestos. 19 I1 CAP ~ U L O3 PLANTEAMIENTO YANALISIS DEL PROBLEMA - Crear columnas en términos de dominios previamente definidos. - Veriiicar que se evite comparar columnas definidas sobre dominios diferentes I/ - Deñnir sobre un dominio compuesto las operaciones de comparación válidas (=, <>, >, <, >= 11 y "). - Eliminar d o k o s simples y compuestos. Las herramientas utilizadas para realizar el trabajo son las siguientes: I/ - Turbo Pascal para Windows versión 1.5 [pAS91]. 11 - Red local de computadoras con el sistema operativo multiusuario Microsoft Windows for Workgroupsyer. 3.1 1 [MIC93]. I1 3.3. Lenguaje de Defimición de Datos 3.3.1. Dificultades Resolver en la Creación de Dominios Como se ha 'hencionado, en el IIE existe un prototipo de SMBDD, que no considera el manejo de dominios, con lo cual se presentan d~cultadespara la definición de éstos, las cuales se describen en las siguientes secciones. 3.3.1.1. Dificultades a Resolver en la Creación de Dominios Simples /I Uno de los inconvenientes para la definición y uso de dominios simples, es que el precompilador no reconoce la instrucción para su definición y uso, así como tampoco tiene previsto r dónde guardar la infdmación que se genere. Esto crea dos problemas: 1 - Modificar el pkecompilador en la parte del analizador léxico, sintáctico y semántico, para que reconozca las instrucciones de definición y manipulación de dominios. 1 2.' Modificar el Diccionario de Archivos Distribuidos (DAD), para que permita almacenar la información de los dominios y pueda ser recuperada posteriormente. 3.3.1.2. Dificultades a Resolver en la Creación de Dominios Compuestos Por principio de cuentas, el estándar SQL no incluye una sintaxis que p d a defuiir dominios compuestos, por lo cual se tiene que defuiir una gramática para tal efecto. '1 20 I/ CAPfTlJLO 3 PLANTEAMIENTO Y ANALISIS DEL PROBLEMA I; Con respecto a la creación y uso de dominios en el precompilador, éste presenta los mismos inconvenientes que11en la creación de los dominios simples, Otra de las dificultades en la creación de los dominios compuestos, es que se pueden presentar ciclos en su creación. Esto es, que el elemento de un dominio compuesto (x), sea otro dominio compuesto (y) y éste o un elemento propio referencie a x (io tenga como elemento) o un elemento de los elementos dey lo haga. 1 Por ejemplo, supongamos que existen el dominio compuesto DATOS con los elementos Clave Nombre I1 I/ y el dominio compuesto CLAVE con los elementos: Numero Elemento 11 I1 Eiitonces, se presenta un problema al tratar de crear el dominio compuesto ELEMENTO con 10s elementos Nombre Datos / I/ El elemento DATOS del dominio compuesto ELEMENTO a crear, es un dominio compuesto que tiene como elemento propio a CLAVE, y éste a su vez contiene a ELEMENTO; lo cual, como se podrá observar crea un ciclo (ver Figura 3.3). Esto trae como consecuencia que al tratar de eliminar un dominio involucrado, el manejador no lo permitiría ya que para ésto, el dominio no tendría que estar referido, y si lo está, es porque se hace uso de él y por lo tanto es necesario I/ mantenerlo para poder accesar sus datos. 11 D#lUrnci ‘I I/ Figura 3.3. Presentación grafica de un Ciclo. 21 CAPíTULO 3 /I PLANTEAMIENTO Y AN&SIS DEL PROBLEMA 3.3.2. Dificultades1 a Resolver en la Defmición de Tablas Para crear tablas que permitan definir sus columnas con dominios simples y compuestos, hay 1) que mdicarle al precompilador que las columnas pueden aceptar nuevos tipos de datos Además para una columna deñnida sobre un dominio compuesto, se necesita asignar el espacio necesario para cada uno de sus elementos Otro inconveniente con el manejo de los dominios compuestos en columnas definidas en términos de éstos, es la manipulación de los NULOS, ya que queda ambigua la definición delvalor nulo en ella @orqueal mdicarle que permita nulos la columna antes mencionada no se sabe '1 si será sobre todos sus elementos o sólo sobre algunos), aparte de que actualmente el uso del valor NULO no ésta bien definido I/ Por ejemplo, supongamos que la columna Edad con Nombre igual a JOSE de la Figura 2 2 tiene un valor nulo, ninguna de las siguientes comparaciones resulta verdadera. I1 Edad> 25 Edad <= 25 Edad= 25 Edad025 I/ Esto se debe 'a que las expresiones escalares de cálculo, en las cuales uno de los operandos es nulo, dan nulo como resultado, y las de comparación, en las cuales uno de los comparandos es nulo, dan como resultado el valor lógico desconocido PAT93fl. 1) &o punto a considerar en la creación de tablas, es que no estaba previsto el almacenamiento de la información relativa al manejo de dominios, lo cual involucra un cambio en la estructura del DAD, así como la generación del código necesario para realizar tal actividad Con lo antes kicho al crear la tabla Temper del siguiente ejemplo: Ejemplo 3.1 II CREATE TABLE Temper (PtoGeo PtoGeo NOT NULL, Ciudad Ciudad DEFAULT 'Cuernavaca', Temper Temper); I' ! la columna compuesta F'toGeo de ésta no deberá permitir valores nulos debido a la cláusula NOT NULL, el valor por omisión de la columna Ciudad será Cuemavaca, y por Último, la columna I Temper podrá aceptar valores nulos ya que no tiene tal restricción. Se ha dete-do que una columna definida en base a un dominio compuesto no permita una cláusula DEFAULT; ya que para asignarle un valor este debe corresponder con el tipo de dato de la columna, io cual se podrá violar al tener más de un tipo de dato en una c o b a compuesta. II I/ 22 CAPfTLEO 3 PLANTEAMIENTO Y ANALIS DEL PROBLEMA ,I 3.3.3. Dificultades a Resolver en la Definición de Índices 11 Primeramente para poder crear índices con columnas deñuidas en base a dominios, tanto simples como compuestos, bay que indicarle al precompilador que reconozca los nuevos tipos de datos. Cuando se d e h e un índice en base a una columna deñuida sobre un dominio compuesto, la creación del mdice debe tomar todos los elementos que integran la columna y no sólo uno como se bacía anteriormente.I /I 3.3.4. Dificultades a Resolver en el Borrado de Dominios Para borrar I& dominio, este no debe ser referido tanto en la definición de una tabla como por otro dominio (en este caso un dominio compuesto), ya que la existencia de tal hecho, nos indica que el dominio que se quiere borrar se está utilizando. Por lo tanto sus datos están siendo utilizados y no se deberá permitir eliminarlo. 1 3.3.5. Dificultades a Resolver en el Mantenimiento de Dominios I1 Así como se puede crear un dominio en cualquier momento con CREATE DOMAIN, también se podrá alterar un dominio ya existente, por ejemplo cambiar o eliminar su cláusula DEFAULT, cambiar o eliminar su cláusula de redcción. Para tal efecto primeramente se tendrá que indicar el dominio a modificar y validar que exista, posteriormente se deberá verificar que los cambios a realizar edén permitidos o acordes al dominio @or ejemplo en el caso de incluir el valor por DEFAULT, que este sea del mismo tipo base que el del dominio), y por Último se necesitará guardar los cambios realizados i 3.3.6. Dificultades a Resolver en la Declaración de Variables Para poder &cenar en forma temporal los valores que se generen durante la manipulación de las columnas compuestas, deberán existir variables anfitrionas que correspondan al mismo tipo de dato que las columfias; por lo tanto la mstnicción BEGIN DECLARE SECTION deberá permitir la deñnición de estas variables. Para tal efecto, bay que indicarle al precompilador que acepte los nuevos tipos de datos, así como también que se genere el código necesario para postenomente generar dichas variables Ai contar con revos tipos de datos para las variables anfitrionas, el DAD debe soportar tales estructuras y relaciom éstas con las estructuras utilizadas por la cláusula INTO como la instrucción FETCY en donde las variables anfitrionas son referidas. !I 23 CAPkULO 3 PLANTEAMIENTO Y ANALISIS DEL PROBLEMA I/ 3.4. Lenguaje de Manipulación de Datos 3.4.1. Dificultades'h Resolver en la Instrucción INSERT Para realizar la inserción de un renglón a una tabla específica, se deben proporcionar 10s valores correspondientes a cada columna de la tabla. Por ejemplo si se desea insertar un nuevo renglón a la tabla Temper con la siguiente instrucción de SQL 1 Ejemplo 3.2 INSERT INTO TEMPER '1 VALUES (:PtoGeo, "Mexico", 24); cada valor específicado debe ser mapeado a su correspondiente campo del registro que representa a la tabla y llevado :un contenedor (buffer) de memoria. En el caso de ique la tabla tenga cuando menos una columna o más en donde su tipo de dato esté definido en base a un dominio, es necesario garantizar la integidad de los datos que se almacenen en la tabla. Si una columna está definida sobre un dominio compuesto, la verificación de I sus valores será elemento por elemento, hasta completar la totalidad de sus elementos, incluyendo los elementos de sus elementos compuestos; en caso contrario sólo se verificará si el valor a insertar para tal columna satisface la condición de restricción'del dominio simple sobre la que está definida I/ Si el valor a insertar es NULL y el campo de la tabla está deñnido en base a un dominio compuecto, el problema estriba en declarar nulo el campo compuesto como tal o cada elemento que lo compone Tomemos por ejemplo la misma tabla Temper I/ Ejemplo 3.3 1 I/ INSERT INTO TEMPER VALUES (NULL, "Mexico", 24); ¿cómo poder indicarle que el primer valor a insertar en la tabla Temper corresponde a una columna compuesta?. I/ 3.4.2. Dificultades a IResolver en la Instrucción SELECT La instrucción que se encarga de realizar la recuperación (selección) de información de la BDD es el SELECT! Esta instrucción designa una tabla virtual cuyos renglones serán accesibles dentro de un programa de aplicación mediante el mecanismo de los cursores. 'I Si por ejemplo, se quiere consultar la tabla Temper, y saber qué Ciudad tiene una temperatura mayor que 2 5 ; se somete a un proceso de selección el cual regresa un conjunto de renglones que cumplan la condición ITemper > 25. I/ 24 :! CAPfTlEO 3 P.MVTEAMIEhT0 Y ANASIS DEL PROBLEMA I para poder utilizar campos definidos sobre dominios en la cláusula WHERE, primeramente hay que imih& alpreconrpilador, en SU parte del analizador sintáctico y semhtico, que permita los m~evos@OS de datos. En el caso de que se utilice una columna compuesta 0 al& elemento de ésta, la comparación entre los datos de la columna compuesta y la variable anfitriona definida en base a un dominio compuesto para que sea compatible con la columna, debe realizarse en forma transparente para el programador, y sea el manejador quien tenga que llevar el control en la comparación (elemento por elemento), a la vez de verificar si el operador relaciona1 en uso está I/ permitido para el dominio compuesto. Ejemplo 3.4 I/ SELECT INTO FROM WHERE I/ PtoGeo.Longitud :PtoGeo.Longitud Temper PtoGeo.Latitud = :PtoGeo.Latitud; I) al seleccionarla columna compuesta F'toGeo.Longitud de la tabla Temper implícitamente se definen todos SUS elementos (PtoGeo.Longhd.Grado y RoGeo.Longhd.Mnuto)para lo cual el manejador deberá percatarse de la situación a la vez de verificar que las variables anñtrionas donde se almacenará la información que cumpla la cláusula WHERE sean compatibles, es decir estén definidas sobre el mismo tipo $e dato. Otro de los problemas que ocasiona el manejo de columnas compuestas ocurre en la cláusula WTO, ya que al seleicionar una columna de estas características se le tiene que reservar el espacio necesario para poder :almacenarlos valores obtenidos en la cláusula de selección; y como se podrá observar, el tamaño'ta asignar es variable (dependiendo del número y tipo de los elementos del dominio compuesto). Algo parecido sucede con la instrucción FETCH. li Como Pascal no tiene un mecanismo para manejar conjuntos de renglones como un solo objdo, entonces se debe utilizar el mecanismo de cursores. Un cursor es un mecanismo de SQL cuyo propósito es recorrerle1 conjunto de renglones que se obtiene de una operación de selección, uno a la vez. Antes de recorrer el cursor, es necesario mantenerlo en estado abierto para lo cual se usa la mshicción OPEN. La instrucción FETCH se usa para recuperar información de un cursor en estado abieao; esta instrucción se ejecuta hasta que se terminan los renglones de la tabla virtual. Una vez finalizado el recorrido se debe usar la instrucción CLOSE para cerrar el cursor. il 3.4.3. Duicultades a Resolver en la Instrucción UPDATE I/ La instrucción UPDATE presenta los mismos problemas que los de la cláusula SELECT al momento de asignar el espacio requerido en la cláusula SET en el caso de modificar una columna deíinida en base a & dominio compuesto, a semejanza con la cláusula INTO de la instrucción SELECT. Por ejemplo, si se desea actualizar la tabla Temper con la siguiente instrucción: /I I1 25 I/ CAP h V L O 3 Ejemplo 3.5 PLANTEAMIENTO Y A N A ~ I S I SDEL PROBLEMA 11 :I UPDATE Temper SET PtoGeo = :PtoGeo WHERE Ciudad ='Cuernavaca'; /I Al tratar de msertar los nuevos valores presenta los mismos problemas que en la instrucción INSERT. Además Presenta el mismo inconveniente en la cláusula WHERE, en donde hay que indicarle al precomigador que permita los nuevos tipos de datos (dominios). I) 3.4.4. Dificultades a Resolver en la Instrucción DELETE 1 Para suprimir renglones de una tabla es necesario ejecutar una instrucción DELETE de SQL. Por ejemplo, consideremosla siguiente instrucción de borrado sobre la tabla Temper: I/ Ejemplo 3.6 1 DELETE FROM Temper WHERE Ciudad = 'Tampico'; El problemal'es el mismo que se presenta en las instrucciones SELECT y UPDATE en la cláusula WHERE, para identificar los renglones que cumplan la condición. I1 Para eliminar un renglón de una tabla, solamente se necesita cambiar a uno el valor del campo oculto Alta, lo cual borra el registro lógicamente. Cuando existen indices relacionados a la tabla, éstos se deben a&, lo que implica que también se debe eliminar del índice el valor de la clave asociada con el registro a eliminar de la tabla. 26 i! 4 CAPITULO En este capíttilo se desaiben las estructuras y métodos utilizados para definir y manipular los dominios simples y dominios compuestos, así como la gramática propuesta para definir y borrar los dominios compuestos. También se presenta la sohción para usar los dominios en cada una de las instrucciones del lenbaje SQL soportadas por SiMBaDD. Para explicar,cada una de las instrucciones, se presenta un ejemplo. En el se incluyen los aspectos más sobresalientes de la instrucción. 4.1. Alternativas para la Implemeotaeión de Dominios Compuestos Para poder utilizar columnas definidas en términos de dominios compuestos en forma normal en el lenguaje de manipulación de datos (LMD), se analizaron dos posibles soluciones, que se describen a continuackón. Para cada elemento del dominio compuesto a usar, se utilizaría un campo de la estructura TRegTabla del dicciondo de datos, la cual se demiirá m á s adelante . El uso de un campo por cada elemento, es con el fin de utilizar la estructura ya existente, dado que cada elemento del dominio compuesto es como si'fuera una columna normal Esto tiene la ventaja de que evita tener que cambiar tanto las estructuras base que se tienen, así como también el de tener toda la información de la columna compuesta en una cola estructura. Por ejemplo, para guardar la columna PtoGeo de la tabla Temper deñnida sobre el dominio compuesto PtoGeo, la estructura de TRegTabla quedaría de la forma que se muestra en la Tabla 4.1. En cuanto al almacenamiento de los valores nulos se propuso manejarlos de igual forma, es decir un campo para cada elemento de la columna compuesta y otro para la columna del valor NULL, con lo cual el usuario podrá operar los valores NüLL tanto en forma individual (por cada elemento) como grupa1 (por columna compuesta). 27 CAPíTuLO 4 METODOLOGh DE SOLUCidN I1 PtoGeo PtoGeo I/ Latitud PtoGeo Grado RoGeo Minuto PtoGeo Longitud PtoGeo PtoGeo Grado Minuto ,) Tabla 4.1. Representación de PtoGeo en TRegTabla, Campo por Elemento. La otra opdión, es la de usar un campo de TRegTabla por cada dominio compuesto, quedando la información a utilizar para la manipulación de los datos de la columna en el archivo de los dominios compuestos, y sería como se muestra en la Tabla 4.2. PtoGeo Tabla 4.2. Representación de PtoGeo TRegTabla, Campo por Dominio Compuesto. I/ Esta Ú l h a opción tiene la desventaja de que, al momento de manipnlar los datos de la tabla, se tiene que ir a buscar la información concerniente a los dominios, a su estructura correspondiente. Esto implica abrir otra archivo y realizar la búsqueda de los elementos del dominio compuesto para conocer entre otros datos, la posición del elemento dentro del registro de la tabla, su tipo base, tamaño, y si está dado de alta, lo que propicia realizar más operaciones y por consiguiente un mayor tiempo de respuesta. En caso de que se quisiera tener toda ésta información en la estmctura de TRegTabla, se tendría que cambiar completamente su estructura así como también otras estructuras auxiliares y efectuar un cambio si no completo por lo menos en la gran mayoría de los procedimientos y funciones del SiMBaDD que permiten generar el código equivalente a las instrucciones de SQL. La ventaja de esta opción es la de tener todos los elementos del dominio compuesto en un solo campo. I/ 'I Debido a los inconvenientes de la Última opción se eligió la primera: para cada elemento del dominio compuesto usar un campo de la estructura TRegTabla. I/ 4.2. Gramática paraI/ la Definición de Dominios 4.2.1. Gramática para la Defmición de Dominios Simples I/ El SQL estándar (SQL92) soporta la definición de dominios simples. La gramática está basada en la notación Backus-Naur-Form (BNF), y se implementó en el analizador sintáctico y semántico delpreco&ilador del SiMBaDD, el cual usa el método de traducción dirigido porsintaxis [ARE92]. La gramática para el uso de los dominios se muestra a continuación: 11 28 / CAPiTULO 4 METODOLOGh DE SOLUCIdN I/ 4.2.1.1. CREATE DO- La sintaxis de la gramática para la definición de dominios simples es la siguiente: - Defmición de un Dominio Simple II Función.- Permite definir un dominio simple. I1 <Instrucción de definición de dominio simple>::= CREATE DOMAIN <Identificador> [AS] q i p o de dato> [<Cláusula default>] [<Restricción de dominio>]; 11 -Tipo de Dato ¡ Función.- EspeciGca un tipo de dato. i q i p o de dato>::= CHAR [(<Valor numérico>)] I NUMERIC [(<Valor numérico> [,<Valor numérico>])] DECIMAL [(<Valor numérico> [,<Valor numérico>])] INTEGER 1 'I SMALLFLOAT I FLOAT 1 I I I/ - Cláusula Default 'I Función.- Especfica un valor por omisión para una definición de columna. <Cláusula default>::= DEFAULT <Valor por omisión> !I - Valor por Omisión Función.- Especifica un valor para la cláusula default. <Valor por omisión>::= <Literal> ¡I - Restricción . I NULL de Dominio Función.- Especifica el conjunto de valores permitidos para el dominio. 4 29 II CAPfTVLO 4 METODOLOGfA DE SOLUCIdN I/ <Restricción de dominio>::= CHECK (<Condición de restricción>) I/ - Condición de Restricción I/ Función.- Permite definir los valores que contendrá una columna o dominio. 11 <Condición de restricción>::= <Término booleano> I <Término booleano> AND <Condición de restricción> I <Término booleano> OR <Condición de restricción> Con la gramática antes expuesta (lo cual da solución al punto 3.3.1.1), se puede crear el dominio Gradocon la siguiente instrucción: Ejemplo 4.1 ,I CREATE DOMAIN Grado INTEGER DEFAULT 1 CHECK(Grado >= O AND Grado <= 179); Una vez creado el dominio simple Grado, el rango de valores que permitiría senan valores de tipo entero iguaiek o mayores a O y menores o iguales a 179 acorde a su cláusula de restricción que restringe los postiles valores que puede tomar un grado (en un punto geográfico); y el valor por omisión del dominio sería 1. I( 4.2.1.2. ALTER DOMAIN A continuación se presenta la gramática de la instrucción para modificar un dominio shple ,I (lo cual da solución ai punto 3.3.5). I II -Modificación de Definición de Dominio il Función.- Permite modificar la definición de un dominio. <InstrucciÓnlde modificación de dominio>::= ALTER DOMAIN <Ideutificador> <Acción de modificación de dominio>; - Acción de Modificación de Dominio Función.- Permite especificar la acción de modificación de un dominio I/ ME TO DO LOG^ DE S O L U C I ~ N CAPfTULO 4 <Acción de'modifcación de dominio>::= <Adición de la cláusula default> I <Eliminacioh de la cláusula default> I <Adición de la definición de restricción del dominio> I <Eliminación de la definición de restriccióu del dominio> I/ - Adición de la Cláusula Default Función.- h a d e la cláusula default a un dominio. <Adición de la cláusula defaulV::= SET <Cláusula default> I -Eliminación de la Cláusula Default '1 Función.- Elimina la cláusula default de un dominio. I/ <Eliminación de la cláusula default>::= DROP DEFAULT I/ - Adición de la Cláusula de Restricción /I Función.- Añade la cláusula de restricción a un dominio. I/ <Adición de la definición de restricción del dominio>::= ADD <Restricción de dominio> .I - Eliminación de la Cláusula de Restricción Función.- Elimina la cláusula de restricción de un dominio <Eliminación de la definición de restricción del dominio>::= DROP CONSTRAINT <Identificador> Para ejempqcar el uso de la instrucción ALTER DOMAIN, supongamos que se desea e l i a r la cláusula DEFAULT del dominio Grado. Esto se puede hacer con la siguiente instncción: Ejemplo 4.2 1 ALTER DOMAJN Grado DROP DEFAULT; 31 /I /I CAPfTULO 4 METODOLOGIÁ DE SOLUCi6N \ 4.2.1.3.DROP DOMAIN La sintaxis de la instrucción para dar de baja un dominio simple es la siguiente I - Eliminación de un Dominio 1 Función.- Pamite eliminar un dominio <Instrucción de eliminación de dominio>::= DROP DOMAIN <Identihador>, Lo sintaxis ahtes expuesta permite dar solución al punto 3 3.4 4.2.2. Gramática para la Defmición de Dominios Compuestos II Ya que en e! estándar de SQL no se incluye una sintaxis que permita definir dominios compuestos, se desarrolló una extensión a la norma del SQL, especificamente al LDD para deñnir dominios compuestos La gramática está basada en la notación Backus-Naur-Form (BNF), y se implementó con el analizador sintáctico y semántico del precompilador del SiMBaDD, el cual como ya se ha mencionado, usa el método de traducción dirigido por sintaxis. Las extensiohes realizadas tuvieron como objetivo permitir la creación de dominios compuestos, para operar con éstos (tipos de datos) en forma normal También fue necesaiio implementar la instruhción que permite borrar los dominios compuestos. 4.2.2.1.CREATE COMPOUND DOMAIN En esta sección se presenta la sintaxis de la gramática para la definición de dominios compuestos, que da solución alpunto 3.3.1.2. - Definición de un Dominio Compuesto Función.- Pefmite definir un dominio compuesto. I( <Instrucción de defmición de dominio compuesto>::= CREATE COiyíPOUND DOMAIN <Identiñcador> (<Elemento de dominio compuesto> [(,<Elemento de dominio compuesto>) ...I [<Cláusula de operadores permitidos>]); 32 I1 I/ I/ I/ METODOLOGh DE SOLUCl6N CAPÍTULO 4 ,I - Elemento de Dominio Compuesto I/ Función.- Especifica un elemento del dominio compuesto I/ <Elemento lde dominio compuesto>::= <Identificador de elemento> <Identificador de dominio> I/ I/ - Identificador de Elemento I/ Función.- Especifica un elemento del dominio compuesto 1 <Identificador de elemento>::= <Identificador> I/ - Identificador de Dominio Función.- Especifica el tipo de dato de un dominio simple o un dominio compuesto <Identificad& de dominio>::= <Identificador de dominio simple> I <Identificador de dominio compuesto> - Cláusula de Operabores Permitidos I/ Función.- Especifica los operadores relacionales permitidos. I/ <Cláusula de operadores permitidos>::= OPERATORS (<Lista de operadores permitidos>) I/ - Lista de Operadores Permitidos t Función.- Permite definir los operadores relacionales permitidos I/ <Lista de operadores permitidos>::= <Operador de comparación> [{,<Operador de comparación>}...I Con la gramática extendida se puede crear un dominio compuesto PtoGeo que tenga como elementos Latitud y Longitud, los que serían a su vez otros dominios compuestos. Suponiendo que éstos ya estuvieran creados, la instrucción para crear F’toGeo sería la siguiente: CAP~TULO4 Ejemplo 4.3 METODOLOGiA DE SOLUCl6N /I CREATE COMPOUND DOMAIN PtoGeo (Latitud Latitud, Longitud Longitud); 4.2.2.2.DROP 1 COMPOUND DOMAIN La instmcción para dar de baja un dominio compuesto, se da a continuación: - Eliminación de un Dominio Compuesto I1 Función.- Permite eliminar un dominio compuesto. <Instrucción de eliminación de dominio compuesto>::= DROP COMPOUND DOMAIN <Identi€tcador>; Para born4 un dominio compuesto, con la gramática extendida que se tiene, se usana la siguiente instrucción (que da solución ai punto 3.3.4): Ejemplo 4.4 DROP COMPOUND DOMAIN PtoGeo; ( I( 4.3. Gramática para la Definición de Tablas e hdices 4.3.1. CREATE TABLE La instrucción para crear una tabla se da a continuación: -Definición de Tabla Función.- Permite defiuir una tabla base. <Definición de tabla>::= CREATE ThBLE <Identificador> <Lista de elementos de tabla>; -Lista de Elementos de Tabla Función.- Define los elementos de una tabla. 1 34 I I! CAPiTULO 4 ME TO DO LOG^ DE S O L U C ~ ~ N I <Lista de elementos de tabla>::= (<Elemento de tabla> [{,<Elemento de tabla>}...]) - Elemento de Tabla /I Función.- Define una columna o una restricción de una tabla. <Elemento de tabla>::= <DefiniCiÓn de columna> I <Definición de restricción de tabla> Y - DefmiciÓn de Columna Función.- Define una columna de una tabla. II <Definición de columna>::= <Identificador de columna> {<Tipo de dato> I <Identificador de dominio>} [<Cláudla default>] [<Definikión de restricción de columna>] - Definición deI/Restricción de Columna Función.- Especifica restricciones a una columna. 1 <Restricción de columna>::= [<Definición de nombre de restricción>] <Restricción de columna> /I - Restricción de Columna I1 Función.- Especifica restricciones de unicidad, referencia1 y veriñcación a una columna. <Restricción de columna>::= NOT NULL I [<Espe&caciÓn de unicidad>] I <Especificación referemial> I <Verificación de la definición de restricción> I/ -Especificación de Unicidad il Función.- Especifica valores únicos para una columna. i/ 35 CAP~TULO4 ‘1 METODOLOG~A DE S O L U C I ~ N <Especificación de unicidad>::= UNIQUE I PRIMARY KEY I1 - Definición de Restricción de Tabla Función.- Especifica una restricción de integridad. It <Restri¿ciÓn de tabla>::= <Definición de restricción de unicidad> 1 <Definición de restricción referemial> I <Verificación de la definición de restricción> 1 -Definición de Restricción de Unicidad Función.- Especifica valores únicos para una o varias columnas. 11 <Restricción de unicidad>::= <Especificación de unicidad> (<Lista de columnas de unicidad>) I - Lista de Columnas de Unicidad Función.- Establece los identificadores de columnas que contendrán valores únicos. <Lista be columnas de unicidad>::= <Identificador> [{ ,<Identificador>}...] - Definición de Restricción Referencial Funciób.- Especifica los identificadores de columnas que referencian a otras en otra tabla. <Restricción referential>::= FOREING KEY (<Columnas referidaQ) *Especificación referemial> - Especificación Referencial Función.- Especifica valores únicos para una o varias columnas. II <Especificación referential>::= REFERENCES <Columnas y tabla referidae 36 METODOLDG~ DE SOLUCldN CAP~TULO4 I - Columnas Referidas Función.- Establece los identificadores de columnas que referenciaran a otras I1 <Columnas referidas>::= <Lista de columnas referida9 - Columnas y Tabla Referidas Función.- Especifica la tabla y los identificadores de columnas que son referidas <Columnas y tabla referidas>::= <Identificador de tabla> [(<Lista de columnas referidas>)] - Lista de Columnas Referidas Función.- Establece los identificadores de columnas referidas <Lista de columnas referidas>::= <Identiñcador> [{,<Iden&cador>} m i ...I - Verificación de la Defuición de Restricción 1 Función.- Especifica una condición para una tabla. <Verificación de la defmición de restricción>::= CHECK (<Condición de restricción>) li Por ejemplo, la tabla Temper con los campos PtoGeo definido sobre u11 dominio compuesto, Ciudad y Temper ambos deíinidos sobre dominios simples se puede crear con la siguiente instmcción (que da solución alpunto 3.3.2): I1 Ejemplo 4.5 I! CREATE TABLE Temper (PtoGeo PtoGeo, Ciudad Ciudad, Temper Temper); 37 ME TO DO LOG^^ DE ~ O L ü C l b N CAPfTULO 4 u 4.3.2.CREATE INDEX La instrucción para crear un índice a una tabla es II - Definición de índice Función.- Permite definir un índice a una tabla I1 <DefmiciÓn de índice>::= CREATE W Q U E ] INDEX <Identiñcador> ON <Identiñcador de Tabla> (<Identiñcador de columna> [{,<Identiñcador de columna>}.. .] ); I) Por ejemplo, para crearle un índice a la tabla Temper del Ejemplo 3.1, seria con la siguiente instrucción (que da solución alpunto 3.3.3): Ejemplo 4.6 ' CREATE INDEX TernLong ON Temper (PtoGeo.Longitud); 4.4. Diccionario de Datos El diccionario de archivos distribuidos (DAD) constituye una de las estructuras mas importantes qde usa el sistema manejador de bases de datos distribuidas (SiMBaDD). El DAD contiene hformación acerca de las tablas y de los dominios de la BDD. Esta información es utilizada por los programas de aplicación y gracias a ella se logra la transparencia de localización y la manipulación de dominios. 'I Anteriormente la estructura con la que contaba el DAD, proporcionaba toda la información referente a la estructura y características de las tablas y a la localización de éstas. 11 La estructura del diccionario de tablas es la signiente: TRegTabla=RECORD NombreT: íTipoT: ActivaT: LongT: TotalCols: ITotalIndsT: PrimKey: ColsT: IndsT: END; '' STRING[ 121; CHAR; BOOLEAN; INTEGER, 1..MaxCols; O..MaxIndices; ARRAY[l ...MaxCols] OF BYTE; ARRAY[l ...MaxCols] OF TColumna; ARRAY[l ...Maxindices] OF TIndice; 38 I I ME TO DO LOG^ D E S O L U C I ~ N CAPITULO 4 donde NombreT Es el nombre de la tabla con la extensión “.BDI”. TipoT Es el tipo de tabla la cual puede ser “B” si se trata de una tabla base o una “V“ si se trata de una vista. ActivaT Indica si la tabla está dada de alta en el archivo o no. LongT jontiene la longitud de la tabla en bytes, dependiendo del número y tipo de dato de las columnas de la misma. TotalColsT Número de columnas que tiene definida una tabla. ‘I TotalIndsT Número de índices que tiene definidos una tabla. PrimKey Indica si la tabla tiene definida alguna llave primaria ColsT Arreglo que contiene para cada elemento, la información para cada una de las columnas de la tabla. LodT p e g l o que contiene para cada elemento, la información para cada uno de los índices de la tabla. A conhnación se describen los tipos de registro asociados (TColumna y Tindice) que se usan en TRegTabla. 11 TColumna=RECORD NombreC: STRlNG[12]; TipoC: TipoColumna; hctivac: BOOLEAN; LongC: INTEGER, DesplazaC: INTEGER; NuloC: BOOLEAN; END; ‘I NombreC Contiene el nombre de la columna TipoC Contiene el tipo de dato de la columna: integer, longint, real, o string. ActivaC Indica si la columna ésta dada de alta en la tabla o no. LongC IContiene la longitud de la columna en bytes, dependiendo del tipo de dato de la misma. 39 ‘I .. I/ ME TO DO LOG^^ DE SoLUCIdN CA PfTULO 4 DesplazaC Posición donde se encuentra la columna a partir del inicio del contenedor para thsferencia entre variables anfirionas y disco. NdoC indica si la columna acepta valores nulos TIndice=pCOm NombreInd: ActiVoI: LongLlaveInd: TotalColsInd: ColsInd: END; STRiNq 121; BOOLEAN; INTEGER; l..MaxCols; ARRAY[l..MaxCols] OF BYTE; NombreInd Nombre del archivo asociado con el índice con extensión ".IDX". Activo1 Indica si el índice ésta dado de alta en la tabla o no. LongLlaveInd 'I Contiene la longitud en bytes de la iiave del índice TotalColsInd Número de columnas que participan en el índice. I! Colsind Contiene los números de las columnas sobre las que está definido el índice. 4.4.1. Actualización del Diccionario de Tablas 11 Alinicio de la tesis, como se contaba para la definición de columnas sólo con los tipos base (integer, longint, real, o string) que proporcionaba el SiMBaDD, el campo TipoC de TColumna, que guarda el tipo de dato de la columna, era de tipo byte. Este campo fue cambiado a integer, lo cual nos permite un'bayor rango de valores a utilizar (de -32,768 a 32767). El tener tipos de datos definidos por el usuario, obliga a tener un recipiente más allá del rango de O a 255 (que proporciona el tipo byte), para poder almacenar el tipo de dato. I/ 4.4.2. Estructura de los Diccionarios de Dominios Para usar los dominios simples como compuestos en el prototipo se necesitó crear dos archivos: el a r h v o para guardar la información generada al crear un dominio simple y el archivo que almacenaría la información proporcionada del dominio compuesto a crear. La razón de crear dos archivos se debió a que guardarían información diferente. Por ejemplo, para el dominio!simple básicamente se necesita guardar su nombre, número de dominio simple, tipo 40 I/ ME TO DO LOG^ DE SOLUCl6N CAPfTULO 4 base y su restricción (valores permitidos); mientras que para el dominio compuesto los datos a guardar son su !ombre, número de dominio compuesto, número de elementos, un arreglo que contenga cierta información de sus elementos y operadores permitidos. Por lo tanto, necesitaban diferente recipiente para almacenar tal información. A continuación se describen ambos archivos. La estructura asociada con los registros del diccionario de dominios simples es la siguiente: '1 TRegDom=RECORD NombreD: TipoD: TipoB: ActivoD: RestriccionD: RestPosíD: END; /I STRING[8]; INTEGER, INTEGER, BOOLEAN; STRING, STRING; donde NombreD Es el nombre del dominio simple. I/ TipoD Indica el número de dominio simple. TipoB Tipo base del dominio simple: integer, longht, real, o string I1 ActivoD Indica si el dominio simple está dado de alta en el archivo. RestriccionD Contiene la condición de restricción del dominio simple. 1 RestPosíD Contiene la cláusula de restricción en la forma posfija. 11 La estructura asociada con los registros del diccionario de dominios compuestos es la 1 siguiente: TRegDomC=RECORD NombreDC: hpoDC: NumDoms: ActivoDC: Doms: 'I ,OpersPerm: END; STRING[8]; .. INTEGER; INTEGER; BOOLEAN; ARRAY[l..MaxDoms] OF DatDom; ARRAY[l..ó] OF BYTE; donde 41 'I CAPíTULO 4 METODOLOGíA DE SOLUCIbN Es el nombre del dominio compuesto. NombreDC TipoDC " Indica el número del dominio compuesto. Indica el número de elementos del dominio compuesto. NumDoms ActivoDC ,I Indica si el dominio compuesto está dado de alta en el archivo. Arreglo que contiene para cada campo, la información para cada uno de los elementos del dominio compuesto. Doms 1 OpersPerm Arreglo que contiene íos operadores permitidos para las operaciones sobre las columnas definidas en términos de él. A continuación se describe el tipo de registro asociado DatDom que se usa en TRegDomC: I/ DatDom=FWCORD NombreD: STRING[8]; TipoD: INTEGER, END; 1 donde NombreD Contiene el nombre del elemento. TipoD Contiene el @ o de dato del elemento (base, dominio simple o dominio compuesto). '1 La fo$a como quedaría representada la información de los dominios simples una vez creados, sena como se muestra en la Tabla 4.3. Nombre$ TipoD TipoB ActivoD RestriccionD RestPosfD GRADO 11 INTEGER(3) G-OrO- GRADO o >E GRADO 179 <-AND MINUTO 12 INTEGER(3) M m > - O ANDMmVm<-39 n l m m o >= -no'' CIUDAD 9, o GRADO <- 179 M m w m 5 9 0 m ! CIUDAD 13 CHAR(20) (1) TRUE Tabla'(4.3.Representación de Dominios Simples en la Estructura TRegDom. 42 METODOLOGíA DE SOLUCIbN CAPÍTULO 4 Tabla 4.4. Representación de Dominios Compuestos en la Estructura TRegDomC. i/ La representación de la información de los dominios compuestos una vez creados sena como se muestra en la Tabla 4.4. 4.5. Instrucción BEGIN DECLARE SECTION Con la instrucción BEGIN DECLARE SECTION se le indica al precompilador que se crearán variables aníitrihas que nos permitan transfeiir datos a/desde las columnas de las tablas. La actualización de la rutina que se tenía para realizar el reconocimiento de las variables anfitnonas (que :;da solución al punto 3.3.6), fue para que permitiera el uso de tipos definidos por el usuario (dominios). Concretamente, si el identiñcador del tipo de dato de la variable no es un tipo base, debe verificar si es un dominio simple o un dominio compuesto. Por ejemplo, para tener como variables aníitrionas a PtoGeo (deñnida en base a un dominio compuesto), Ciudad y Temper (definidas sobre:sus respectivos dominios simples) para manejar los datos de la tabla Temper, seria de la siguiente forma: Ejemplo 4.7 11 BEGIN DECLARE SECTION PtoGeo: PtoGeo; Ciudad: Ciudad; Temper: Temper; END DECLARE SECTION Para realizar la búsqueda de dominios se utiliza el DAD, especificamente el diccionario de dominios (descrito en la Sección 4.4.2) en donde se localiza la información referente a elios. II Con las variables d o n a s antes descritas se contará con los recipientes apropiados al tener el mismo tipo de dato que las columnas de la tabla Temper; siendo ésto necesario para guardar la información de,la cláusula INTO o de la instrucción FETCH. 43 METODOLOG& DE SOLUCl6N CAPfTULO 4 1 4.6. Instrucción INSERT Cuando se inserta un registro a una tabla, primeramente se debe venñcar si existe cuando menos una c o l d h a definida en base a un dominio; si es así, el valor de la columna a insertar se t deberá comparar con la condición de restricción del dominio, para saber si la cumple. Si todo esta bien, el registro se inserta en la tabla. En el caso de insertar valores nulos en columnas compuestas de manera explícita, se deberán 'I indicar todos los elementos que contiene dicha columna. Por ejemplo, supongamos que se inserte un renglón en la tabla Temper donde PtoGeo se desconozca y sólo se tenga como datos de entrada el nombre de la ciudad y su temperatura, la instrucción para insertar la tupla será la siguiente: Ejemplo 4.8 INSERT INTO TEMPER (PtoGeo, Ciudad, Temper) VALUES (NUU, NULL, NULL, NULL,"Mexico", 24); en donde se ddica explícitamente que los valores de los elementos PtoGeo.Latitud.Grado, PtoGeo.Latitud.Minuto, PtoGeo.Longitud.Grado y PtoGeo.Longitud.Mo son nulos. Otra altemativa permite especificar una lista de las columnas que contendrán los datos suministrados y por ende las demás, al no estar incluídas en la lista, tomarán el valor nulo (si es que la columna lo permite), teuiendo los mismos resultados que la instrucción anterior (lo que permite dar solución al punto 3.4.1). En este caso la instrucción será Ejemplo 4.9 'I INSERT INTO TEMPER (Ciudad, Temper) VALUES ("Mexico", 24); Cuando ,seinserte un renglón omitiendo el valor de una columna, el manejador veriiica si en su declaración (de la columna) tiene la cláusula DEFAULT; en caso afirmativo reemplazará el valor omitido por el del default; en caso contrario tomará el del dominio si es que lo tiene defuiido. 4.7. Instrucción SELECT La instrucción SELECT se encarga de recuperar un conjunto de renglones o un renglón de una tabla. Cuando se desea recuperar varios renglones de una tabla (o que se pudieran generar), se utiliza la instrucción BEGIN DECLARE CURSOR En el caso de que se quiera recuperar un solo renglón se uti& la mstnicción SELECT, cuando se sabe que con la condición de búsqueda (cláusula WHERE) sólo se obtendrá un renglón. Por ejemplo, al buscar un elemento sobre una columna a la cual se le ha deñnido un mdice Sm duplicados o tenga una llave primaria, el resultado de tal operación siempre será de que encuentre solo un renglón o ninguno. I/ !! 44 ME TO DO LOG^ DE SOLUCi6N CAPíTUU) 4 '1 En caso de que en una operación de consulta se desee que aparezcan una o mas columnas compuestas, el precompilador deberá tomar automáticamente todos los elementos que pertenezcan a estas columnas, definidas en base a un dominio compuesto, de tal manera que el LMD quede intacto, y pueda)trabajarse de una manera normal. Opcionalmente el programador podrá indicar explícitamente los elementos de una columna compuesta. Por ejemplo, si tenemos la siguiente consulta, 1 Ejemplo 4.10 1 SELECT FROM WHERE PtoGeo.Latitud Temper Ciudad ='Mexico'; generará como lpiida un registro con dos campos: Grado y Minuto que son los elementos del dominio compuesto Latitud. El mismo resultado se puede conseguir con la siguiente consulta: Ejemplo 4.11 I1 SELECT FROM WHERE PtoGeo.Latitud.Grado, PTOGEO.LATITUD.MINUTO Temper Ciudad ='Mexico'; ,I donde se indica explícitamente los elementos deseados de una columna compuesta. Algo pTecido sucede con la cláusula WHERE, ya que al incluir en la condición de búsqueda una columna definida en base a un dominio compuesto, es como si eligiera cada uno de los elementos de la columna compuesta Por ejemplo, Ejemplo 4.12 '1 SELECT FROM WHERE Ciudad Temper PuntoGeo.Longitud = :PtoGeo.Longitud; I/ sena equivalente a la siguiente instrucción: Ejemplo 4.13 I/ SELECT FROM WHERE Ciudad Temper PtoGeo.Longitud.Grado = :PtoGeo.Longitud.Grado AND PtoGeo.Lougitud.Minuto = :PtoGeo.Longitud.Minuto; 45 ME TO DO LOG^ DE S O L U C I ~ N CAPfTULO 4 '1 En el caso de la instrucción BEGIN DECLARE CURSOR, se debe utilizar junto con ia instrucción FETCY la cual permite leer renglón por renglón del archivo temporal que se genera con tal instrucción. La forma de solucionar este problema es la misma que se utiliza en las cláusulas SELECT y WHERE. Para saber si el(1os) operador(es) relacional(es) que contiene(n) la condición de búsqueda, en la cual intervienen columnas compuestas, es(s) válido(s), se deberá consultar si el dominio compuesto lo(s) hermite, y es en el DAD donde se tiene tal información (con lo cual se da solución alpunto 3.4.2). 1 4.8. Instrucción UPDATE Para modiíicar los datos de una tabla se utiliza la instrucción UPDATE, con la cual se actualizan los renglones que cumplan la condición de búsqueda. Los nuevos valores se tratan igual que en la mstru&ón INSERT, esto es, si algún campo está definido en base a un dominio, se verifica que cumpla su condición de restricción (con lo cual se da solución al punto 3.4.3). Con la cláusula WHERE, sucede lo mismo que en la instrucción SELECT . II 4.9. Instrucción DELETE La inst&cción DELETE tiene como función suprimir los renglones de una tabla que satisfagan la cláusula de selección. La sintaxis se mostró en la Sección 3.4.4. El cambio realizado para permitir el uso de dominios en la cláusula WHERE, es el mismo que en las instrucciones SELECT y UPDATE. II El borrado de un renglón es lógico; es decir, se cambia solamente el indicador de activo a falso. Cuando se hace el borrado del rengión esnecesario actualizar ei(1os) índice(s) de la tabla. Esta actualización se logra borrando del índice la clave relacionada con el renglón borrado de la tabla (10 que permite da? solución al punto 3.4.4). 46 En este capítuio se muestran de manera detallada algunos de los procedimientos y funciones más importantes desarrollados para la definición y manipulación de dominios. Así como también para su uso en cada h a de las instmcciones del lenguaje SQL soportadas por el SiMBaDD. Para la explicación de cada una de las instrucciones se presenta un ejemplo tratando de abarcar en él los aspectos más sobresalientes de la instrucción. 5.1. Transporte del SiMBaDD del Ambiente DOS a Windows 5.1.1. Motivos La razón principal para el cambio de plataforma del SiMBaDD del sistema operativo MSDOS al sistema operativo Microsoft Windows fue la necesidad de utilizar una mayor cantidad de i memoria. El desarrollo del presente trabajo repercutiría en un aumento en las necesidades de las variables globales del prototipo, lo cual provocaría que éste no funcionara, debido a que la versión anterior del prototipo trabajaba en el b i t e de la memoria. 5.1.2. Cambios Realizados Para que funcionara el prototipo para el sistema operativo MS-DOS en el sistema operativo Microsoft Windows, primeramente se pasaron las variables locales de tipo DateTime a TDateTime así como también FileRec y Registers a TFileRec y TRegisters respectivamente, ya que son los tipos correspondientes en el entomo Windows. Lo mismo sucedió con las unidades Cri y DOS reconocidas bajo el ambieFte MS-DOS, las cuales fueron cambiadas por WinCrt y WinDOS. Las funciones TextColor, Sound, Delay, Window, TextBackGround, Newwindow, LowVideo ya no heron utilizadas bajo el ambiente Windows. 47 I/ IMPLEMENTACI~N CAP~TULO5 Uno de los cambios importantes fue pasar ciertas variables globales estáticas a hamicas. Esto repercutió'len el manejo de las mismas en el prototipo, lo que condujo a cambiar las instrucciones en las cuales se hace referencia. La unidades SQL, DDL y Ger-Cod del prototipo se subdívidieron para una mejor ejecución 1) al estar las rutinas mejor reagrupadas, es decir, colocando en un solo módulo las rutinas para cierto trabajo en específico, lo cual facilita su ejecución al cargarse (en memoria) sólo las rutinas que se utilizaran en ese momento. Además los atributos por omisión de un segmento de código son MOVEABLE, PIELOAD, DISCARDABLE, los cuales se cambiaron con la directiva al compilador {%CMOVEABLE, DEMANLOAD, DISCARDABLE} para un mejor aprovechamiento de la memoria y por consecuencia del desempeño. I1 5.2. Implementación del Diccionario de Datos El DADjuega un papel muy importante dentro de los SMBDDs. Con respecto al SiMBaDD, el DAD prove&. facilidades de directorio a un nivel más orientado al usuario que los sistemas manejadores de archivos, y aíslan al usuario de lo intrincado del almacenamiento fisico. El DAD contiene información acerca de las tablas y de los dominios de la BDD. Los programas de aplicación usan esta información y gracias a ello se logra la transparencia de localización. La estructura del DAD puede en/ontrarse en las Secciones 4.4 y 4.4.2. 5.2.1. Actualización del Diccionario de Archivos Distribuidos (DAD) I1 Como se comentó en el capítulo anterior, la modificación del DAD se efectuó en el campo TipoC de la estructura de TRegTabla, que permite saber el tipo de dato de una columna para detenninada tabla. Para tal efecto se cambió de tipo byte a integer la declaración de tal campo. I1 Para asignarle el tipo de dato a una columna, sólo se contaba anteriormente en el SiMBaDD con los tipos base (integer, longht, real, o string), lo cual permitía definir a TipoC de tipo byte; esto con el fin de reducir al mínimo el tamaño asignado a las variables usadas por el prototipo. Pero, al 1) incluir los tipos definidos por el usuario (los dominios), el rango que soporta el tipo byte, no era suficiente para incluir tales tipos. 5.2.2. Anexiónldel Archivo de Dominios en el DAD Se anexaron los archivos TRegDom y TRegDomC (descritos en la Sección 4.4.2), para llevar el control de los dominios simples y compuestos respectivamente. La forma como se maneja el DAD es la siguiente: m 1.- Por cada máquina de la red se tiene una parte del DAD, cada parte está compuesta por tres archivos: TRegTabla, TRegDom y TRegDomC. 'I 48 IMPLEMENTACI~N CAPíTULO 5 !I 2.- Por cada tabla que paticipa en la base de datos, se utiliza un registro del archivo TRegTabla para almacenar la definición de la tabla y la localización de ésta. 3- Por cada1 dominio definido, simple o compuesto, se emplea un registro de TRegDom O TRegDomC, dependiendo del caso, para almacenar la definición del dominio y su localización. I1 1 Una vez dado de alta un dominio en el DAD, se puede hacer uso de él por nombre, pero para facilitar su manipulación, internamente se obtiene del DAD su número (tipo) correspondiente. :! 5.3. Implemen&ción de Dominios 5.3.1. Creación de Dominios Simples I/ Si se crea un dominio, digamos el del Ejemplo 2.1, es necesario realizar una búsqueda del dominio en el DAD para verificar que no exista, tanto en el archivo de dominios simples como en el archivo de los dominios compuestos; ya que la definición de un dominio debe ser única, para evitar ambigüedades en su tipo. Después de verificar que no exista el dominio, se procede a almacenar su deñnición en el DAD. En primer lugar se le asigna al campo TipoD el valor del mismo campo del primer registro del archivo TdegDom, el cual lleva el número (tipo de dato) del siguiente dominio a insertar Posteriormente se almacenan otros datos del registro como el nombre del dominio, el tipo base del dominio simple, el valor por omisión si se requiere, la longitud del dominio, el estado del dominio (activo), y la cláusula de restricción del dominio simple tanto en la forma iniija como posfija I1 Después de registrar la información en el DAD en el nodo local, se actualiza el campo TipoD del primer registro del archivo en uso, incrementándolo en 1, para que posteriormente al dar de alta un nuevo dominio simple, se tenga su tipo (número) correcto. I1 5.3.2. Creación de Dominios Compuestos '1 Para crear un dominio compuesto (considérese el del Ejemplo 4.1)primeramente se verifica que no exista en el DAD, de la misma manera que en la creación de dominios simples, con lo cual la búsqueda incluye ambos archivos de dominios (simples y compuestos). Después de verificar que no exista el dominio compuesto, se procede a almacenar los datos de su definición en el DAD. I/ Posteriormente se verifica que la inserción del dominio compuesto no genere un ciclo, y por consecuencia los problemas mencionados en la Sección 3.3.1.2, por io tanto, si la inserción de tal dominio compuesto provoca un ciclo se despliega su respectivo mensaje de error. Una vez que se ha verificado esto,'!y no existe error se le asigna al campo TipoDC el valor del mismo campo del primer registro del archivo TRegDomC del DAD, el cual iieva el número (tipo de dato) del siguiente 8! 49 IMPLEMENTACIÓN CAP~TULO5 il dominio a insertar. Después se almacena el resto de los datos del registro como el nombre del dominio compuesto, los elementos con que cuenta, y los operadores relacionales que podrán usarse con él. I1 Después de que se registró la información en el DAD en el nodo local, siempre y cuando no se presente un error, se actualiza el campo TipoDC del primer registro del archivo en uso, incrementándoloen 1, para que posteriormente al dar de alta un nuevo dominio compuesto, se tenga su tipo (númeroj correcto. 5.4. Creación de Tablas e hdices I! 5.4.1. Creación de Tablas En la Sección 4.3.1 se deñnió la sintaxispara crear una tabla. Cuando se ejecuta la instrucción CREATE TABLE, se almacena en un registro del DAD la definición de la tabla. 11 Como se mencionó en la Sección 3.1.1, el SiMBaDD usa un precompilador que genera código en Pascal semánticamente equivalente a la instrucción SQL. Considérese la instrucción del Ejemplo 3.1; para generar su código en Pascal, es necesario realizar el análisis sintáctico y semántico de ésta. I1 El encargado de realizar dicho análisis es el procedimiento CreaTabla. A continuación se muestra el código equivalente en Pascal de la instrucción que permite deíinir una tabla, en este caso la tabla Tempe? del ejemplo antes mencionado. 1 Uses SQL, 2 3 -SQL-NTABLA, 4 5 -SQL-SET-TAE~LA("TEMPER","B",~,o), -SQL SET~COLuMNA(l,"PTOGEO,lOO3,16,O,FALSE,FALSE,FALSE,""), 6 -SQL~SET-COLUMNA(2,"PTOGEO LATiTüD",I 001,O,,O,FALSE,FALSE,FALSE,""), 7 -SQL-SET-COLUMNA(3,"PTOGEOGRADO,iO,4,O,FALSE,F~SE,FALSE,""), 8 -SQL-SET-COLUMNA(4,'PTOGEO 9 10 11 12 13 14 -SQL-SET-NODO("L0C AL"), MINUTO",l1,4,O,FALSE,FALSE,FALSE,""), SQL-SET-COLWA(5,"PTOGEO LONGiTüD",1002,0,0,FALSE,FALSE,FALSE,""), -SQL-SET-COLUMNA(6,"PTOGEOGRADO",I 0,4,O,FALSE,FALSE,FALSE,""), -SQL-SET-COLUMNA(7,"PTOGEOMíMJTO",I 1,4,0,FALSE,FALSE,FALSE,""), -SQL SET~COLUMNA(S,"NOMBRE",13,30,0,FALSE,FALSE,FALSE,""), SQL~SET-COLUMNA(9,"TE~ER,l4,4,0,FALSE,FALSE,FASE,""), CREA-TABLA, ~ ~ De la línea 2 a la 13 son llamados a procedimientos que se encuentran en el módulo principal SQL. Estos proedimientos se encargan de llenar la estructura de datos a almacenar en el DAD. Las líneas 5 , 6 y 9 indican que el tipo de dato de la columna es compuesto; por lo tanto, su información sólo será almacenada en la estructura del DAD para ser usada posteriormente, pero no ocupará !/ 50 'I IMPLEMENTACI~N CAPfTULO 5 espacio en la tabla, ya que sólo las columnas definidas con los tipos base o dominios simples (incluyendo los hementos de un dominio compuesto), son recipientespara guardar los datos en la tabla. Para que permitiera el uso de tipos definidos por el usuario, fue necesario modificar el procedimiento CreaTabla, en la parte del análisis sintáctico y semhtico, quedando actualmente de t la siguiente forma (cabe aclarar que el siguiente seudocódigo es una versión simplificada): FUNCTION CreaTabla( Nodo STRING[80], W TRegTabla) q:=qz REPITE SI NO Token-Leido ENTONCES Get-Token DE LO CONTRARIO Token-Leido :=FALSO CON LAESTRUCTURA W HACER EN CASO DE QUE Q SEA q2: SI T(ldent&ador) ENTONCES NombreT=LexVal il {Token-Leido bandera para leer sig. token} (Si T regresa un identiticador de Tabla) (LexVal variable global arrojada por Get-Token) q:=q3 DE LO CONTRARIO Error0 q3: SI T@IZQ)ENTONCES q:=q4 DE LO CONTRARIO Error() q4: SI TOdentificador) ENTONCES SI NoCoKMaxCols ENTONCES SI NO YaExisteCol(LexVal,W,NoCol) Inc(NoCo1) (Si T regresa un identiticador de Columna} {Si aún se le pueden añadir columnas a la tabla} {Ver Anexo B} (Contador del número de columna a insertar en la tabla} q:=q5 DE LO CONTRARIO Error0 DE LO CONTRARIO Error() DE LO CONTñARiO Error0 q5: CON LA ESTRUCTüRA ColsT[NoCol] HACER Tipo(TipdC,NoCol) SI TipoC>=IOOO ENTONCES ColocaDomsEnTab(W,NoCol) DE LO CONTRARIO SI TiuoC>9 ENTONCES SI D o d e f a u l t ENTONCES ValDefaultC:=DomValDef 'I q15: SI T(1dentificador) ENTONCES SI ColCorrectaUniq(LexVa1,NoCol) ENTONCES (Ver Anexo B} {Si es una columna compuesta} (Ver Anexo B} (Si es una columna con dominio simple} {Ver Anexo B} {Si T regresa un identificador de llave primaria} {Ver Anexo B} CON LA ESTRUCTURA ColsT[NoCol] HACER SI ?ipoC<lOOO ENTONCES q:=q16 {Si el tipo de dato de la col. no es un dom. comp.} DE LO CONTRARIO ObteuElemDomC(W) {Ver Anexo B} SI NO YaExisteCol(LexVal,W,NoCol,PosCol)ENTONCES (Ver Anexo B} SI NO ExistColUniqíposCol) ENTONCES ColsPrimKey:=PosCol {Ver Anexo B} DE LO CONTRARIO Error0 DE LO CONTRARIO Error0 DE LO'bONTRARIO Error() DE LO CONTRARIO Error0 q19 SI es PyC ENTONCES q:=q20 (PyC: Constante que representa al punto y coma} DE LO CONTRARIO Error0 HASTA (Q = 20): 51 Y!. 'I IMPLEMENTA C I ~ N CAPfTULO 5 '1 Las modificaciones principales del procedimiento antes demito fuerón en la opción q5 y q15. En 95 se extendió el rango de valores válidos para la definición del tipo de dato de una columna ya que anteriormente sólo aceptaba los tipos base (del 1 al 9), con lo cual el tipo de dato que puede tomar una columna es el de un dominio simple o compuesto. En q15 el cambio fue para que t permitiera definir como llave primaria a una columna defmida en base a un dominio compuesto. 5.4.2. Representación de Dominios en la Tabla I 5.4.2.1. Dominios Simples en una Tabla Una columna definida en base a un dominio simple no presenta grandes cambios en la forma de almacenarse en la estructura de TRegTabla del DAD. Este caso se da cuando el campo TipoC de TRegTabla tieni'un valor mayor que 10, ya que un valor menor (ver Sección 3.1.2) indica que el tipo definido para esta columna es un tipo base, En este caso la forma de proceder a su almacenamiento es similar a la del tipo base. I1 5.4.2.2. Dominios Compuestos en una Tabla Al definir una columna en términos de un dominio compuesto, el SiMBaDD guarda la información relativa a ésta en la estructura de TRegTabla del DAD de la siguiente forma: para cada elemento del daminio compuesto usa un campo de ColsT de TRegTabla (una de las opciones que se comentó en la Sección 4.1), y para crear la tabla fisica toma en cuenta sólo los elementos (dominios) simples, ya que únicamente éstos son los que reciben datos al aimacenarse información en la tabla, siendo los demás campos de la columna compuesta, elementos auxiliares para su manejo 11 Por ejemplo, una vez ejecutado el código descrito en la Sección 5.4.1, la representación de la columna compuesta PtoGeo en la estructura TRegTabla, quedaría como en la Tabla 5.1, y la tabla Temper físicamente tendría los elementos que se muestran en la Tabla 5.2. PtoGeo I PtoGeo. Latitud I PtoGeo. Grado I PtoGeo. Minuto I PtocW. Longitud PtoGeo. Grado PtoGeo. Minuto Nombre PtOGeo. PtoGeo. PtoGeo. PtoGeo. Grado Minuto Grado Minuto 19 26 99 08 Mexico 25 20 07 98 4 Pachuca 23 81 52 Nombre Temper Temper IMPLEMENTA CI6N CAPÍTULQ 5 1 Al almacenarse en TRegTabla cada elemento del dominio compuesto, sólo se concatena el nombre de la columna compuesta con el del elemento que se vaya proporcionando del dominio wmpuesto referido, en cadauno de los campos de ColsT de TRegTabla. Por ejemplo, en el caso de la c o l m a Ptodo de la tabla Temper, se almacenaría primeramente PtoGeo, el cual esta formado por otros dos “dominios compuestos (Latitud y Longitud), y por lo tanto se almacenaría PtoGeo.Latmid. Este dominio compuesto cuenta a su vez con dos elementos (Grado y Minuto), por lo que se registraían F’toGeo.Grado y PtoGeo.Minuto (omitiendo Laiitud en ambos). Posteriormente continuaría con PtoGeo.Longitud, el cual también tiene dos elementos (Grado y Minuto), y por IO tanto se alma& PtoGeo.Grado, finalizando conF’toGeo.Minuto. Cabe aclarar que si el elemento de un dominio compuesto, por ejemplo Latitud es a su vez otro dominio compuesto se procede en forma recursiva. ‘1 debe diferenciar cada uno de los elementos de la columna compuesta, esto con El SiMBbD la ayuda de la estructura TRegTabla, que cuenta con la información de cada uno de los elementos de la columna. Por ejemplo debe diferenciar PtoGeo Latitud Grado de PtoGeo.Longitud.Grado, que en este caso se almacenan con el mismo nombre (PtoGeo.Grado) por lo antes descrito, ya que el guardar toda laI/ ruta del elemento, propicia el desperdicio de espacio. Pues bien, en el caso de F’toGeo Longitud.Gado de Temper, primeramente se busca el registro de TRegTabla que contiene la información de la tabla Temper; posteriormente con la ayuda de TRegTabla, la función que lo busca se coloca en F’toGeo.Longitud del arreglo ColsT (Tabla 5.3.a) del registro seleccionado en TRegTabla, pa?a postenormente continuar con la búsqueda del siguiente elemento, en este caso PtoGeo.Grado (Tabla 5 3.b). En el caso de cualquier otro dominio compuesto, se procedería de la misma forma, lo cual garantka que encuentre el elemento correcto. De otra forma, si se inicia su búsqueda desde el principio de la estructura de TRegTabla podrá darse el caso de encontrar un 1) elemento equivocado (Tabla 5.3.c). IPbGea I FoGeO. Latitud I Ptoceo. Grado I PtOGea. Minuto I PtoGeo. Longitud I PtoGea’ Grado I Minuto I Nombre ITemper t lPtoCm I lptoGea I PtoGea. Latitud I PtoGea. Grado I Ptoh. Minuto I PtoGea. Longitud ptoceo. I PtoGea. Grado 1 PtOGeo. Minuto I PtOGea. Longitud Latitud I PtoGeo. Grado PtoGea. Minuto Nombre Teinper PtoGea. Grado Ptoceo. Minuto Nombre Temper (4 Tabla 5.3. Búsqueda de un Elemento de una Columna Compuesta en TRegTabla. 53 IMPLEMENTACIdN CAPhULO 5 11 5.4.3. Creación de Índices En la Sección 4.3.2 se definió la sintaxis para crear una índice. Cuando se ejecuta la instrucción C E k T E INDEX, se almacena en un registro del DAD la descripción del índice. Al momento de crear unmdice se presentan dos casos: 1) que la tabla no tenga renglones (se encuentre vacía) y 2) que la tabla tenga renglones (datos). Para crear un índice en la tabla Temper, sobre el elemento compuesto PtoGeo.Latitud, mediante la siguiente instrucción: t Ejemplo 5.1 /I CREATE INDEX TemLat ON Temper (PtoGeo.Latitud); el precompilador verifica si la columna sobre la que se creará el índice es compuesta; de ser así, la generación de código para tal inshucción queda idéntica a como si fuera sobre una columna definida sobre un d o d o simple o un tipo base. En tales circunstancias el cambio realizado en la función Create-Indice fue en el reconocimiento de los tipos definidos por el usuario, además del reconocimiento de los elementos de una columna compuesta. I Al ejecutarse la función Create-Index, se crea el índice y primeramente se verifica si la tabla contiene renglones. Si el número de renglones es mayor que cero, se debe realizar un vaciado de los valores que forman la clave al índice. Si un elemento que forme la clave del índice, es una columna (I o elemento compuesto, éste es sustituido por todos los elementos simples (en base al párrafo anterior) de la columna o elemento compuesto que forman la clave del índice. En caso de que se encuentre una Il'ave repetida y el índice no acepte duplicados, es necesario destruir el indice creado como también su definición del DAD, I1 5.5. Instrucción DROP I/ La instrucción DROP nos permite eliminar lógica y físicamente una tabla, un índice, un dominio simple o un dominio compuesto. I 5.5.1. Borrado de Dominios 5.5.1.1. Borrado de Dominios Simples 11 La instrucción DROP DOMAIN se encarga de elimmar lógicamente un dominio simple del diccionario de archivos distribuidos. Cuando se le mdica al manejador que se desea borrar un dominio simple, éste debe verificar I/ que no se encuentre referido, tanto por un dominio compuesto como por una columna de una tabla. ii 54 IMPLEMEhTACIdN CAP~TULO5 Después de haberse verificado que no existe referencia a él, se procede a cambiar a cero el valor del campo $culto AltaD, lo cual borra lógicamente el registro del dominio simple del DAD. En caso de que e& en ese momento en uso (referido), no se deberá borrar para no perder su información y provocar una incongruencia en los datos. 1 5.5.1.2. Borrado de Dominios Compuestos Con la instrucción DROP COMPOUND DOMAIN podemos eliminar un dominio compuesto, siendo la baja en forma lógica del diccionario de dominios. 1 Cuando el manejador detecta que se desea borrar un dominio compuesto, debe realizar una búsqueda del dominio para verificar que no se encuentre referido, tanto por otro dominio compuesto como por alguna columna de una tabla. 1 Después de haberse verificado que no existe referencia a él, se procede a cambiar a cero el valor del campo oculto AltaDC, con lo cual se logra borrar lógicamente el registro del dominio compuesto del diccionario de dominios. Si el dominio compuesto está en ese momento en uso (referido), para /Ino perder su información no se deberá borrar. 5.6. Instrucción INSERT 1 Al msertar un renglón a una tabla, siuna columna está definida en base a un dominio, el valor de ésta se verifica con la condición de restricción en fobna posíija del dominio en cuestión (la cual se encuentra almacenada en el DAD). Para riklizar la verificación de un valor contra la condición de restricción de un dominio simple, se ejecuta la función EvaiDatEnDom. Si la función regresa un valor verdadero, sigmíica que el valor de la columna satisface la cláusula de restricción. Esta verificación se realiza para todas las columnas deñnidas sobre algún dominio. En caso de que todas las verificaciones resulten positivas, se inserta el r d b ó n en la tabla usando la función AddRec (para una explicación del procedimiento ver referencia PERSS]). En caso de que la función EvalDatEnDom retorne un valor falso, se le asigna a la variable global SQLCODE (que guarda el estado de la operación realizada) el valor de 9 y el renglón no se inserta /I En caso de que la tabla tenga índices que no aceptan duplicados, es necesario buscar en el mdice la clave correspondiente al valor a insertar. Para realizar la búsqueda de la clave en el índice, el procedimiento INSERT usa la función TuplaCumpleRequisitos, la cual se encarga de verificar si en el índice no existen claves repetidas. /I 55 IMPLEMEhTACl6N CAPíTULO 5 0 5.7. Instrucción SELECT Cuando se realiza la consulta de un renglón, se tiene la opción de referirse a una columna compuesta como'Iya se comentó en la Sección 4.7, regresándonos los valores de todos los elementos de la columna. En el ejemplo que se describe a continuación, se desea obtener la Longitud de Pachuca de la tabla Temper (Tabla 5.2). Ejemplo 5.2 'I SELECT FROM WHERE PtoGeo.Longitud Temper Ciudad ='Pachuca'; Para poder ejecutar la instrucción anterior, primeramente es necesario procesar el programa con el precompilador del manejador. El código equivalente en Turbo Pascal que genera el precompilador es el siguiente: 1 2 3 4 5 6 I 8 9 IO 11 12 13 14 USES SQL, BEGIN -SET-DEFAULT -TQNAME, -SETLONG-REGTQUERY( 1S ) , -I)MTOPSTATS('SELECT AW), -' MTOPCC('TEMPER PTOGEO LONGITUD,l,O,l 3,8,1002,FALSE'), -MTOPSTATS('WHERE -MTOPPRED(I), ./ MTOPC('TE~ER.CIUDAD,13,21,31 ,TRUE'); '! MTOPORCJ); -MTOPVi(CIUDAD,l,FALSE); -MTOPSTATSCFROMTEMPER '7: ; EXEC-SELECT; END. ;I I), De la línea 4 a la 12 ,los valores enviados como parametros a los procedimientos son los elementos de la estructura de datos TPointerStackStatus (que se describirá posteriormente). I1 El procedimiento -MTOPSTATS recibe como entrada una cadena, la cual indica el nombre de la cláusula de la instrucción que se ejecutará. Para la cláusula FROM se indica(n) la(s) tabla(s) sobre la(s) cual(es) se trabajará. En el caso de la cláusula SELECT se indica@) ia(s) columna(s) que se seleccionará'(n)para ser accesada(s). Los procedimientos M T O P C y -MTOPCC reciben como entrada los datos de la columna solicitada CMTOPCC se utiliza para las columnas compuestas), ya sea para la cláusula SELECT (línea 5 ) o paik la cláusula WHERE (línea 9). Estos procedimientos se llaman tantas veces como columnas aparezcan en las cláusulas SELECT y WHERE !I 56 IMPLEMEh'TACIÓN CAPÍTuu> 5 I1 Para el ejemplo anterior, los elementos que se introducirían en la estructura de datos son las cláusulas SELECT, WHERE y FROM, indicadas en la líneas 5,7 y 12 del código equivalente. Cada elemento de la lista StackStatutos apunta a se vez a otra lista denominada PrimaryNodo, para t almacenar las columnas, variables, constantes, y operadores de cada cláusula. Una vez ejecutada la linea 12, la lista quedaria como lo muestra la Figura 5.1. Al ejecutar la línea 13, el manejador procede a consultar los renglones de la tabla Temper I/ como se describe a continuación. Primeramente se tiene que saber sobre qué tabla se trabajará, y esto lo sabemos por medio de la linea 12 del código. Posteriormente, consultando el DAD, se obtiene la información de la estructura de la'1 tabla (su tipo, si está activa, tamaño, si tiene índices definidos, columnas con que cuenta, etc.). Figura 5.1. Lista de Cláusulas para Ejecución del SELECT. Después se procede a seleccionar los renglones que catisfagan la cláusula WHERE de la lista. Para tal efecto, el renglón que se lee se introduce a un contenedor de memoria donde se le aplica la operación de la lista correspondiente a la cláusula WHERE. En esta parte de la estructura se encuentran la Aondición de selección en la forma posfija, el desplazamiento de la columna que participa en la selección dentro del contenedor, y los operadores lógicos y relacionales de la condición. Si el renglón satisface la condición de selección, se procede a guardar su número de registro en un archivo temporal. ,I Para recuperar los valores mdicados en la cláusula SELECT de los renglones que satisficieron la cláusula WHERE, se procede a recuperarlos del archivo temporal auxiliándose del elemento SELECT de la lista Stackstatus (ver Figura 5 . I), que tiene la lista de las columnas solicitadas. 11 6 del código se sabe que es una columna compuesta, y del contenedor de memoria Gracias a la Imea (para esto ya se han subido a memoria las columnas del renglón indicado en el archivo auxiliar) se transfieren los valores a las variables anfitrionas respectivas. A contkuación se describe la estructura de datos empleada para la selección de renglones. La parte principal consiste de una lista de cláusulas denominadas StackStatutos, cuyos elementos ' 57 IMPLEMENTACl6N CAP~TULO 5 I1 sirven para almacenar la cláusula de la instrucción que se ejecuta. Cabe hacer mención que la esúuctura de la lista mostrada a continuación tiene algunas diferencias con la de versiones anteriores (del SiMBaDD)para permitir el uso de los dominios compuestos. 1 TPointerStackStatutos=StackStatutos; StackStatutos = RECORD qlausula: STRING; Headpl: PointerPrimaryList ; SigClaus: TPointerStackStatus; END; donde Clausula Contiene el tipo de operación a realizar y puede ser INSERT, SELECT, UPDATE, DELETE, WHERE, o FROM. Headpl Es un apuntador a la estructura PointerPrimaryList que se describirá enseguida. SigClaus Es un apuntador al siguiente elemento de la lista TPointerStackStatus. 11 Cada uno de los elementos de la lista Stackstatus apunta a su vez a otra lista denominada PrimaryNodo, cuyos elementos se usan para almacenar las columnas, constantes y operadores de cada cláusula. Su estructura es la que sigue: I1 PohterPnmaryList = "PrimaryNodo; PrimaqNodo = RECORD ItemP: TPrimay; Si@: PomterPrimaryList; END; donde /I ltemP Variable del tipo estructura TPrimary (que se describe a continuación) donde se especiñca si la siguiente operación a re&r dentro de la lista es un predicado, el tipo I1 de predicado (IN,BETWEEN, ESCALAR), el valor de comparación, la columna que participa en la evaluación, etc. SigP Es un apuntador al siguiente elemento de la lista PointerPrimaryList 11 El registro TPrimary tiene la siguiente estructura: !I 58 1 IMPLEMENTA CZ6N CAPíTULO 5 'i TPrimary = RECORD ClaseP: TPrimaryClase; NuloP: BOOLEAN; DesdeP: INTEGER; NombreP: STRING[12]; LongP: . BYTE; CASE TipoP: BYTE OF 1: (CharP: STRING); 2: (IntP: INTEGER); 3: (LintP: LONGINT); 4: (Reap: REAL); !i 9: (DateP: LONGINT); O: (DatRegP: RECORD NumDCP: INTEGER; InicDCP: INTEGER, PerNDCP: BOOLEAN; II END); 10: (OperadorP: CHAR); 20: (OperRelP: BYTE); j 30: (OperLogP: CHAR); 40: (PredicadoP: BYTE); END; /I donde ClaseP NdoP DesdeP NombreP LongP I\ Contiene la clase de operación a realizar que se describe en el conjunto TPrimayClase. 1; fhntiene el valor TRUE si la columna acepta valores nulos, de lo contrario contiene el valor FALSE. Contiene la posición inicial de la columna dentro del contenedor de memoria I1Contiene el nombre de la columna que se evalúa. Contiene la longitud de la columna que se evalúa I TipoP Registro de tipo variable que indica el tipo de operador lógico que interviene en la operación o bien indica el tipo de dato que se está evaluando. TPrimayClase 'Esun conjunto que contiene los siguientes datos (Predicado, Espcol, Espvar, Oprlog, Oprel), los cuales se usan para determinar el tipo de operación a realizar. IMPLEMENTACI6N CAPh'ULQ 5 '1 5.8. Instrucción UPDATE ' A través de la instrucción UPDATE se modifican los datos de una tabla, permitiéndonos actualizar los redglones que cumplan la condición de búsqueda. Con la cláusula SET se indica qué columnas participan en la actualización; pudiendo referirse a una columna compuesta o a al& elemento de ésta. Con esto su valor es verificado automáticamente para saber si cumple la condición de restricción del dominio simple con el que se definió el elemento, lo mismo ocurre al referirse a una columna deñnida en base a un dominio compuesto. Los nuevos valores se tratan igual que en la instrucción INSERT. La cláusula WHERE en la instrucción UPDATE, para que permita el uso de dominios, se implementó de ia misma manera que en la instrucción SELECT. 5.9. Instrucción DELETE Por medio de la instrucción DELETE se suprimen renglones de una tabla que cumplan una condición de selección. E1 boriado de estos renglones es en forma lógica, lo cual se logra cambiando a uno el valor del campo oculto AItaC. Cuando se realiza el borrado de un renglón en una tabla que tiene indice(s), éste (éstos) se debe@) actualizar, borrando del (de los) índice(s) el valor de la clave asociada con el renglón eliminado de la tabla. Para quk permitiera el uso de dominios, la cláusula WHERE en la instrucción DELETE se bnplementó de la misma forma que en las instrucciones SELECT y UPDATE. I! 60 6 CAPITULO En este capítulo se presentan las pruebas realizadas al SiMBaDD para respaldar los resultados obtenidos con el desarrollo de esta tesis. Las pruebas consisten en ejecutar una serie de programas en Turbo Pascal con instrucciones de SQL mtercaladas y verificar que el resultado de cada ejecución sea equivalente a la semántica de las instrucciones del programa fuente, así como también el de comprobar el buen funcionamiento de la extensión en la definición y manipulación de los dominios compuestos. Por razones de espacio se presentan en este capítulo sólo aquellas pruebas que se consideran más representativas, sin embargo para hacer una prueba exhaustiva del sistema se desarrollaron aproximadamente 75. Todas las pruebas realizadas presentaron resultados exitosos. 6.1. Objetivo de las Pruebas 't Los principales objetivos de estas pruebas son los siguientes: Veriñcar que las acciones semánticas efectuadas por el programa que resulten de la precodpilación, sean eqnivalentes a las instmcciones del lenguaje SQL intercalado en el lenguaje anfitrión. Verificar que los programas ejecutables en el caso de crear, modificar, y borrar dominios simples y/o compuestos cumplan su cometido. Verificar que los programas ejecutables para el caso de crear tablas con columnas definidas en términos de dominios (simples como compuestos) realicen su cometido. Verificar que los programas ejecutables solo comparen columnas definidas en base al mismo dominio; además en el caso de los dominios compuestos verifique que el (los) operador(es) relacional(es) a utilizar en la comparación sea(n) váiido(s) para éste. 61 1 !I PRUEBAS DE FUNCIONALDAD CAPíTULO 6 e) f) Venñcar que los programas ejecutables con instrucciones del LMD (inserción, selección, aaai;a&ón, Y borrado de renglones) que hacen uso de dominios CUmPlm satisfactoriamente su encomienda. Que detecte los mores si los hay, ya sea en precompilación o en ejecución de los programas I/ de prueba. Para conseguir el punto a), se implementó otra serie de programas en Turbo Pascal con instrucciones de SQL intercalados en el lenguaje anfitrión. I/ Para lograr el punto b), se implementó otra serie de programas con instrucciones de SQL adecuadas a cada acción (inserción, cambio, y borrado de dominios). Para conseguir el punto c), se verificó que la instrucción del estándar SQL CREATE TABLE utilizada en los programas de entrada, especificara en la definición de las columnas, aparte de los tipos base del SQL, también a los tipos definidos por el usuario (los dominios). Ji Para logkar el punto d), se verificó que,las instrucciones de SQL utilizadas en los programas fuente, incluyeran comparaciones con columnas definidas en términos de dominios diferentes, así como también programas en donde se utilizaran operadores relacionales no válidos para columnas definidas sobre ]determinado dominio compuesto. Para lograr el punto e), se verificó que las instrucciones de SQL utilizadas en los programas fuente, utilizaran dominios (simples y principalmente los compuestos) de una forma nomal. I/ Para lograr el punto f), también se implementó una serie de programas con instrucciones de SQL para cada caso @recompilacióny ejecución), similar a los puntos a y b. I1 6.2. Descripción del Ambiente de Pruebas Las pruebas se realizaron en un ambiente completamente nuevo en relación a las pruebas de trabajos antenores; es decir, la nueva plataforma del SiMBaDD está constituida por tres computadoras'AT, las cuales están conectadas a través de Microsoft Windows para Trabajo en &pos, y cada máquina utiliza el sistema operativo Microsoft Windows Ver. 3.11. 6.3. Presentaciód de las Pruebas Los datos iniciales del los archivos Temper.Dat y Aitura.Dat de la base de datos para estas pruebas, se obdvieron de algunos folletos y reportes del EVEGI (Instituto Nacional de Estadística, Geográfica e Informática) y los del archivo Contam.Dat fueron ficticios. 62 1 CAPfTULO 6 PRUEBAS DE FUNCIONALJDAD 6.3.1. Contenido Inicial de la Base de Datos de Prueba 81 A continuación se presentan los archivos con los valores iniciales de la base de datos de prueba (Tabla 6.1, 6.2. y 6.3). Es oportuno aclarar que algunos de dichos valores cambiaron conforme se realizaban las pruebas; cabe hacer mención que en otras pruebas se manejaron más de 500 registros en"cada una de las tablas, obteniéndose en cada una de eiias resultados positivos. 63 PRUEBAS DE F U N C l O N D t W CAPíTULO 6 I1 PtoGeo. Latitud. Grado' 19 19 I 18 ++-++ Longitud. Longitud. Nombre Minuto Latitud. Citlaltepetl 55 99 20 Cuernavaca La Nieve 19 I/ 20 17 Temper 59 ' I 98 44 Pachuca 94 33 Minatitlan I 25 20 Queretaro 20 Salamanca 22 Tampiw I 24 19 Veracniz I 24 19 26 101 20 Acapulco 23 I Tabla 6.1. Datos del archivo Temper.Dat. PtoGeo. Latitud. Longitnd. Longitud. Nombre Contam Minuto Mexico 25 99 Cuernavaca 50 101 Monclova 3 101 Moreiia 10 Pachuca 40 I Oueretaro 80 97 Tampico 70 25 102 Tancitaro 7 59 92 Viiiahermosa 5 55 54 42 I I I 20 23 22 17 17 1 56 Tabla 6.2. Datos del archivo Contam.Dat. 64 I/ CAPITULO 6 PRUEBAS DE FUNCIONALJDD 11 1 18 55 99 15 Cuemavaca 1480 19 11 98 38 Iztaccihuatl 5220 19 1 I 27 22 101 17 I 97 25 I LaNieve 52 Tampico I I 3440 10 6.4. INombreD GRADO MINUTO 11 I1 TEMPER ALTURA CONTAM I TipoD I TipoB li 12 ActivoD iNTEGER (3) iNTEGER(3) 13 INTEGER(3) 14 INTEGER(3) 15 INTEGER(3) RestnccionD RestPosiD I GRADO <- 179 TRUE TRUE 179 <-AND mmo+ MINUTOrOANLI MIMITO <- 69 I TEMPERS-1AND TEMPER <- 49 ALTURA Q 5700 m r r n 60 <- I dNn I TEMPER12TEMPER 49 C- AND AlXURA 5700 <-Ah'D CONTAM400 <-AND CmDAD 16 -00) (1) Tabla 6.4. Datos del Archivo de Dominios Simples. La información de los dominios compuestosque se msertaron en la BD de pruebas se muestra enla Tabla 6.5. 65 ir CAPíTULO 6 NombreDC PRUEBAS DE FUNCIONALDALI TipoDC #Doms LATITUD 1001 2 TRUE 11.12 =, o LONGiTUD 1002 2 TRUE 11,12 =, o 1003 2 TRUE 1001,1002 =, o 81 FTOGEO ',I Doms AetivoDC 1 !I 66 OpersPerm I/ CAPfTULO 6 PRUEBAS DE FUNCIONALDAD PRUEBA1.EP 1 '1 Prueba r Crear los dominios simples Grado y Minuto. 20-Mayo-96 Objetivo: Fecha: USES SQL; NO. 1 , BEGIN $ CREATE DOMAIN Grado INTEGER CHECK (Grado >= O AND Grado < = 179); $ CREATE DOMAIN Minuto INTEGER DEFAULT O CHECK (Minuto >= O AND Minuto <= 59); ENE. I< !I Se ejecutó en: 0.35Segundos. 67 .- /I CAPfrULO 6 PRUEBA2.EP PRUEBAS DE FUNCIONALDAü I( Prueba No. 2 Objetivo : , Fecha : USES I/ Crear los dominios compuestos Latitud y Longitud. 20-Mayo-96 SQL; BEGIN !I $ CREATE COMPOUND DOMAIN Latitud (Grado, Minuto, OPERATORS (=, < > ) ) ; $ CREATE COMPOUND DOMAIN Longitud (Grado, Minut o, OPERATORS (=, < > ) ) ; Se ejecutó en: 0.37Segundos 68 CAPfTLLO 6 I1 PRUEBAS DE FUNCIONALDAD 1 I PRUEBA3. EP ( I1 Objetivo: Fecha: P r u e b a No. 3 C r e a r e l dominio compuesto C o o r G e o g . ,, 20-Mayo-96 1 ! USES BEGIN SQL; i $ CREATE,,COMPOUND DOMAIN C o o r G e o g (Latitud, Longitud); I/ END. Se ejecutó en: 0.25 Segundos. 69 CAPfTULO 6 PRUEBAS D E FUNCiONAiDAD 11 . PRUEBA4 EP Prueba N o . 4 Objetivo : " Fecha: ' USES SQL; Crear los dominios Nombre, Altura, Temper y Contam. 2O -Mayo- 96 li BEGIN $ CREATE DOMAIN Ciudad CHAR(30) DEFAULT ' ' CHECK (Ciudad <>' I ) ; $ CREATE DOMAIN Altura INTEGER DEFAULTo CHECK (Altura >= O AND Altura <= 9000); $ CREATE DOMAIN Temper INTEGER DEFAULT O CHECK (Temper >= O AND Temper <= 55); $ CREATE DOMAIN Contam INTEGER DEFAULT O CHECK (Contam >= O AND Contam <= 400); ENE. Se ejecutó en: 0.55Segundos. I! li 70 !EO6 CA - E FUNCIONALDA ,I PRUEBA5.EP 1 P r u e b a No. 5 Objetivo: Fecha: Añadir al dominio Grado la cláusula default. 20-Mayo-96 ,I I, I/ USES SQL; ll BEGIN $ ALTER DOM+IN Grado SET 1; ENE. Se ejecutó en: 0.22 Segundos. '0 71 I! PRUEBAS DE FUNCIONALDAD CAPíTULO 6 PRüEBA6.EP 11 ( Prueba No. 6 Objetivo: , Propósito: ’ Fecha : Crear las tablas Altura, Temper y Contam. Verificar que los nuevos tipos de datos (dominios) puedan utilizarse en la creación de una tabla. 20-Mayo-Y6 1 USES SQL; I1 BEGIN $ CRFATE TABLE Altura ( PtoGeo CoorGeog NOT NULL, Ciydad Ciudad, Altura Altura) ; $ CRFATE TABLE Temper ( PtoGeo CoorGeog NOT NULL, Ciudad Ciudad, Temper Temper, PRIMARY KEY (PtoGeo.Longitud)); $ CREATE TABLE Contam ( PtoGeo CoorGeog NOT NULL, Ciudad Ciudad, &tam Contam, PRIMARY KEY (PtoGeo.Longitud.Minuto)); END. I 1 Se ejecutó en: 1.28 Minutos. I1 i: 72 11 PRUEBAS DE FUNCIONALlDAD CAPíTULO 6 ' PRuEBA7. EP I 1 P r u e b a No. I . Insertar los valores de los renglones de la tabla Temper. Los datos se leen del archivo de tipo DatTem.Dat. Comprobar que se permita referir para insertarse elementos compuestos de una columna compuesta. 20-Mayo-96 Objetivo: ,! Propósito: Fecha : I USES SQL, SQLDAT, DOMDAT, WINCRT; BEGIN DECLARE SECTION PtoGeo', : CoorGeog; Ciudad : Ciudad; Temper : Temper; END DECLARE ,SECTION; $ I1 PROCEDURE Alta-Tem; VAR F : FILE OF RegTemper; Dat : RegTemper; BEGIN ASSIGN (F!" DatTem.Dat ) ; RESET (F); WHILE NOT EOF(F) DO BEGIN READ (F,Dat); PtoGeo :=Dat.PtoGeo; :=Dat.Ciudad; Ciudad Temper :=Dat.Temper; !I $ INSERT INTO Temper VXUES(:PtoGeo.Latitud, :PtoGeo.Longitud, :Ciudad, :Temper); il IF SQLCODE = O THEN WRITE('<<Registro insertado>>') ELSE WRITE('<<Registro No dado de Alta>>'); END; CLOSE (F); END; , BEGIN Alta-Tem END. Se ejecutó en: 3.07 Minutos. 13 PRUEBAS DE FUNCIONALIDAD CAPfTULO 6 PRüEBA8.EP II t Objetivo: I, Propósito: II Fecha : Prueba No. 8 insertar los valores de los renglones de la tabla del archivo Validar que referirse a 20-Mayo-96 Altura. Los datos s e leen de tipo DatAlt.Dat. para insertar se permita una columna compuesta. II USES $ SQL, SQLDAT, DOMDAT, WINCRT; BEGIN DECLARE SECTION PtoGeo'l : CoorGeog; Ciudad : Ciudad; Altura : Altura; END DECLARE SECTION; PROCEDURE Alta-Alt; VAR F : FILE OF RegAltura; Dat : RegAltura; BEGIN ASSIGN (F?'DatAlt.Dat' ) ; RESET (F); WHILE NOT EOF(F) DO BEGIN READ(F,Dat); :=Dat.PtoGeo; PtoGeA :=Dat.Ciudad; Ciudad Altura :=Dat.Altura; 'I $ INSERT INTO Altura VALUES ( :PtoGeo, :Ciudad, :Altura); I/ IF SQLCODE = O THEN WRITE('<<Registro insertado>>') ELSE WRITE('<<Registro No dado de Alta>>'); END; CLOSE (F)'! END; BEGIN Aita Alt' ENE. ~ !i Se ejecutó en: 3.13 Minutos. :! 74 PRUEBAS DE F U N C I O N m A D CAPmLO6 1 PRUEBA9.EP ( Objetivo : II Propósito: I1 Fecha : Prueba No. 9 Insertar l o s valores de l o s renglones de la tabla Contam. Los datos se leen del archivo de tipo DatCont.Dat. Verificar que para insertar se pueda referir en el orden que se quiera los elementos de una columna compuesta. 20-Mayo-96 I1 USES $ SQL, SQLDAT, DOMDAT, WINCRT; BEGIN DECL!ARE SECTION PtoGeo : CoorGeog; Ciudad : Ciudad; Contarn, : Contam; END DECLARE SECTION; PROCEDURE Alta-Cont; VAR F : FILE OF Regcontam; Dat : Regcontam; BEGIN I ASSIGN(F,'DatCont.Dat'); RESET IF) ; WHILE NOT EOF(F) DO BEGIN READIF,Dat); PtoGeo :=Dat.PtoGeo; Ciudad :=Dat.Ciudad; Contám :=Dat.Contam; ~~~ INSERT INTO Contam (PtoGeo.Longitud, PtoGeo.Latitud, Ciudad. I. . Cont am i V d U E S ( : PtoGeo.Longitud, :PtoGeo .Latitud, :Ciudad, :Contam); IF SQLCODE = O THEN WRITE('<<Registro insertado>>') ELSE WRITE('<<Registro No dado de Alta>>'); $ END: 11 CLOSE (F); END; Ii BEGIN Alta-Cont END. Se ejecutó en: 3.15 Minutos 15 I/ PRUEBAS DE FUNCIONALWAD CAPkULO 6 . PRUEBA10 EP " I " Objetivo : Fecha: USES Prueba No. 10 Crear un índice sobre una columna definida en base a un dominio compuesto. 20-Mayo-96 I! SQL; BEGIN $ CREATE INDEX Altura ON Altura(PtoGeo.Longitud); END. Se ejecutó en: 0.51 Segundos. 1) 76 PRUEBAS DE FUNClONALlDAD CAPfTULO 6 ll PRUEBA11 .EP I- Prueba No. ll Objetivo : 1 Fecha : Obtener la temperatura promedio de las localidades de una latitud dada en la tabla Temper. 20-Mayo-96 il USES $ SQL, SQLDAT, DOMDAT, WINCRT; BEGIN DECLARE SECTION Promed'l : Temper; PtoGeo : CoorGeog; END DECLARE SECTION; BEGIN WRITE('Latitud de Temper I ) ; WRITE('=================== 1 WRITE(:Pto.Geo.Lat. (G)... : ;READLN(PtoGeo.Latitud.Grado) ; WRITE(t'Pto.Geo.Lat. (M). . .: ' ;READLN(PtoGeo.Latitud.Minuto); $ SELECT INT,O FROM WHERE AVG '(PtoGeo.Longitud.Grado) :Promed Temper PtoGeo.Latitud.Grado = :PtoGeo.Latitud.Grado; WRITELN('Resultad0 de la Prueba No. 11'); WRITEL~N: IF SQLCODE = O THEN WRITELN('Temperatura promedio :',Premed); END. !I 1) CAPíTULO 6 PRUEBAS DE FUNCIONALIDALI Latitud de Temper ,I _-_________-_--__-______________-____ Pto.Geo.Lat.(G). . . : 19 Pto.Geo.Lat. (M). . .: 26 Resultado de'lla Prueba No. 11 Temperatura promedio :22 I! Se ejecutó en: 14 Segundos !I I 78 PRUEBAS DE FUNCIONALDAD CAPf7VLO 6 I! PRUEBA12 .EP 1 !: Objetivo : Propósito: 'I Fecha : P r u e b a No. 12 Obtener los datos completos de l a tabla Temper Verificar que la cláusula FETCH permita el uso de registros como variables anfitrionas. 20-Mayo-96 ~ I/ USES $ SQL, SQLDAT, DOMDAT, WINCRT; BEGIN DECEARE SECTION : CoorGeog; PtoGeo'! Ciudad : Ciudad; Temper : Temper; END D E C T E SECTION; PROCEDURE Cons-Tem; BEGIN WRITELN('$esultado de la prueba NO. 12 I ) ; WRITELN('============================= ')'WRITELN; $ $ DECLARE SELECT ii FROM CURSOR tcl FOR * Temper; OPEN tcl; REPEAT $ FETCH Tcl INTO :PtoGeo, :Ciudad, :Temper; I! IF SQLCODE = O THEN BEGIN WRITELN('Pt0. Geo. Lat. (G)..: ',PtoGeo.Latitud.Grado); WRITELN ( ' Pto . Geo. Lat. (M). . : ' ,PtoGeo.Latitud..Minuto); WRITELN('Pt0. Geo. Lon. (G). .: ',PtoGeo.Longitud.Grado); WRITELN('Pt0. Geo. Lon. (M)..: ',PtoGeo.Longitud.Minuto); WRITELN('Ciudad .............. : ',Ciudad); WRITELN('Temper ................ ., ,Temper); END; UNTIL SQLCODE <> O; $ CLOSE tcl; END; II BEGIN Cons-Tem END. I1 79 PRUEBAS DE FUNCIONALlDm CAPíTULO 6 Resultado de 1 la prueba No. 12 ............................. Pto. Geo. Lat. (GI..: 19 Pto. Geo. Lat. (M). . : 2 Pto. Geo. Lon. (G).. : 97 Pto. Geo. Lon. (M).. : 16 Ciudad .............. : Citlaltepetl Temper .......[........: 11 Ciudad .............. : Mexico Ciudad . . . . . . . . . . . . . . : Cuernavaca Ciudad ..... l. . . . . . . . . La Nieve Ciudad . . . . . . . . . . . . . . : Pachuca il Ciudad . . . . . . . . . . . . . . : Minatitlan I1 Ciudad .............. : Queretaro Ciudad . . . . . . . . . . . . . . : Salamanca !I Ciudad .............. : Tampico !I Ciudad .............. : Veracruz Ciudad . . . . .(... . . . . . . : Acapulco Temper : 23 Ciudad . . . . . . . . . . . . . . : Al I1 Ciudad ...............: A9 Temper .............. : 9 :I Se ejecutó en: 2.54 Minutos. 1 80 PRUEBAS DE FUNCIONALIDAD CAPíTULO 6 11 PRuEBA13.EP ( !! Fecha: USES $ Prueba No. 13 Obtener los distintos grados de las latitudes de Temper 20-Mayo-96 Objetivo : SQL, SQLDAT, DOMDAT, WINCRT; BEGIN D E C ~ E SECTION PtoGeo :CoorGeog; END DECLARE SECTION; I1 PROCEDURE ConsDist-Tem; BEGIN WRITELN('Resu1tado de la prueba No. 13 WRITELN('============================= $ DECLARE SELECT FROM .; $ OPEN tcl; REPEAT $ I ) ; 1 ) 'WRITEL" CURSOR tcl FOR DISTINCT Temper.PtoGeo.Latitud.Grado Temper; 1, FETCH tcl INTO :PtoGeo.Latitud.Grado; I/ IF SQLCODE = O THEN WRITELN('Pt0. Geo. Lat. (G)..: ',PtoGeo.Latitud.Grado); UNTIL SQLCODE <>o; $ CLOSE tcl; END; !I BEGIN ConsDist-Tern ENE. 81 I! CAPirULO6 PRUEBAS DE FUNCIONALDAD 11 R e s u l t a d o de l a prueba N o . 13 ............................. . 'I P t o . Geo. L a F . .: ( G ) . .: Pto. Geo. L a t . (G). P t o . Geo. L a t . (G)..: P t o . Geo. L a t . (G). .: P t o . Geo. L a t . (G). .: 1 P t o . Geo. L a t . ii (GI. 19 18 .: 20 17 22 It P t o . Geo. L a t . (G) ..: 2 (G) ..: g 3 P t o . Geo. L a t . 1 Se ejecutó en: 35 Segundos li 82 PRUEBAS DE F U N C I O N D A D '1 CAPfTULO6 PRUEBA14.EP 'I i P r u e b a No. 14 Objetivo : Propósito: I1 Fecha: USES $ Obtener los datos completos de Temper y de Altura para cada par de puntos geográficos que coincidan en su columna Latitud en Temper y en Altura Verificar que la cláusula WHERE permita el uso de columnas compuestas. 20-Mayo-96 SQL, SQLDAT, DOMDAT, WINCRT; BEGIN DECLARE SECTION PtoGeo : CoorGeog; Ciudad,; : Ciudad; Temper' : Temper; PtoGeoA : CoorGeog; CiudadA : Ciudad; Altura.; : Altura; END DECLARE SECTION; PROCEDURE Join-T e a t ; BEGIN I WRITELN('Resultad0 de la prueba No. 14 WRITELN('============================= $ $ DECLARE CURSOR tcl FOR SELECT * FROM Temper, Altura WHERE Temper.PtoGeo.Latitud = I ) ; I ) ; WRITEL" Altura.PtoGeo.Latitud; OPEN tcl; REPEAT $ FETCH tcl INTO :PtoGbo, :Ciudad, :Temper, :PtoGeoA, :CiudadA, :Altura; = O THEN BEGIN WRIFELN('Pt0. Geo.Lat. (G).: ',PtoGeo.Latitud.Grado) WRITELN('Pt0. Geo.Lat.(M).: ',PtoGeo.Latitud.Minuto : WRITELN('Pt0. Geo.Lon.(G).: ',PtoGeo.Longitud.Grado ; WRITELN('Pt0. Geo.Lon. (MI.: ',PtoGeo.Longitud.Minut WRIFELN('Ciudad . . . . . . . . . . . : ',Ciudad); WRITELN('Temper ........... : ',Temper); WRI,TELN('PtO. Geo.Lat. (G).: ',PtoGeoA.Latitud.Grado); WRITELN('Pt0. Geo.Lat. (M). : ',PtoGeoA.Latitud.Minuto); WRI.,TELN('Pto.Geo.Lon.(G). : ',PtoGeoA.Longitud.Grado); WRI~TELN('Pto.Geo.Lon.(M)..: ',PtoGeoA.Longitud.Minuto); WRITELN('Ciudad ........... : ',CiudadA)i WRITELN('A1tura ........... : ',Altura); END: I F SQLCODE j ) ; I! 83 fi 1 CAPÍTLLO 6 U N T I L SQLCODE $ CLOSE t c l ; I/ END; PRUEBAS DE FUNCIONAUDALl <> O; BEGIN J o i n-T e m A i t It END. Se ejecutó en: Más de 3 horas (se detuvo manualmente). :i /I !I 84 I CAPfTULO 6 PRUEBAS DE FUNCIONALIDAD I1 PRUEBA15.EP I II ( Prueba No. 15 Objetivo: i! Fecha: Obtener la longitud de una ciudad en la tabla Temper. 20-Mayo-96 1 1 USES SQL, SQLDAT, DOMDAT, WINCRT; $ BEGIN DECI!$RE SECTION PtoGeo : CoorGeog; Ciudad : Ciudad; END DECLqE SECTION; PROCEDURE ConsNomTem; BEGIN WRITE('Ciudad. . . . . . . . . . . . . . $ SELECT INTO ,i FROM WHERE : I ) ; READLNíCiudad); PtoGeo.Longitud :PtoGeo.Longitud Temper Ciudad = :Ciudad; WRITELN( !Resultado de la prueba No. 15 1 ) ; WRITELN(l============================= I ) ; WITELN; IF SQLCODE = O THEN BEGIN WRITELN('Pt0. Geo. Long. (Gral . : ' ,PtoGeo.Longitud.Grado); WRITELNí'Pto. Geo. Long.(Min) . : ',PtoGeo.Longitud.Minuto); END END; I1 BEGIN ConsNomTem END. 85 il 1 CAPiTULO 6 Ciudad . . . . . . : . . . . . . . PRUEBAS DE FUNCIONALDALI : Cuernavaca Resultado de la prueba No. 15 ............................. I/ Pto. Geo. Long. (Gra).: 99 Pto. Geo. Long. (Min). : 15 ii Se ejecutó en: 8 Segundos. r 86 PRUEBAS DE FUNCIONALDAD CAPPULO 6 ': PRUEBAl6.EP ( I! O b jetivo : Propósito: i/ Fecha: Prueba No. 1 6 Obtener la longitud de los puntos geográficos en Temper cuya longitud coincida con la longitud de los puntos geográficos en Altura, tales que la latitud es éstos coincida con la latitud de l o s puntos geográficos en Contam, tales que la latitud de éstos sean igual a una latitud dada. Verificar que en l o s select anidados se puedan referir columnas compuestas. 2O -Mayo-96 I USES $ SQL, SQLDAT, DOMDAT, WINCRT; BEGIN D E C F E SECTION PtoGeo : CoorGeog; END DECLARE SECTION; PROCEDURE ConsNomTem; BEGIN WRITELN('Datos de Contam I ) ; WRITELN('=============== 1 ) ; WRITE('Pt6. Geo.Lat.(Gra).: WRITE('Pt0. Geo.Lat.(Min).: $ I ) ; I ) ; READ(PtoGeo.Latitud.Grado); READ(PtoGeo.Latitud.Minuto); SELECT,.PtoGeo.Longitud INTO :PtoGeo.Longitud FROM Temper WHERE PtoGeo.Longitud IN (SELECT PtoGeo.Longitud IIFROM Aitura 'WHERE PtoGeo.Latitud IN (SELECT PtoGeo.Latitud FROM Contam II WHERE PtoGeo.Latitud = :PtoGeo.Latitud)); WRITELN('Resultad0 de la Prueba No. 16'); wRITELN(I============================= I ) ! . WRITELN. IF SQLCODE = O THEN BEGIN WRITELN('Pt0. Geo. Long.(Gra).: ',PtoGeo.Longitud.Grado); WRITELN('Pt0. Geo. Long.(Min).: ',PtoGeo.Longitud.Minuto); END II END; BEGIN ConsNomT&m END. 87 il ) CAPfTULO6 PRUEBAS DE FUNCIONAL ID^ Datos de Contam ________-______ _-_____________ iI P t o . Geo. Long. ( G r a ) . : 19 Pto. Geo. Long. ( M i n ) . : 4 2 Se ejecutó en: 2.3f Minutos I! 88 PRUEBAS DE FUNCIONALDAD :i CAPíTlJLO 6 PRUEBA17.EP t Objetivo: ,, il Propósito : . Fecha : USES !I Prueba No. 17 Obtener los datos completos de la tabla Temper para cada punto geográfico cuya longitud no coincida con la longitud de cualquier punto geográfico en Altura, tal que la latitud de este Último sea igual a una latitud dada. Verificar que en la cláusula WHERE se pueda comparar una columna compuesta contra un registro. 20-Mayo-96 SQL, SQLDAT, DOMDAT, WINCRT; !! $ BEGIN DECLARE SECTION PtoGeo :CoorGeog; Ciudad :Ciudad; Temperi :Temper; END DECLARE SECTION; PROCEDURE SeiAnid-TemAlt; BEGIN 1 WRITELN('Dat0s de Altura I ) ; WRITELN(Is============== 1 ) . WRITE('Pt0. Geo. Lat.(Gra).: ');READ(PtoGeo.Latitud.Grado); WRITE('Pt8. Geo. Lat.(Min).: ');READ(PtoGeo.Latitud.Minuto); $ DECLARE CURSOR tcl FOR SELECT * FROM Temper WHERE PtoGeo.Longitud NOT IN (SELECT PtoGeo.Longitud FROM Altura IlWHERE PtoGeo.Latitud = :PtoGeo.Latitud); $ OPEN tcl; REPEAT 11 $ FETCH tcl INTO :PtoGeo, :Ciudad, :Temper; IF SQFCODE = O THEN BEGIN WRITELN('Pt0. Geo.Lat. (G). : ',PtoGeo.Latitud.Grado); WRITELN('Pt0. Geo.Lat.(M).: ',PtoGeo.Latitud.Minuto); WRITELN('Pt0. Geo.Lon.(G).: ',PtoGeo.Longitud.Grado); WRIFELN('Pt0. Geo.Lon. (M). : PtoGeo.Longitud.Minuto); WRI!TELN('Ciudad ........... : ',Ciudad); WRITELN('Temper ........... : ',Temper); END ; I , UNTIL SQLCODE <> O; $ CLOSE tc1; END; 89 PRUEBAS DE FUNCIONALDAD CAPíTULO 6 I! BEGIN SeiAnid-T e a t ENE. Se ejecuto en: 5.30Minutos I, 90 PRUEBAS DE FUNCIONALDAD CAPfrULO 6 il PRUEBA1 8 . EP , { Prueba No. 18 Eliminar los renglones de la tabla Temper dada una ciudad. 20-Mayo-96 Objetivo : Fecha : 't USES $ SQL, SQLDAT, DOMDAT, WINCRT; BEGIN D E C F E SECTION PtoGeo : CoorGeog; Ciudad : Ciudad; END DECLARE SECTION; . . il PROCEDURE ConsNomTem; BEGIN WRITE('Ciudad .............. : $ I ) ; READLN(Ciudad); I( DELETE Temper Ciudad FROM WHERE = :Ciudad; .I WRITELN('Resu1tado de la Prueba no. 18'); WRITELN; WRITELN; IF SQLCODE = O THEN WRITELN('Registr0 Borrado'); END; BEGIN ConsNomTem END. 1 Se ejecutó en: 4.53 Minutos. [' 91 PRUEBAS DE FUNCIONALJDm CAPÍTULO 6 II PRUEBA1 9.EP I Objetivo : propósito:^^ Fecha: USES $ P r u e b a No. 19 Actualizar para cierta ciudad de la tabla Temper l o s datos del punto geográfico en su campo Latitud. Verificar que la cláusula SET permita el uso de columnas compuestas. 20-Mayo-96 SQL, SQLDAT, DOMDAT, WINCRT; BEGIN DECLARE SECTION PtoGeo'j : CoorGeog; Ciudad : Ciudad; Tempex : Temper; END DECLARE SECTION; PROCEDURE ACtuaiiza-Tem; BEGIN WRITELN('Actua1ización en la tabla Temper ' 1 ; WRITELN('================================ t ) . !I , WRITELN; WRITE('Ciudad de la Cd. ........ : I ) ; READLN(Ciudad); SELECT INTO $ il FROM WHERE * :PtoGeo.Latitud, :PtoGeo.Longitud, :Ciudad,:Temper Temper Ciudad =:Ciudad; il IF SQLCODE = O THEN BEGIN WRITELN('Va1ores Actuales '); WRITELN('================ 1 ) ; WRITELN]('Pto. Geo. Lat. (G). .: ',PtoGeo.Latitud.Grado); WRITELN'('Pt0. Geo. Lat. (M). . : I , PtoGeo.Latitud.Minuto); WRITELN('Pt0. Geo. 'Lon.(G)..: ',PtoGeo.Longitud.Grado); WRITELNJ'Pto. Geo. Lon.(M)..: ',PtoGeo.Longitud.Minuto); WRITELNi('Ciudad ............. : ',Ciudad); WRITELN'('Temper............. : ',Temper); WRITELN.('Introduce l o s Nuevos Valores I ) ; WRITELN('============================ 7 ) . WRITE('pt0. Geo.Lat.(G).: ');READLN(PtoGeo.Latitud.Grado); WRITE('Pto.Geo.Lat.(M).: ');READLN(PtoGeo.Latitud.Minuto); $ UPDATE SET 11 WHERE¡ Temper PtoGeo.Latitud = :PtoGeo.Latitud Ciudad = :Ciudad; IF SQLCODE = O THEN WRITELN('<<Registro Actualizado>>') ELSE WRITELN('<<Registro No Actualizado>>'); END ;I ELSE WRITELN('Registr0 No Encontrado.'); 92 PRUEBAS DE F U N C I O N A L D ~ CAPfTULO 6 11 END; BEGIN ActualizaLTem; END. i, Se ejecutó en: 12 Segundos. 93 7 CAPITULO COMENTARIOS FINALES En este capítulo se dan a conocer las conclusiones obtenidas en el desarrollo de esta tesis, algunas observaciones, además de hacer mención de posibles trabajos futuros relacionados con el desarroUo de la'presente tesis. 7.1. Conclusiones Las definicionesbásicas del modelo relaciona1 exigen que los valores que pueden tomar los atributos sean atómicos, lo cual implica que los datos compuestos están prohibidos. Una de las razones por la que se introdujo tal restricción fue para simplificar el lenguaje de manipulación de datos (LMD). La propuesta fundamental de esta tesis es que esa exigencia es demasiado estricta El desarrollo de este proyecto tuvo como propósito demostrar la factibilidad de manejar dominios compuestos en el modelo relacional sin afectar el LMD. El relajamiento de tal exigencia consiste en permitir más de un elemento, pudiéndose manejar como una unidad (registro), aunque el número de elementos de un atributo compuesto no puede ser variable. En consecuencia, se ha propuesto extender el estándar SQL para el manejo de los dominios compuestos. Desde hace tiempo los promotores de las bases de datos orientadas a objetos expresan como ventaja el uso de tipos definidos por el usuario, especificamente el de los tipos complejos con respeto a los sistemas de bases de datos relacionales (ya que el estándar de SQL indica explícitamente que los valores deben ser atómicos). Relajando esta limitación se puede lograr el manejo de dominios compuestos en las columnas, y con el presente trabajo de tesis se pretende demostrar la viabilidad de manejar dominios compuestos en el modelo relacional sin necesidad de complicar el LMD. A continuación se presenta en resumen cuáles fueron los logros obtenidos durante el desarrollo del presente trabajo: 94 COMENTARIOS FINALES CAPíTUl.0 7 11 Definición de nuevos tipos de datos por parte del usuario. Se elimina la limitante de contar sólo con los tipos base (Char, Integer, L o n e t , y Date), con lo cual al usuario se le permite disponer de un mayor número de tipos. Mayor legibilidad en el desarrollo del código. El programador al tener las variables nemónicas (creadas específicamente a su aplicación) podrá contar con una mayor claridad en su código. Además de contar con las restricciones de los valores a insertar (ai defbir una columna[enbase a un dominio). Verificación de tipos más estricta. Este módulo evita la comparación de columnas que no t tengan sentido o ilógicas. Por ejemplo, si dos columnas toman sus valores del mismo dominio, es probable que tengan sentido las comparaciones donde participen estas columnas porque se comparan cosas similares. En cambio, si las dos columnas obtienen sus valores de 1 diferentes dominios, las comparaciones entre estas columnas sin duda carecerán de sentido. ,I Manejo de tipos de datos estructurados. Se logra brindar las ventajas que ofrece el uso de registros (dominios compuestos) similar a los lenguajes C y Pascai, sin afectar el LMD, con el beneficio adicional de poder indicar qué operadores relacionales son aplicables a un 'I dominio compuesto en particular. 11 Logro de un mayor nivel de abstracción en el manejo de datos. Con el manejo de los dominios compuestos se logra tener un nivel más de abstracción en forma análoga a los regishos en el caso de los lenguajes C y Pascal. I/ Los puntos antes mencionados encierran a grandes rasgos las aportaciones obtenidas con el desarrollo de este proyecto. La explicación detallada de los problemas involucrados, las soluciones propuestas y su implementación se explican en los capítulos 3 , 4 y 5 de esta tesis respectivamente. 'I 7.2. Posibles Extensiones Actualmente el uso de dominios nos permite contar con tipos deíjnidos por el usuario, tanto tipos simples 11como tipos estructurados (registros); sin embargo, quedaría por desarrollar los siguientes puntos: Definición y manejo de matrices y arreglos en el estándar SQL Debido a que los arregios y matrices tienen un nivel de abstracción aún mayor que el de los registros, facilitan aun más el manejo de datos, principalmente en el área ingenied. Tomando en cuenta los argumentos expuestbs para el manejo de los dominios compuestos, es de prever que la incorporación de tipos de datos arreglo y matriz traería beneficios similares a los de los dominios. 95 '1 COMENTARIOS FINALES CAPÍTUU) 7 1 Creación de fuociones que utilicen dominios simples y compuestos. Este proyecto podrá beneficiar enormemente el manejo de los dominios compuestos y ser de gran.ayuda en operaciodes que no se pueden realizar mediante las instrucciones existentes del estándar SQL, y tal beneficio no implica alejarse de los preceptos del modelo relaciona]; algo similar a los drspmadores se puede considerar lo anterior. Un ejemplo de esto sería obtener de un punto geográfdo X (dato compuesto) el punto mas cercano a él. Comparación en un orden especifico de elementos del dominio compuesto. Debido a que 'I se tengan que compara en un orden específico los componentes de un dominio en ocasiones compuesto, es necesario tener una cláusula que nos permita indicarlo. Por ejemplo, sea Fecha una c o l y a definida en base a un dominio compuesto con los elementos Dia, Mes y Año (como dominios simples), definidos en el mismo orden; para realizar una comparación correcta, el orden de los elementos de la columna Fecha debería ser Año, Mes y Dia. Generakión de código para la instrucción BEGIN DECLARE SECTION para los dominios compuestos. Actualmente se añade en forma manual el código correspondiente a los dominios compuestos que se invocan en la instrucción BEGIN DECLARE SECTION en la unihad predeñnida CodDomCTPU. La solución propuesta es la de modificar la rutina que genera el código para tal mstrucción. Para esto se tendrá que ir desplazando el código ya generado para poder insertar el nuevo código, ya que los elementos del dominio compuesto al ser referidos, ya deben existir. Operadores relacionales para dominios simples. Ya que el estándar SQL2 no considera que los dominios simples tengan restricciones en los operadores de comparación (y por ende las reuniones, uniones, ...), se propone incluirlas; ya que algunas comparaciones no siempre tienen sentido. Por ejemplo, en el dominio SEXO con valores válidos Masculino y Femenino, es eviddnte que las únicas operaciones aplicables a este dominio son "igual a" y "diferente de"; "menor que" no tiene sentido. 'I Algoritmos para determinar si el conjunto de un dominio es cerrado. Ya que los dominios deben contener un numero finito de valores, es necesario realizar un método que sea capaz de determinar cuando existe el conjunto cerrado, lo cual se logra en base a comparhciones de las cláusulas de restricción, estos algoritmos son de gran importancia ya que evitan problemas de validar correctamente los datos. 7.3. Observaciones En esti'tesis se han presentado los resultados de un proyecto relacionado con el desarrollo de un mecanismo que permite proporcionar el manejo de dominios en el SiMBaDD. Con la incorporación de los dominios compuestos en el SiMBaDD, el LMD puede trabajar de la forma normal, es decir, realizar las mismas instrucciones del estándar SQL con la ventaja de poder manejar datos complejos, sin la necesidad de extender la sintaxis existente. I1 96 ., CAPfTLEO 7 COMENTARIOS FINALES Se nota actualmente que hay gran interés en facilitar el manejo de datos complejos, y por tal razón han surgidc! nuevas metodologías, una de éstas es la de Bases de Datos Orientada a Objetos. Como se mencionó anteriormente, uno de los resultados de esta tesis es demostrar que el modelo relacionai se puede extender para obtener el beneficio que ofiecen los dominios compuestos. 11 Las principales características faitantes para incluir este trabajo en un sistema comercial son las siguientes: 11 - - Pruebas exhaustivas Normas he codificación y diseño Documentación detallada 'I Por Último, conviene destacar que actualmente ningún SMBDR comercial incorpora el manejo de los dominios compuestos. i! 97 ANEXO A GRAMATICA DEL LENGUAJE SOPORTADA POR EL SiMBaDD SOL ! Utilimmos la notación propuesta en I S 0 (1991), que es una extensión de la Forma BackusNaur (BNF) para especificar las cláusulas mas importantes del lenguaje SQL implementadas en el SiMBaDD, donde se usan las siguientes convenciones: <> ..[3 {1 I ... Represekta los símbolos no terminales del lenguaje. Es el operador de deñnición. Indica elementos opcionales. Agrupa elementos en una fórmula. Indica una alternativa. Indica &petición. - Especificación de Valor Función.- Especifica uno o más valores. <Especificación de valor>::= <Especificación de variable> I <Literal> - Especificación de Objeto Función.- Especifica una o más variables. <Especificación de objeto>::= <Especificación de variable> - Especificación de Variable Función.- Especifica una variable anñtriona. 98 I1 <Especificación de variable>::= a o m b r e de variable intercalada' [<Variable indicadora>] ri - Variable Indicadora Función.- Especifica una variable. I/ <Variable indicadora>::= [INDICATOR I :] <Nombre de variable intercalada> -Nombre de Variable intercalada Función.- Especifica una variable valida en Pascal. <Nombré de variable intercalada>::= Es cualquier identifcador de variable válido en Pascal - Especificacid de Columna Función.- Refiere una columna con nombre. I¡ <Especificación de columna>::= [<Nombre de tabla>.] a o m b r e de columna> - Especificación de Función de Conjunto Función.- Refiere una columna con nombre <Espechcación de función de conjunto>::= COUNT(*) I <Función de conjunto> -Función de conjunto FunciÓ&- Especifica las funciones de agregación <Función de conjunto>::= { AVG I MAX I MiN I S U M ) - Expresión Escalar Función.- Especifica un valor. <Expresión esealar>::= <Tédino> I <Expresión escalar> + <Término> 1 <Expresión escalar> - <Término> I1 - Término Funcióp- Especifica un término. -=Término>::= <Factor> 1 <Término> * <Factor> 1 <Término> / <Factor> II - Factor Función.- Especifica un valor primario. 11 99 I <Factor>*'= ,y [+ I -1 <Primario> - Primario Funcit5n.L Establece un valor primario, el cual puede estar negado O no. <Primario>::= <Especificación de valor> 1 <Especificación de columna> 1 <Especificación de función de conjunto> 1 (<Expr&(siÓnescala&) - Término Booleano 'I FunciónJktablece un predicado de comparación, el cual puede estar negado o no estarlo. q é r m i h o booleano>::= <Factor booleano> 1 <Término booleano> AND <Factor booleano> 11 - Factor Booleano Función.- Establece un factor de comparación, el cual puede estar negado o no estarlo. I/ <Factor booleano>::= [NOT] <Primario booleano> I1 - Primario Booleano Función.Establece un predicado de comparación, el cual puede estar negado o no estarlo !I <Primario booleano>::= <Predicado> I (<Condición de búsqueda>) - Predicado Función.- Establece un predicado de comparación el cual puede estar negado o no 1 <Predicado>::= <Predicado de comparación> I <Prediyado between> I <Predicado in> 1 <Predicado &e> I <Predicado null> I <Predicado exists> - Predicado de Comparación Función.- Especifica una comparación de dos valores I <Predicado de comparación>::= <Identificador> <Operador de comparación> <Especificación de valor> II li 100 'I - Especificación de Valor Función.- Permite delink valores numéricos o alfanuméricos. i! <Especificación de valor>::= <Valor numérico> I <Cadena de caracteres> - Predicado Between Función:- Especifica una comparación de rango. <Predicado between>::= <Expresión escalar> [NOT] BETWEEN <Expresión escalar> AND <Expresión escalar> I I1 - Predicado IN Función.- Especifica una comparación cuantificada. n <Predicado IN>::= <Expresión escalar> BOT] IN (<Subconsulta> I a i s t a de valores IN>) II - Lista de Valores I N Función.- Establece un conjunto de valores válidos. n <Lista de valores IN>::=<Especificación de valor> {, <Especificación de valor>} .. - Predicado L h Función.- Especifica una comparación de "correspondencia patrón". 1 <Predicado LIKE>::= <Especificación de columna> WOT] LIKE <Cadena de caracteres> 11 - Predicado NULL Función.- Especifica una prueba para un valor nulo. I <Predicado N I J L k : = <Especificación de columna> IS [NOT] NLnL - Predicado EXISTS Función.- Especifica una prueba para un conjunto vacío <Predicado EXISTS>::= EXISTS <subconsulta> - Literal Función.- Establece valores numéricos o alfanuméricos. <Literal>::= <Valor numérico> I <Cadena de caracteres> - Valor Numérico Función.- Establece un conjunto de dígitos. II 101 1 <valor numérico>::= <Di&> I <Valor m m e n C O > <figto> - Cadena de Caiacteres Función.- Establece un conjunto de caracteres alfanuméricos <Cadena'I de caracteres>::= <Letra> 1 <Letra>11 <Cadena de caractere@ I <agito> <Cadena de caracteres> - Ideotificador 1 Función.- Establece un conjunto de caracteres alfanuméricos <IdentiFicador>::= <Letra> 1 <Letra> <Identiíicador> 1 <Letra> <Digto> 1 <Letra> <Dígito> <Identificador> - Letra I Función.- Establece un conjunto de letras mayúsculas y/o minúsculas. 1 <Letra>::= %Letra mayúscula> I <Letra minúscula> -Relación de Símbolos Terminales <Letra mayúscula>::= AIBI~IDIEIFIGIHIIIJIKILIMINIÑIOIPIQIRISITIUIVIWIX Z <Letra 'hinúscuia>::= a I b I c I d I e l f 1 g l h I i l j I k1lI m l n l ñ l o I P I Ir1 S I t l u l v IwI x l y I z <Dígit&::= O 1 1 I 2 I 3 1 4 I 5 I 6 I 7 I 8 I 9 <Operador de comparación>::= I/ I I < I > 1 <= I >= O = 102 PROCEDIMYIEFUNCIONES NTOS Ip MPLE' DOMINIos En este anexo se describen brevemente los procedimientos y funciones mencionados en el pseudocódigo del Capítulo 5 . Además se menciona el uso de algunas variables globales, con el propósito de tener una mejor comprensión del funcionamiento de dicho pseudocódigo. Funciones. CreaTabla(Nodo, W). Recibe como parámetro de entrada el nombre de la computadora donde desea crear la tabla en la variable Nodo y la estructura de la tabla en W. Su función es crear una tabla en el nodo especificado. 4 DomDefault. Regresa un valor verdadero si el dominio permite la cláusula default, de lo contrado regresa un valor falso. YaExisteCol(LexVa1, W, NoCol). Realiza una búsqueda de la columna (recibida como parámet~oen LexVal) en la estructura de una tabla (recibida en W); esta función regresa un valor v&dadero si encontró la columna, además de su posición en la estructura en la variable de salida NoCol, de lo contrario regresa un valor falso. ExistColUniq(PosCol)Esta función regresa un valor verdadero si ya se encuentra deñnida como h Q U E ? la columna referida por el parámetro de entrada PosCol. 103 , !I - Tipo(TipoC, NoCol). Regresa un valor verdadero si el tipo especificado por la variable I TipoC para la columna referida por la variable NoCol es válido, de lo contrario regresa un valor falso. - TQd). Retorna un valor verdadero si el parámetro de entrada Id es un identiíicador (tabla, column~'Idominiossimple, dominios compuesto, índice), de no ser así retorna un valor falso. Procedimientos.'I - - - ColocaDomsEnTab(W, NoCol). Este procedimiento se encarga de guardar los elementos del dominio compuesto (apuntado por la variable global AptDomC) en la estructura de la tabla W (en el DAD), retornando la posición del Último elemento almacenado en tal estructura a traves del parámetro NoCol. Get-TokenEste procedimiento se encarga de leer las unidades léxicas de manera secuencial del programa fuente. ObtenElemDomCí,Id).Re~esaen el parámetro de salida Id el identificador leído de manera secuencia1del programa fuente, diferenciándose del procedimiento Get-Token en que éste contind si después de un identificador sigue un punto. I/ Variables Globales - LexVal ' - AptDomC Apuntador global que apunta al dominio compuesto activo (en uso). - SQLCODE Variable que almacena el estado en que finalización una instrucción (exito, error, valor(es) no encontrado(s)). - E Variable que indica el tipo de error si lo hay (Ciclo en un dominio compuesto, Id. duplicado, etc.). 11 Variable que toma su valor en el procedimiento Get-Token y contiene un lexema. 104 ANEXO LISTA ';DEERRORES c En este anexo se descriien los tipos de errores utilizados para mostrar los mensajes de error en la implementación de los dominios, cabe hacer mención que la variable S se utiliza como parámetro. No. de Error 177 178 179 180 181 182 183 184 Tipo de Error IDENTIFICADOR DE DOMINIO DUPLICADO ID DE RESTRICCIÓN DEL DOMINO U AL ID. DEL DOMINIO ELEMENTO DEL DOMINIO COMPUESTO DUPLICADO ELEMENTO DEL DOMINIO COMPUESTO = AL.ID.DE DOMINIO DOMdIO INEXISTENTE + S CICLO E N +S VALOR DEFAULT NO PERMITIDO EN COL. DEF SOBRE DOM COMP l N C O h C T 0 INCLUIR COL. DEF. SOBRE DC EN ELEMS. DEL SELECT LIST 105 REFERENCIAS 1 ~ ~ 9 3 DE 4 MIGUEL, ADORACION MMARIO G. PIATTINI, Concepción y Diseño deBases de Datos delModelo E/R al Modelo Relacional., Madrid, España: Addison-Wesley Iberoamericana, c1993, pp. 406 - 410. i/ [KOR93a] KORTH, HENRY F. M ABRAHAM SILBERSCHATZ,Fundamentos de Bases de Datos., Madrid, España: McGraw-Hill Interamencana, 2a Edición, ~1993, pp. 643 - 678. w ~ 9 3 b i -, I/ [KOR93b] pp. 400 - 401. -,pp. 670 - 672. I1 [DAT93a] ~ ~ 9 DATE, C. J., Una Introducción a los sistemas de Bases de Datos. U S A AddisonWesley, 5a. Edición, c1993, pp. 739 - 771. I/ 3-, ~ pp.1239 - 281. 11 [KOR93C] -,p. 23. [DAT93b] 1 , 7 7 6 - 813. [GR092a] GROFF, JAMES R. M PAUL N.WEINBEG, Aplique SQL., McGraw-W 1 hteramencana, Marzo 1992, pp. 47 - 49. ~ ~ 9 BOR93dl 3-, 4 pp. 425 - 431. -, p. 101 - 102. II P A T 9 5a] DATE, C. J., An Introduction to Database Systems. USA Addison-Wesley, 6a Edición, Marzo 1995, pp. 89 - 100, 139 - 174. I/ [GR092b] I -,pp.55-57. I/ PAT93cI -,pp. 258 - 259. [SOS95] SOSA, VICTOR J., "Arquitectura Cliente Servidor en un Manejador de Bases de Datos Relacionai". Cuemavaca, Mor.: Centro Nai. de Investigación y Desarrollo Tecnológico, 1994, pp. 19 - 27, (Tesis de Maestría). 'I [DAT95b] -,pp. 79 - 103. II ~ ~ 9 3 -4,p. 429. 106 Info-, INFORMIX-STAR Versión 5.O for the UNIX Operatingsystem, Junio 1992 (Folleto Técnico). I/ &OC94] KOCW G., Oracle 7 manual de referencia, Osbome-McGraw W, c1994, pp. 94196. pAT95cI -', DIG911 DIGITAL EQUIPMENT CORPORATION, VAxRdb/bWS SQL Reference Manual,Manual de Referencia, Maynard Massachusetts, USA, Diciembre 1991 wIC87al MICROSOFT CORPORATION, Microsoft SQL Server, The Sybase SQL Server database for PC network: An overview of technology for tomorrow Workgroup., Boletín Microsoft, c1987. &OR93e] -,pp. 455 - 473 PAT95 d] - pp. 246-252 wIG93fl -,i pp. 879 - 891. pp. 85 - 86. I ) DAT95eI /I 2, pp. 133,423 - 435, FnW3gI -,pp. 929 - 936. wCS7bI NIG93hl -,pp. 847 - 861. NG93il -,pp. 873 - 878. [Is0921 INTERNATIONAL ORGANIZATION FOR STANDARDIZATION (BO),' "Database Languaje SQL", Documento ISO/IEC 9075: 1992 (E). FnG93jl 7 p. , 492. [GRO92c] -, pp. 28 - 29. ~ 0 9 6 1 1 KROENKE. DAVID M M K. DOLAN. Procesamiento de Bases de Datos, Funhmentos, Diseño e Instrumentación., 5a. Edición, Mexico: Prentice Hall, c1:996,p. 271. -,p. 492, -, pp. 262 - 264,315. 107 '1 PAT891 Date, C. J., A Guide to then SQL Standard., 2a. Edición, Addison-Wesley, c1989, 11 pp. 1- 3. [GRO92d] -',pp. PAT93eI -, ,'pp. 244 - 252. LWIR871 WJRTH, N., Algorihos y Estructuras de Datos., 2a. Edición, Prentice Hall, c1987, p. 36. 7 - 11. MCROSOFT CORPORATION,Microso$ Windowsfor Workgroups, Versión 3.11, c1992. (Manual Técnico). [PAS911 11 BORL,AND INTERNATIONAL, TURBO PASCALfor Windows, Programme 'r, Versión 1.5, c1991 (Manual Técnico). I/ [GUZ90] GUZMAN, S. R, Desarrollo de un Lenguaje de Manipulación de Datos para un Manejador de Datos Distribuida (BDD), Puebla, h e . : Esc. de Ciencias FísicoMatemáticas, Universidad Autónoma de Puebla, 1990. (Tesis Profesional). !I MICROSOFT CORPORATION,Disk Operating System (DOS), Versión 3.3. c1986. (Manual Técnico). li PEREZ, J. O., Algoritmo para elMantenzmiento del Diccionario de Datos de una Base de Datos Distribuida Experimental, Cuemavaca, Mor.: Instituto Tecnológico y de Estudios Supenores de Monterrey, 1988. (Tesis de Maestría). 'I Arellano, V.M., Precompilador del Lenguaje de Manipulación de Datos Basado en SQL para un Manejador de Bases de Datos Distribuida Experimental, duernavaca, Mor.: Centro Nal. de Investigación y Desarrollo Tecnológico, 1992. (Tesis de Maestría). II [IS0891 INTERNATIONAL ORGANIZATION FOR STANDARDIZATION(ISO), "Database Languaje SQL WithIntegrity Enhacement", Documento ISO/EC 9075:1989 (E). pAT93fl -,p. 140. 108 1 BIBLIOGRAFÍA ~ ~ 9 V. M., Precompilador del Lenguaje de Manipulación de Datos Basado 2 Arellano, 1 en‘!SQLpara un Manejador de Bases de Datos Distribuida Experimental, Cuemavaca, Mor.: Centro Nal. de Investigación y Desarrollo Tecnológico, 1992. (Tesis de Maestría). PAT891 Date, C. J., A Guide to then SQL Standard., 2a. Edición, Addison-Wesley, c1989. PAT931 DATE, C. J., Una Introducción a los sistemas de Bases de Datos. USA: AddisonWesley, 5a. Edición, c1993. PAT951 DATE, C. J., An Introduction to Database Systems. USA Addison-Wesley, 6a. E&ciÓn, Marzo 1995. PIG911 DIGITAL EQUIPMENT CORPORATION, VAX Rdb/WS SQL Reference Manual,Manual de Referencia, Maynard Massachusetts, U S 4 Diciembre 1991. 11 !I [GRO92] GROFF, JAMES R M PAUL N.WEINBEG, Aplique SQL., McGraw-W Interamencana, Marzo 1992. [GUZ90] GUZMAN, S. R, Desarrollo de un Lenguaje de Manipulación de Datos para un Munejador de Datos Distribuida (BDD), Puebla, h e . : Esc. de Ciencias FísicoMatemáticas, Universidad Autónoma de Puebla, 1990. (Tesis Profesional). ~ 9 2 1 Informix, INFOMIX-STAR Versión 5. O for the UNIX OperatingSystem, Junio 1992 (Folleto Técnico). [IS0891 WTERNATIONAL. ORGANIZATIONFOR STANDARDIZATION (ISO),’ ”DatabaseLanguaje SQL With integriq Enhacement”, Documento ISO/IEC 9075:1989 (E). !I [NO921 INTERNATIONAL. ORGANIZATIONFOR STANDARDIZATION (ISO), “DatabaseLunguaje SQL“, Documento ISOíiEC 9075: 1992 (E). [KOC94] KOCH, G., Oracle 7 manual de referencia, Osbome-McGraw W, cl994. [KOR93] KORTH, HENRY F. M ABRAHAM SKBERSCHATZ, Fundamentos de Buses de Datos., Madrid, España: McGraw-W interamencana, 2a Edición, c1993. ~ 0 9 6 1 KROENKE. DAVID M M K. DOLAN. Procesamiento de Buses de Datos, hndamentos, Diseño e Instrumentación., 5a. Edición, Mexico: Rentice Hail, c1996. I1 109 MICROSOFT CORPORATION, Disk Operating System (DOS), Versión 3.3. c1986. (Manual Técnico). I1 MICROSOFT CORPORATION, Microsoft SQL Server, The Sybase SQL Server database for PC network An overview of technology for tomorrow Workgroup., Boletín Microsoft, ~ 1 9 8 7 . dCROSOFT CORPORATION,Microsoft wmi"indavfor Workgroups, Versión 3.i!, c1992. (Manual Técnico). D i ,MIGüEL, ADORACION Tyl MARIO G. PIATTiNI, Concepcióny Diseño de Bases de Datos del Modelo E/R al Modelo Reiacional., Madrid, España: Addison-Wesley Iberoamericana, cl993. BORLAND INTERNATIONAL,, TURBO PASCAL for Windows, Programme'r, Versión 1.5, c1991 (Manual Técnico). 'I PEREZ, J. O , Algoritmo para el Mantenimiento del Diccronarro de Datos de una Base de Datos Distribuida Experrmental, Cuemavaca, Mor.: Instituto Tedológico y de Estudios Superiores de Monterrey, 1988. (Tesis de Maestría) I/ S O S L VICTOR. J., "Arquitectura Cliente Servidor en un Manejador de Bases de D4tos Relacional" Cuemavaca, Mor : Centro Nal. de Investigación y Desarrollo Tecnológico, 1995, (Tesis de Maestría). WiRTH, N., Algorihm y Estructuras de Datos., 2a. Edición, Prentice Hall, ~1987;.