CONSULTAS A BANCOS DE DADOS E SEU PROCESSAMENTO Marinaldo Nunes SUMÁRIO INTRODUÇÃO .................................................................................................................................................... 3 DATALOG ........................................................................................................................................................... 4 PROGRAMAS DATALOG SEGUROS ............................................................................................................ 6 CONVERTENDO DATALOG PARA A ÁLGEBRA RELACIONAL ............................................................. 7 REGRAS RECURSIVAS .................................................................................................................................. 9 DATALOG1S ...................................................................................................................................................... 11 CONSULTAS RECURSIVAS ......................................................................................................................... 14 OBJECT SQL ................................................................................................................................................... 16 MODELO DE OBJETOS OSQL ..................................................................................................................... 17 OBJETOS ........................................................................................................................................................ 17 TIPOS .............................................................................................................................................................. 18 FUNÇÕES ....................................................................................................................................................... 18 SISTEMA DE TIPOS OSQL ........................................................................................................................... 18 SISTEMA DE FUNÇÕES OSQL .................................................................................................................... 19 LINGUAGEM DE CONSULTA ..................................................................................................................... 20 OQL[C++] .......................................................................................................................................................... 21 INTEGRAÇÃO ENTRE LINGUAGENS DE PROGRAMAÇÃO E CONSULTAS ...................................... 22 A LINGUAGEM DE CONSULTA .................................................................................................................. 24 INTERFACES VISUAIS DE CONSULTAS ................................................................................................... 29 EVOLUÇÃO DAS INTERFACES PARA BANCOS DE DADOS ................................................................. 30 INTERFACES TABULARES ......................................................................................................................... 30 INTERFACES DIAGRAMÁTICAS ............................................................................................................... 31 INTERFACES ICÔNICAS .............................................................................................................................. 31 INTERFACES HÍBRIDAS / MULTIMODAIS ............................................................................................... 32 EVOLUÇÃO DAS ESTRATÉGIAS DE INTERAÇÃO.................................................................................. 33 MANIPULAÇÃO DA ESTRUTURA ............................................................................................................. 33 MANIPULAÇÃO DO CONTEÚDO ............................................................................................................... 34 ALGUMAS INTERFACES VISUAIS ............................................................................................................ 36 CONCLUSÃO .................................................................................................................................................... 38 REFERÊNCIAS BIBLIOGRAFICAS ............................................................................................................. 39 UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 2 INTRODUÇÃO 1 Este trabalho faz parte da disciplina Bancos de Dados Avançados ministrada pelo professor Ulrich Schiel. Seu objetivo é mostrar alguns tipos de consultas, sobre dados em bancos de dados, levando em consideração o aspecto ‘processamento’. No capítulo 2, falamos sobre Datalog, linguagem, baseada em lógica, para consultas a bancos de dados. Na capítulo 3, abordamos uma extensão temporal de Datalog, o Datalog 1s. Em seguida, mostramos rapidamente uma nova funcionalidade disponibilizada pelo padrão SQL3, as consultas recursivas. Nos capítulos 4 e 5, discutimos duas extensões de linguagens procedurais para suportar consultas, prover persistência de dados, bem como oferecer outras funcionalidades comuns aos bancos de dados, são elas: OSQL e OQL[C++]. No capítulo seguinte discutimos uma nova forma de interação entre usuários e bancos de dados, ou seja, as interfaces visuais de consultas, mostrando os diversos tipos de interfaces existentes, as formas de manipulação dos dados disponibilizadas por tais interfaces e por fim alguns exemplos. Finalizando temos as conclusões e referências bibliográficas. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 3 2 DATALOG Linguagens declarativas são utilizadas para especificar regras em bancos de dados (BD) dedutivos. Tal denominação vem do fato que, este tipo de linguagem especifica o que o programa deve fazer, e não, como fazer. Os BD dedutivos trabalham baseado na lógica, tendo como ponto de partida, a linguagem de programação Prolog. Segundo [EN94], Datalog é um subconjunto de Prolog usado para definir regras declarativamente em conjunção com um conjunto de relações, as quais, são elas próprias, tratadas como literais da linguagem. Bancos de Dados Dedutivos utilizam principalmente dois tipos de especificações: fatos e regras. Fatos são predicados lógicos onde todos os seus argumentos são constantes. Regras são similares à visões relacionais, com a diferença que podem ser recursivas. Datalog é baseado em predicados com nomes únicos. Cada predicado tem um significado implícito, sugerido a partir do seu nome, e um número de argumentos, sendo que, se todos os argumentos de um predicado forem constantes, tal predicado indica que um fato é verdade. Por outro lado, se entre os argumentos existir alguma variável, este é considerado uma consulta, parte de uma regra ou uma restrição. Em Datalog, um banco de dados é visto como um conjunto de fatos. Cada fato representa uma tupla de uma tabela em um banco de dados relacional, e o nome de tal tabela, é determinado pelos nomes dos predicados que a formam. Por exemplo, temos os seguintes fatos: estudante (‘Maria”, 17,’Computação’). estudante(‘João’,16,’Computação’). estudante(‘Lucia’,18,’Engenharia Elétrica’). conceito(‘Maria’, 9.2). conceito(‘Joao’, 8.9). conceito(‘Lucia’, 9.1). UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 4 o banco de dados relacional equivalente teria as tabelas “estudante” e “conceito” com as seguintes organizações Estudante NOME IDADE CURSO Maria 17 Computação João 16 Computação Lúcia 18 Engenharia Elétrica Conceito NOME NOTA Maria 9.2 João 9.1 Lúcia 8.9 Na construção de um Datalog as seguintes convenções são adotadas: - Constante => palavras iniciando com letras minúsculas, números e palavras este apóstrofos ( ‘ ), por exemplo ‘Maria’; - Variáveis => palavras iniciando com letras maiúsculas. Outra característica relevante de um predicado para um programa Datalog é a aridade, determinada pelo número de argumentos do predicado. Por exemplo, o predicado estudante(‘Maria’,17,’Computação’) tem aridade igual a 3 (três), onde Maria, 17 e Computação são respectivamente primeiro, segundo e terceiro argumentos. Regras constituem a principal construção em programas Datalog, pois através delas, novos fatos são gerados visando satisfazer uma consulta submetidas ao banco de dados, que na verdade é um banco de fatos. Por exemplo, para a regra, cursa_Eletrica(Nome) :- estudante ( Nome, _ , ‘Engenharia Elétrica’) um novo conjunto de fatos é gerado virtualmente, onde cada fato gerado possui o formata da UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 5 cabeça da regra, cursa_Eletrica(Nome). Uma regra pode ter mais de um predicado no seu corpo, separados por virgula, indicando uma conjunção de objetivos. Por exemplo, encontrar os estudante de Computação com nota média maior que nove maiorNove(Nome) :- estudante(Nome, ’Computação’), conceito(Nome, Nota), Nota > 9. os fatos gerados pela regra satisfazem todas as condições impostas por cada predicado. Um disjunção é formada por várias regras com a mesma cabeça. Por exemplo, encontrar os estudantes de Computação ou Engenharia Elétrica que têm média maior que nove maiorNove(Nome) :- estudante (Nome , ’Computação’), conceito (Nome, Nota ), Nota > 9. maiorNove(Nome) :- estudante (Nome , ’Engenharia Eletrica’), conceito (Nome, Nota ), Nota > 9. o conjunto de fatos, gerados em resposta a uma disjunção, é composto pela união dos fatos resultantes de cada regra que a compõe. PROGRAMAS DATALOG SEGUROS Um programa ou uma regra é seguro se gera uma conjunto finito de fatos. Em geral, determinar se um conjunto de regras é seguro, é um problema indecidível, ou seja, não existe uma procedimento computacional definido para a solução de tal problema. Uma maneira de evitar programas inseguros, é limitar o domínio o qual cada variável de uma regra pode varrer. Por exemplo, para a regra maior_de_idade(Y) :- Y > 18 a variável Y pode assumir todos os valores acima de 18, sem restrição, gerando assim, um conjunto infinito de fatos. Mas, se a regra for reescrita da seguinte forma maior_de_idade(Y) :- estudante(X,Y,_ ), Y> 18. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 6 o resultado não será infinito, pois os valores que Y pode assumir estão restritos as idades de alguns estudantes do banco de dados. Concluímos que, um programa seguro é formado por regras seguras. Uma regra é segura se todas as suas variáveis são limitadas. Em [EN94] uma variável X é limitada se: I ) aparece no corpo da regra em um predicado regular, ou seja, um predicado que não contém operadores comparativos ( =, <, >, <=, >= ); II ) aparece no corpo da regra em um predicado da forma X=c ou c=X ou ( c1 <= X and X <= c2), onde c, c1 e c2 são constantes; ou III ) aparece no corpo da regra em um predicado da forma X=Y ou Y=X, onde Y é uma variável limitada. CONVERTENDO DATALOG PARA A ÁLGEBRA RELACIONAL Apenas programas Datalog seguros podem ser mapeados para expressões equivalentes da Álgebra Relacional. Para todo Datalog seguro existe uma expressão da Álgebra Relacional. A seguir mostramos o algoritmo de mapeamento de um programa Datalog seguro, e não recursivo, P para Álgebra Relacional. Passo 1 => P é transformado em um programa equivalente P’ sem nenhum comparador de igualdade. Por exemplo para a regra abaixo r: s(Z, b ,W) :- q(X, X ,Y), p(Y, Z ,a), W=Z, W >24.3. temos r: s(Z, b ,Z) :- q(X, X ,Y), p(Y, Z ,a), Z >24.3. Passo 2 => O corpo da regra é traduzido para a expressão AR (Álgebra Relacional) chamada Bodyr. Bodyr consiste de um produto cartesiano de toda a base ou de relações derivadas do corpo da regra, seguidas por uma seleção F, onde F é a conjunção das seguintes condições: UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 7 i) condição de desigualdade para cada objetivo. Por exemplo ii) igualdade entre colunas contendo a mesma variável, e; iii) igualdade entre uma coluna e uma constante. Z >24.3; Por exemplo, a condição Z > 24.3 é convertida em uma seleção do tipo $5 > 24.3, enquanto as duas ocorrências de X são traduzidas em $1 = $2 e para as Ys temos $3 = $4 e a constante na ultima coluna de p é mapeado em $6 = a. Assim obtemos Bodyr = $1=$2, $3=$4, $6=a, $5 > 24.3 (QxP); Passo 3 => Cada regra r é transformada em uma projeção em Bodyr de acordo com a cabeça de r. Para a regra r obtemos S = $5,b,$5 Bodyr Passo 4 => Múltiplas regras com a mesma cabeça são traduzidas em uma união de suas expressões equivalentes. Este mapeamento pode ser generalizado para traduzir regras com predicados negados. Por exemplo, r :- b(a,Y), c(Y), ~d(Y). UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 8 REGRAS RECURSIVAS Imagine que queremos montar uma lista de todos os componentes que compõe um objeto. O problema aqui é, um componente pode ser formado por componentes menores que por sua vez são formados por peça básicas, que não podem ser mais divididas. Considere as tabelas abaixo. CUSTO_PEÇA PEÇA FORNECEDOR CUSTO TEMPO Assento Columbus 20,00 14 Assento Biker 15,00 20 Raio Columbus 6,00 4 Pneu Cinelli 20,00 15 Pneu Suntour 22,00 12 Parafuso Araya 3,00 6 Aro Columbus 5,00 4 Freio Mavic 8,00 7 Pedal Mavic 7,00 7 MONTAGEM OBJETO PARTE QTD Bicicleta Roda 2 Bicicleta Assento 1 Roda Raio 36 Roda Aro 1 Roda Pneu 1 O predicado montagem (Objeto, Parte, Qtd) indica o objeto, suas partes imediatas e a quantidade destas partes que formam o objeto. O predicado custo_Peça(Peça, Fornecedor, UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 9 Custo, Time) descreve a peça, seu fornecedor, seu custo em cada fornecedor e o tempo para entrega da peça por fornecedor. Assuma agora que, queremos encontrar todas as partes de um dado objeto. Regras recursivas como, todas_peças (Objeto, Peça) :- montagem (Objeto, Peça, _). todas_peças (Objeto, Peça2) :- todas_peças (Objeto, Peça1), montagem (Peça1, Peça2, _). são necessárias para expressar este tipo de consulta. Uma regra é recursiva se sua cabeça aparece no corpo da regra. Uma regra não recursiva como todas_peças (Objeto, Peça) :- montagem (Objeto, Peça, _) definindo um predicado recursivo é denominada regra saída ou regra de parada. A seguir mostrando exemplos de consultas que usam regras recursivas. Consulta 1: Encontrar para cada objeto, suas partes principais e para cada parte suas peças componentes, por exemplo, uma bicicleta possui duas rodas que possuem dois pneus, aros, raios ( uma peça é ela própria seu componente básico). partesBasicas( Basica, Basica) :- custo_peca (Basica, _, _, _). partesBasicas( Obj, Basica) :- montagem (Obj, SubParte, _), partesBasicas( SubParte, Basica). Consulta 2: Encontrar para cada peça, o menor tempo de entrega. mais_rapida (Peça, Tempo) :- custo_peça ( Peça, Fornecedor, Custo, Tempo), ~mais_rapida (Peça, Tempo). mais_rapida(Peça, Tempo) :- custo_peça ( Peça, Fornecedor, Custo, Tempo), custo_peça ( Peça, Fornecedor2, Custo2, Tempo2), Tempo2 < Tempo. Consulta 3: Encontrar o tempo necessário para as subpartes de um dado objeto. tempoParaPeça (Parte, Peca, Tempo) :- partesBasicas (Parte, Peça), mais_rapida (Peça,Tempo). UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 10 DATALOG1S 3 Em Datalog1s, os predicados possuem um argumento especial que determina o tempo, denominado argumento temporal. Tal argumento assume valores de um domínio temporal discreto. Um domínio temporal discreto consiste de termos construídos usando a constante 0 e uma função unária +1. Por questão de simplicidade denotaremos ( ...( ( 0+1 ) +1 ) ...+1 ) por n. Também, se T é uma variável no domínio temporal, então T, T+1, e T+n são termos temporais válidos, onde T+n é uma forma abreviada para ( ... ( ( T+1 ) +1 ) ...+1 ). O programa Datalog1s abaixo modela o sucessão das estações climáticas: quarter(0,winter). quarter( T+1, spring ) :- quarter( T,winter ). quarter( T+1 , summer) :- quarter ( T, spring ). quarter( T+1 , fall ) :- quarter ( T, summer ). quarter( T+1 , winter ) :- quarter ( T, fall ). Datalog1s prover um formalismo natural para modela eventos e histórias que ocorrem em um domínio discreto, por exemplo um domínio isomórfico aos inteiros. A granularidade do termo usado, entretanto, depende da aplicação. No exemplo acima, a granularidade de tempo foi as estações do ano. A seguir, mostramos um exemplo que lista a escala de horários dos trens para Newcastle, a granularidade do tempo em tal exemplo são horas. Trens para Newcastle parte de duas em duas horas, iniciando as 8:00h e finalizando as 22:00h. O programa Datalog1S para tal é: before22 ( 22 ). before22 ( Hora ) :- before22 ( Hora+1 ). leaves ( 8, newcastle ). leaves ( T+2, newcastle ) :- leaves (T, newcastle ), before22 (T). UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 11 Assim a consulta ?leaves ( When, newcastle ) irá gerar os horários de partida para Newcastle. Datalog1s é o Datalog padrão com uma interpretação temporal agregada. Outro ponto importante sobre Datalog1s é que ela é capaz de representar o raciocínio temporal da mesma forma que uma linguagem temporal de propósito especial com operadores modais. Tomemos como exemplo, a Lógica Temporal Linear Proporsicional (LTLP) que é baseada na noção que existe uma sucessão de estados H = (S 0,S1, ...) chamada historia. Então, operadores modais são usados para definir em qual estado o predicado p é verdadeiro. Por exemplo, o programa dos trens de Newcastle pode ser modelado por um predicado newcstl, que é verdadeiro nos seguintes estados S8, S10, S12, S14, S16, S18, S20, S22, sendo falsos nos outros estados. Então os predicados temporais que pertencem a H são definidos da seguinte forma: 1. Átomos: Seja p um predicado proposicional atômico. Considere p como o estado inicial S0 da H. Além dos operadores proposicionais V, & e ~. LTLP oferece os seguintes operadores: 2. Próximo: Próximo p, denotado por Op, é verdadeiro na história H, quando p pertence a história H1={S1,S2,….}. Consequentemente, Onp, n 0, denota que p é verdadeiro na história (Sn,Sn+1, ...) 3. Eventualmente: Eventualmente q denotado por Fq indica que, para algum n, Onq 4. Ate: p até q, denotado pUq, indica que para algum n, Onq, e para todo estado K<n, OKp. Outros operadores podem ser derivados dos operadores acima. Por exemplo, o fato que q nunca será verdadeiro pode ser definido como ~Fq. Já o fato que q é sempre verdadeiro, é simplesmente definido como ~(F(~q); a notação Gq é usada para indicar que q é sempre verdadeiro. O operador p antes q, é denotado por pq. LTLP encontra muitas aplicações, incluindo consultas temporais e prova de propriedades de sistemas dinâmicos. Por exemplo, a questão “Existe trem para Newcastle que UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 12 é seguido por outro uma hora depois?” pode ser expressa pela seguinte consulta: ?F( newcstl & Onewcstl ) Toda consulta em LTLP pode ser expressa em Datalog1s.. Por exemplo, a consulta anterior pode ser escrita da seguinte forma ?parte_para_newcstl onde parte_para_newcstl :- newcstl (J) & newcstl (J+1). Portanto, a interpretação “para algum J” atribuída ao argumento temporal J de um predicado Datalog1s é suficiente para modelar o operador F de LTLP, enquanto O é simulado por +1. A tradução de outros operadores são, entretanto, mais complexas. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 13 CONSULTAS RECURSIVAS 4 O novo padrão SQL3 inclui suporte para consultas recursivas. Por exemplo, a consulta Datalog todas_peças(Objeto, Peça) :- montagem(Objeto, Peça, _). (1) todas_peças(Objeto, Peça2) :-todas_peças(Objeto, Peça), montagem(Peça,Peça2, _). (2) em SQL3 é escrita como uma visão da seguinte forma, CREATE RECURSIVE view todas_pecas ( Principal, Sub) AS SELECT OBJETO, PARTE FROM montagem UNION SELECT all.Principal, pc.PARTE FROM todas_pecas all, montagem pc WHERE all.Sub = pc.OBJETO O comando SELECT antes do UNION é equivalente a regra de saída (1), enquanto o comando SELECT depois do UNION corresponde a regra recursiva (2). Tais partes de visão serão referenciados como exit select e recursive select respectivamente. Como todas_peças é uma visão virtual, é preciso materializá-la, ou parte dela, para que uma consulta real possa ser feita. Por exemplo a consulta SELECT * FROM todas_pecas requer a materialização de toda a visão. O construtor WITH prover uma outra maneira, mais direta, para expressar recursão em SQL3. Por exemplo, a consulta para encontrar todas as partes básicas que contém a peça UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 14 raio como componente, pode ser expressa da seguinte forma: WITH RECURSIVE todas_partes ( Principal, Menor) AS ( SELECT Objeto, Parte FROM montagem UNION SELECT assb.Objeto, all.Menor FROM montagem assb, todas_partes all WHERE assb.Parte = all.Principal ) SELECT * WHERE Menor = ‘raio’ UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 15 OBJECT SQL 5 Object SQL (OSQL) é uma linguagem para bancos de dados que combina uma linguagem procedural orientada a expressão com uma linguagem de consulta declarativa de alto nível. Foi desenvolvida como parte do projeto Iris dos Laboratórios da Hewlett-Packard [Fea89][Lyn91][WLH90]. O desenvolvimento de OSQL foi influenciado pelo trabalho em modelos de banco de dados semânticos e funcionais, notavelmente a linguagem Daplex [Shi81] e a linguagem Taxis [MBW80]. A linguagem OSQL combina características da orientação a objetos encontradas nas linguagens de programação, como C++ [ES90] por exemplo, com uma capacidade de pesquisa que é um superconjunto da linguagem SQL. Consequentemente, OSQL prover muitas das vantagens da orientação a objetos, como aumento da produtividade, reutilização de código, extensibilidade e etc, com características da tecnologia atual de banco de dados, por exemplo, otimização de consultas, restrições de integridade, acesso multi-usuário, autorização e segurança. Os objetivos do desenvolvimento de OSQL são que ela deveria: Ser baseada em um modelo ortogonal simples orientado a objeto e sistema de tipos; Ser computacionalmente completa e independente de linguagens de programação para aplicações específicas; Prover meios para especificar consultas declarativas e permitir que tais consultas sejam compiladas e otimizadas de forma similar as oferecidas em linguagens de consultas relacional; Ser extensível - isto é, permitir ao usuário definir novos tipos e operações; Criar distinções não artificiais entre objetos meta-dados e objetos definidos pelos usuários; Permitir separar definições da interface de um objeto (tipo) e a(s) correspondente(s) implementação(ões). UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 16 OSQL é orientada a objetos no sentido de que ele prover identificação de objeto, um sistema de tipos com múltipla herança, polimorfismo de funções e objetos agregados built-in, como conjunto (set) e listas. Em OSQL o estado de um objeto não é uma parte intrínseca do próprio objeto, mas é definido pelas funções que modelam os atributos, relacionamentos entre objetos e comportamento dos objetos. O sistema de tipos de OSQL permite ao compilador OSQL fazer a checagem de tipos em tempo de compilação. Entretanto, como OSQL permite a criação de objetos e funções dinamicamente, ou seja, a checagem em tempo de compilação é complementada por uma checagem em tempo de execução. Uma outra característica importante é que o estado de um objeto não é uma parte intrínseca de um objeto, mas é definido pelas funções que modelam atributos, relacionamentos e comportamento. Funções podem ser implementada como stored procedures ou podem ser computadas. A implementação de uma função computada é especificada por uma expressão, o “corpo” da função; a lista de parâmetros e o valor retornado pela função. OSQL também suporta funções externas, ou seja, escritas em outras linguagens de programação, como C, C++, Cobol, etc. MODELO DE OBJETOS OSQL A linguagem OSQL é centrada em volta de três conceitos básicos: objetos, tipos e funções. OBJETOS Objetos representam entidades do mundo real e conceitos do domínio da aplicação do banco de dados. Em OSQL, objetos podem ser classificados em três categorias: Literais – por exemplo, inteiros, string e objetos binários; Agregados – por exemplo, uma lista ou tupla contendo dados de um paciente, como nome, idade, endereço, etc; Surrogates – por exemplo, paciente e clínica. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 17 Cada objeto do tipo surrogate possui uma única identificação ( OID ) associado e podem ser explicitamente criados e excluídos. TIPOS Tipos são usados para classificar objetos em termos de propriedades e/ou comportamento e para definir “assinaturas” de funções (seus argumentos e tipo retornado). As extensões de tipos é o conjunto de objetos que são eles próprios instâncias de tipo. Tipos Surrogate têm extensões dinâmicas que mudam dependendo dos tipos e ordem em que tais objetos são criados e excluídos. Tipos agregados e objetos agregados podem ser construídos de outros tipos e objetos, respectivamente, usando tipos agregados definidos pelo sistema e construtores de objetos. Tipos relacionam-se em uma hierarquia de subtipos/supertipos que suporta múltipla herança. Tipos definidos pelo usuário podem ser adicionados como um subtipo do tipo UserSurrogate. FUNÇÕES Funções são usadas para modelar atributos, relacionamentos entre objetos e o comportamento de tais objetos. Uma função OSQL recebe um objeto como um argumento e pode retornar um objeto como resultado. Funções OSQL podem ser sobrecarregadas – isto é, pode haver múltiplas funções como o mesmo nome, mas diferentes tipos de argumentos. OSQL não permite sobrecarga de função em termos de valores de retorno. Uma função sobrecarregada é referenciada como uma função genérica (generic function). Os resolventes de uma função genérica são denominados de funções específicas (specific functions). SISTEMA DE TIPOS OSQL Para construir um sistema em OSQL, uma grande quantidade de objetos, tipos e funções precisam ser definidos. O tipo objeto raiz é chamado Object e é o supertipo de todos os outros tipos de objetos. Subtipos de objetos são: UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 18 TypeRef – tipo cuja extensão é o conjunto de todos os tipos de objetos, incluindo tipos agregados; Surrogate – o supertipo de todos os tipos onde suas instâncias têm OIDs associados, incluído Function, Type, Index. User, UserGroup e UserSurrogate; UserSurrogate – supertipo de todos tipos definidos pelo usuário, por exemplo, paciente, aluno, etc; Type – tipo cuja extensão é o conjunto de todos os tipos surrogate, por exemplo, todos tipos diferentes dos tipos agregados; Transient – supertipo de todos os tipos de objetos transitórios, ou seja , objetos cujo instâncias são temporários, por exemplo, Transaction, Savepoint, Session e Cursor; Aggregate – o supertipo de todos os objetos agregados; Tipos Literais – os tipos literais suportados por OSQL incluem Number ( Integer, SmallInteger, Double, Real), Char, Binary, Date, Time, DateTime e Interval; Void – Void é um subtipo de todos os tipos, exceto tipos agregados; sua extensão é o conjunto vazio. SISTEMA DE FUNÇÕES OSQL Existe um grande número de funções, definidas pelo sistema, que provêem as funcionalidades necessárias para implementar um gerenciamento adequado de dados orientados a objeto. CreateType – cria um novo tipo e cria uma ou mais funções que têm novos tipos como seus argumentos; CreateFunction – cria uma nova (definida pelo usuário) função; ImplStored – implementa uma função ou conjunto de funções como um stored procedure; ImplOSQL – implementa uma função como uma expressão OSQL, como uma expressão em uma linguagem procedural ou como uma expressão de consulta; UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 19 ImplExternal – implementa uma função como um programa arbitrário, escrito em uma linguagem de programação externa; CreateObj – cria um novo objeto, uma instancia de um tipo definido pelo usuário, opcionalmente inicializando uma ou mais funções para um novo objeto. LINGUAGEM DE CONSULTA OSQL suporta uma linguagem de consulta cuja semântica é baseada no domínio de cálculos, com suporte a domínios agregados, funções e multiconjuntos (bags). A função OSQL SELECT prove as facilidades básicas de consulta de OSQL e assemelha-se com o comando Select de SQL. Tal função tem a seguinte sintaxe Select : = resStruct: ResStruct ResList: Expr+ ForEach: Declaration* Where : Expr GroupBy : Group* Having: Expr OrderBy: orderSpec*; Todas as partes do select acima são opcionais, exceto resList. Por exemplo, utilizando a sintaxe concreta usada pelo OpenODB [AD92][AC93][HP92] para recuperar o nome de uma pessoa, avaliaremos a seguinte expressão: select nome(p) O compilador de consultas inferirá que o tipo desta expressão é BagType(TupleType(Char)). Podemos utilizar a opção resStruct para mudar o tipo do resultado retornado. Por exemplo, para retornar apenas o primeiro nome, nós adicionamos a palavra-chave single na expressão da seguinte forma, select single atomic nome(p). Expressões select são avaliadas e convertidas em chamadas para uma função select pré-definida no sistema, em seguida seus argumentos são passados sem nenhuma avaliação. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 20 OQL[C++] 6 O desenvolvimento de linguagens de consulta é um dos maiores desafios para os desenvolvedores de sistemas de bancos de dados orientado a objetos (SBDOOs). Devido a falta de padrão dos modelos de dados, um método comum para construir BDOOs consiste em adotar o sistema de tipos de uma linguagem de programação orientado a objetos e estendê-lo para suportar características de banco de dados tais como persistência, transações e consultas. Nos sistemas gerenciadores de bancos de dados tradicionais, aplicações de bancos de dados são escritas usando comando de consulta embutidos em linguagens de programação de propósito geral, tais linguagens são referenciadas como linguagens hospedeiras. Tal estratégia tem cinco problemas: 1. O modelo de dados do banco de dados e o sistema de tipos da linguagem de programação não "casam". Dessa forma, o conjunto de objetos retornado pela consulta não pode ser manipulada diretamente pela linguagem de programação em uso. Isto acontece em virtude de que, grande parte das linguagens de programação não dispõe do tipo conjunto entre seus tipos básicos; 2. A falta de checagem de tipos dá margem a introdução de inconsistências no banco de dados pela aplicação; 3. Consultas podem apenas serem formuladas em objetos persistentes do BD (relações); elas não podem ser formuladas sobre objetos temporários; 4. Comandos de consulta e comando de linguagens de programação não podem ser combinados livremente; 5. A sintaxe e semântica das duas linguagens são completamente diferentes e o programador necessita aprender tais diferenças. Visando eliminar tais problemas, uma extensão de C++ com persistencia e suporte a consultas, denominado OQL[C++], foi proposto. OQL[C++] possui as seguintes características UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 21 - Suporta consultas em coleções de tipos semanticamente diferentes, abstração de dados, herança e objetos complexos; - Suporta uma checagem de tipos uniforme em toda a aplicação, incluindo consultas e expressões da linguagem de programação (LP) em uso; - Permite consultas em dados persistentes e temporários; - Permite que expressões da linguagem de programação possam ser usados na construção das consultas; - Consultas podem operar sobre uma coleção de tipos semanticamente diferentes; - As noções de tipos e tipos estendido são separadas, possibilitando assim, a criação e consulta em múltiplas coleções de tipos em uma aplicação. INTEGRAÇÃO ENTRE LINGUAGENS DE PROGRAMAÇÃO E CONSULTAS Não existem critérios ou formalismo para determinar uma boa integração entre linguagens de consulta e linguagens de programação. Mostraremos a seguir, alguns requisitos que contribuem para definir tal aspecto. Tais requisitos são derivados de observações das deficiências da integração entre linguagens de consultas e linguagens de programação hospedeiras. Os requisitos são: - Sistema de Tipos de Linguagens = Modelo de Dados Unificando o sistema de tipos de linguagem de programação e o modelo de dados suportados pelo sistema de banco de dados reduz-se substancialmente o problema de impedance mismatch. - Checagem de Tipos Uma boa integração deve suportar uma forte checagem de tipos, tanto para a LP e os comandos de consultas. Falta de checagem de tipos pode permitir erros em tempo de execução causados pela aplicação, a uma operação, de operandos de tipos errados, os quais podem comprometer a integridade do banco de dados. OQL[C++] realiza a combinação de checagem de tipos estática ou dinâmica. Checagem em tempo de execução assegura que apenas tipos de objetos corretos são transferidos entre a base de objetos e o espaço da aplicação. Checagem em tempo de UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 22 compilação assegura que um vez os objetos estejam no espaço da aplicação, eles são manipulados consistentemente. - Separação entre Tipos e Tipos Estendidos Um linguagem de consulta a objetos deve pode operar em tipos semanticamente diferentes . Um corolário para este requisito é a separação entre os conceitos de tipos e tipos estendidos no modelo de dados. Tipos estendidos, ou implícitos, é uma coleção de todas as instâncias de um particular tipo. Uma coleção explicita é uma coleção definida e mantida explicitamente pela aplicação. O suporte a tipos estendidos prover mais flexibilidade ao programador, permitindo a definição de múltiplas coleções de tipos e compartilhamento de objetos entre múltiplas coleções. Coleções explicitas são disponibilizadas por serem o escolha mais natural para os programadores de LPs convencionais. - Combinando Comando de Linguagens de Consulta e Comandos de Linguagens de Programação Uma linguagem de consulta bem integrada deve permitir a especificação de expressões de linguagens de programação, onde fizer sentido, dentro da consulta. Da mesma forma, expressões de consulta devem ser permitir ser passadas como argumentos para um expressão da LP. OQL[C++] permite que expressões definidas pelo usuário possam ser usadas como predicados em uma cláusula WHERE. Objetos e variáveis podem ser especificados como alvos para a consulta na cláusula FROM. A declaração de variáveis de escopo na cláusula FROM é idêntica a declaração de variáveis em C++. OQL[C++] permite a criação de novos objetos como resultado de uma consulta através de tipos construtores em C++. - Unificação de Sintaxe e Semântica de Consulta e Comandos de LP Idealmente , a sintaxe e semântica de uma extensão de consulta deve ser compatível com a linguagem de programação de esta sendo estendida. Algumas linguagens de consultas generalizam a sintaxe de linguagens de consultas relacionais, por exemplo, SQL ou QUEL, para suportar objetos. Alguns linguagens de programação para banco de dados (Taxis, por exemplo) e linguagens de programação persistentes (O++, por exemplo) generalizam a sintaxe de comandos interativos para suportar predicados. Finalmente, algums linguagens de consulta possuem sintaxe completamente diferentes, por exemplo, ObjectStore’s. Outros requisitos importantes que podemos citar são: suporte a tipos abstratos de UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 23 dados e suporte uniforme a pesquisa em dados persistentes e temporários. A LINGUAGEM DE CONSULTA Um comando de pesquisa em OQL[C++] é uma extensão de um bloco de consulta SQL representado da seguinte forma: <resultado> = SELECT <objetos> FROM <variável de escopo> IN <conjunto de objetos> WHERE <predicado> A cláusula SELECT identifica o tipo de objetos no conjunto de objetos que serão retornados pela consulta. A cláusula FROM declara a variável de escopo e o conjunto de objetos que será consultado. Várias variáveis de escopo sobre vários conjunto de objetos podem ser declaradas nesta cláusula. A cláusula WHERE especifica o predicado que define as propriedades a serem satisfeitas pelo objetos que serão recuperados. OQL[C++] aceita certas expressões em C++ quando ela faz sentido na consulta. Dessa forma combinando aspectos de SQL e da sintaxe de C++ será disponibilizada uma capacidade de consulta a objetos que atende tanto a desenvolvedores de banco de dados e programadores em C++. A seguir mostraremos, através de exemplo de consultas no esquema da figura 01, algumas das característica de OQL[C++]. Class Pessoa{ Public: Pessoa ( Nome& ,Endereço&, Nascimento&); Int idade(); String sexo(); Nome nome(); Endereço Residencia(); Virtual void_print (); Void conjunto_nome(); UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 24 Void conjunto_endereço(); …}; class Fisioterapeuta: public Pessoa { public: String Especialidade(); Endereço Consultorio(); String Telefone(); Virtual void print(); …}; class Registro_Medico{ public: int N_Paciente(); Date data; String diagnostico(); List <Lab_Teste> lab_testes(); List <Raio_X> raio_x_testes(); }; class Paciente: public Pessoa{ public: int identidade(); Fisioterapeuta doutor_da_familia(); Set <Registro_Medico> registros(); Virtual void print (); … }; Figura 01. Esquema de um BD em OQL[C++] UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 25 Exemplo 1: Quais os pacientes que são tratados pelo Dr. James. Set <Paciente> result; Result = SELECT p FROM Paciente p IN Pacientes WHERE p.familia_doutor( ).nome( ) = ”James”; Nesta consulta a variável de escopo p refere-se aos objetos de um conjunto chamado Pacientes do tipo Set<Paciente>. A expressão p.familia_doutor( ).nome( ), chamada de path expression, permite a navegação através do grafo de composição de objetos de maneira simplificada. Path expression provêem um mecanismo uniforme para a formulação de consultas que envolvem composição de objetos e funções herdadas. O resultado da consulta é um conjunto de objetos do tipo Set<Paciente>, o qual é atribuído a uma variável result do mesmo tipo. Esta consulta pode ser reescrita utilizando recursos como ponteiros tendo como resposta o mesmo resultado, ou seja, Result = SELECT p FROM Paciente *p IN Pacientes WHERE p-->familia_doutor( ).nome( ) = ”James”; Exemplo 2: Selecionar as pessoas que são tratadas pelo Dr. James. Set<Pessoa> result; Result = SELET (Pessoa) p FROM Paciente p IN Pacientes WHERE p.familia_doutor ( ).nome( ) = “James”; Neste exemplo, podemos verificar que os tipos retornados pelas consultas podem ser o mesmo tipo dos objetos sendo consultados, no caso Pacientes, tipo ancestrais a tais objetos ou um novo tipo. A consulta do Exemplo 3 mostra uma consulta que retorna um novo tipo de objeto, ou seja, usa os construtores C++ como parte da cláusula SELECT para criar um conjunto de objetos de um novo tipo. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 26 Exemplo 3: Recuperar os nomes e as idades do pacientes com mesmo de 10 anos. Class Novo_Obj { Novo_Obj ( Nome&, int& ); } Set <Novo_Obj> result; Result =SELECT Novo_Obj (p.nome( ), p.idade( )) FROM Paciente p IN Pacientes WHERE p.paciente( ) < 10 É possível usa funções definidas pelo usuário nas cláusulas FROM e WHERE da consulta. O exemplo 4 mostra um exemplo do uso de tal recurso. Exemplo 4: Recuperar os pacientes cujo raio X indica um caso de Tuberculose. Set<Paciente> result; result = SELECT p FROM Paciente WHERE EXISTS ( SELECT * FROM Registro_Medico r IN p.registros( ) WHERE EXISTS ( SELECT * FROM Raio_x x IN r.raio_x_testes( ) WHERE raio_x_igual(x.figura( ), padrao ) ) ); onde raio_x_igual é uma função booleana definida pelo usuário que compara a representação digital de x.figura( ) de um raio-x com a variável padrão do tipo Bitmap, tendo como conteúdo um raio-x típico de um tuberculoso. Além de comandos de consultas, OQL[C++] suporta, como SQL, comandos de modificações do tipo UPDATE, INSERT e DELETE aplicados para modificar o estado de um subconjunto de objetos especificados por um predicado. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 27 UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 28 INTERFACES VISUAIS DE CONSULTAS 7 Visando proporcionar aos usuários uma forma rápida e simples para acessar grandes volumes de dados, diversas pesquisas tem sido feitas em torno do desenvolvimento de ferramentas visuais de consultas a bancos de dados. Algumas interfaces visuais de consultas foram propostas como forma de suprir as deficiências de linguagens de consulta não procedurais, tais como QUEL ou SQL. Estas linguagens embora eficientes na formulação de consultas ad hoc, são restritas a usuários especialistas na área. As primeiras linguagens visuais de consulta foram a Cupid [MS75] e QBE ( Query-by-Example) [Zlo77]. Existem outros fatores que estimulam à adoção de técnicas visuais nas interfaces de consultas modernas, são [FS97]: O usuário pode construir sua consulta especificando seus componentes em qualquer ordem; O usuário tem uma visão da sua consulta na tela como ela está sendo construída, e pode adicionar/retirar componentes da consulta até que a visão corrente represente a consulta desejada; O usuário não precisa conhecer a estrutura do banco de dados para formular a consulta; A utilização de imagens, ao invés de linguagens textuais; O surgimento do paradigma de orientação a objetos; O crescimento da complexidade das aplicações de bancos de dados; Crescimento da necessidade de acessar BD’s por usuários não especializados. Propostas iniciais surgiram de explorar os conceitos representados graficamente dos modelos semânticos como construtores de linguagens de consulta. Mais tarde, esta abordagem foi aplicada aos modelos orientado a objetos, onde o acesso aos dados é feito através da "navegação" sobre a estrutura complexa de um esquema conceitual ( intenção do banco de dados), percorrendo sobre as classes e relacionamentos hierárquicos entre classes. A UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 29 visualização do domínio da aplicação se torna mais próxima da visão real que o usuário tem sobre os dados. Sistemas com o propósito de extrair informações de um banco de dados têm sido desenvolvidos, dentre eles podemos citar os Sistemas Visuais de Consultas (SVC)[Cea97]. Os SVCs incluem uma linguagem de consulta para expressar consultas em um formalismo visual e uma estratégia de consulta e interação. Eles são uma alternativa às linguagens textuais de consulta, que são dificilmente exploradas por usuários novatos; e são orientados a um amplo espectro de usuários que tem habilidades técnicas limitadas e geralmente, não tem conhecimento da estrutura interna do BD. EVOLUÇÃO DAS INTERFACES PARA BANCOS DE DADOS As interfaces visuais têm evoluído consideravelmente nos últimos anos. Em [FS97] é feito uma avaliação para SVCs. Utilizando-se de tal avaliação mostraremos os SVCs abordando os seguintes aspectos: 1. Evolução das principais representações visuais; 2. Evolução e surgimento de novas estratégias de interação; As representações visuais mais utilizadas nos SVCs são: tabular, diagramática, icônica e híbrida. Tais representações serão descritas a seguir. INTERFACES TABULARES Na representação tabular, os dados são organizados e visualmente representados como tabelas e os relacionamentos entre os dados como uma justaposição de retângulos. Esta representação é bastante adequada para a estrutura do modelo relacional. A primeira interface tabular conhecida mundialmente é a linguagem QBE (Query-By-Example) Em QBE as tabelas são mostradas visualmente, sobre as quais o usuário formula sua consulta preenchendo os atributos da tabela com exemplos e restrições necessárias para o UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 30 resultado da consulta. QBE tornou-se melhor que as linguagens textuais desde que, os usuários não precisam memorizar os nomes dos componentes de uma tabelas. Na década de 90, mesmo com o paradigma de orientação a objeto integrado ao banco de dados, novas interfaces tabulares foram surgindo devido a simplicidade da representação tabular e do modelo relacional. A estas novas interfaces tabulares foram incorporadas novas características que possam satisfazer a demanda de novas aplicações. INTERFACES DIAGRAMÁTICAS Diagramas em um SVC representam visualmente entidades e relacionamentos entre entidades, de uma forma similar a estrutura de um grafo. Sua popularidade surgiu a partir da representação visual dos modelos semânticos, em particular o modelo E-R. A primeira interface diagramática surgiu em 75, a interface Cupid, baseado na álgebra relacional. Como o QBE, Cupid foi projetada como uma interface para um banco de dados relacional e utiliza símbolos para representar componentes de uma consulta. O usuário seleciona componentes relevantes e constrói sua consulta a partir destes componentes. Assim como as interfaces tabulares, novas abordagens foram incorporadas às interfaces diagramáticas de forma a fortalecer o seu poder de visualização. Como exemplo de interfaces diagramáticas podemos citar: Picasso [KKS88], G-OQL [Ty88], GOOD [GPT93], ConTOM [FS95], QBD* [ACS90] , WINONA [RK95]e AMAZE [BFG95] ( ambas com visualização diagramática tridimensional), etc. Recentemente os diagramas são utilizados para facilitar a visualização da estrutura dos documentos na Web. INTERFACES ICÔNICAS As interfaces icônicas representam um aperfeiçoamento na interação homemmáquina. Isto se deve ao poder de metáfora que os ícones proporcionam na representação visual de um conceito ou de uma função. Foi a partir da representação icônica que surgiu a metáfora mais popular dentro das plataformas Macintosh, Ms-Windows e X-Windows, a metáfora desktop. Em uma metáfora desktop, arquivos, programas e dispositivos são UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 31 representados como entidades gráficas que simulam objetos que podem ser encontrados em um ambiente de escritório: documentos, diretórios, caixas de correio, etc. Os ícones em um SVC representam tanto as entidades do mundo real como as funcionalidades disponíveis do sistema. Contudo, a representação icônica não se tornou popular em banco de dados pelo seguinte motivo: o esquema conceitual do banco de dados não é visualizado explicitamente nos SVCs icônicos, desde que não se consegue representar explicitamente o relacionamento entre as entidades. A primeira interface icônica para banco de dados que se tem notícia é a IconicBrowser [Tea90], depois vieram as interfaces Iconografer [DW91] e QBI [MC95]. Recentemente surgiu uma interface icônica para bancos de dados orientado a objetos, denominada Oggetto Desktop [KMS96], que integra a metáfora desktop com a orientação a objeto. Esta interface permite a navegação sobre os relacionamentos é-um e instância-de, utilizando os componentes diretórios ( representando uma classe ou subclasse) e arquivos ( representado um objeto instância de uma classe), amplamente usados em sistemas operacionais. Outras interfaces recentes são Marmota [CMP96], que realiza consultas remotas na Web e uma interface que manipula bancos de dados de pinturas, através da filtragem de um subconjunto dos dados , feitas por ícones representando cores, dentro das categorias de tonalidades, luminosidade e saturação. INTERFACES HÍBRIDAS / MULTIMODAIS Devido ao crescimento da complexidade das aplicações e dos diversos tipos de usuários que as utilizam, novas interfaces surgiram permitindo o acesso aos dados através da combinação de diferentes representações visuais. Uma interface interativa que suporta estas características são denominadas de interface híbridas ou multimodal. Em interfaces multimodais, os modos de interação são manipulados independentemente, enquanto que, na abordagem híbrida os diferentes modos são integrados. A abordagem híbrida surgiu como uma forma de compensar a deficiência de uma única representação visual em alguns aspectos, por exemplo, ícones relacionados através de conectores como os diagrama, podem representar visualmente um esquema conceitual. Os SVCs híbridos/multimodais surgiram na década de 80. Recentemente surgiram novas interfaces híbridas/multimodais tais como interface que implementam consultas UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 32 dinâmicas. Podemos citar como exemplos de interfaces híbridas/multimodais: SKI[KM84], Sicon [GN88], Pasta-3 [KM89], IDDS [Nor93], MIGI [LH93], Medusa [HN93] , Visionary [BMR96], etc. Visionary é uma linguagem visual de consulta diagramática e icônica. Sua filosofia consiste na abordagem ponto-de-vista do usuário, definida por uma entidade correspondente ao objetivo principal da consulta. A partir de uma seqüência de transformações internas, transparentes ao usuário, o ponto-de-vista do usuário é gerado como uma árvore direcionada sobre o grafo do banco de dados, cuja raiz deve ser a entidade objetivo. A partir deste grafo, o sistema gera uma visão para o usuário e dentro desta visão o usuário formula sua consulta. EVOLUÇÃO DAS ESTRATÉGIAS DE INTERAÇÃO Em [FS97] é feito uma análise da evolução das interfaces para banco de dados segundo duas estratégias de interação: manipulação da estrutura e manipulação do conteúdo. Na primeira estratégia o usuário manipula a estrutura do esquema conceitual de forma a acessar os dados, enquanto que na segunda o usuário percorre sobre o conteúdo do banco de dados, sem precisar ter conhecimento da estrutura conceitual do mesmo. A seguir faremos um descrição da evolução destas duas estratégias. MANIPULAÇÃO DA ESTRUTURA A forma de navegação depende da representação visual adotada. Considerando a representação tabular, uma estratégia de navegação mais popular foi adotada pela interface tabular QBE: a abordagem by-example. Dentro desta abordagem, o usuário fornece um exemplo da resposta e o sistema identifica o objetivo generalizando tal exemplo. Todas as linguagens by-example adotaram esta estratégia. Considerando a representação icônica, a maioria das interfaces utilizaram a abordagem de composição de conceitos. De uma forma simplificada, as consultas são 0especificadas através da seleção e sobreposição de ícones. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 33 Na representação diagramática, diversas estratégias de interação foram propostas, a mais popular for a simplificação/navegação sobre os diagramas, onde o usuário extrai do esquema original os componentes necessários para a sua consulta e o sistema gera uma subesquema denominado esquema de interesse. O usuário “navega” sobre o esquema de interesse formando um path correspondente a sua consulta. Um path é constituído de uma seqüência ordenada de junção entre pares <entidade, relacionamente> dentro do esquema conceitual, seguindo por uma seleção final e projeção. MANIPULAÇÃO DO CONTEÚDO Na manipulação do conteúdo, o usuário faz uma navegação sobre os dados ao invés da navegação estrutural. A técnica mais popular de manipulação de conteúdo é o browsing, onde o usuário percebe o relacionamento entre os metadados através da navegação sobre os dados. Entre as interfaces de acesso ao conteúdo podemos destacar LID [Fog84] e G+ [CMW88]. Em LID, o usuário navega sobre uma tupla e visualiza o banco de dados dentro da perspectiva daquela tupla, ou seja, a interface mostra os relacionamentos em que aquela tupla participa assim como as entidades relacionadas. Houve um crescimento de interfaces para bancos de dados com acesso ao conteúdo na década de 90. Isto se deve a três fatores: Os problemas em se manipular a estrutura conceitual dos dados; A popularização das ferramentas browsing na Web; A nova abordagem de consulta dinâmica utilizada em algumas interfaces. Consultas dinâmicas envolvem o controle interativo do usuário sobre parâmetros visuais de consulta que geram um rápido e animado display visual do resultado do banco de dados. A interação com as interfaces que utilizam a abordagem de consulta dinâmica se processa da seguinte forma: tanto os dados de entrada como o de saída são visualizados de uma mesma forma. O usuário obtém os seus dados de interesse através da manipulação direta de componentes gráficos, por exemplo, um slider, que representa um domínio de valores numéricos ou uma seqüência de nomes correspondente a um atributo da aplicação. Na figura a seguir mostraremos um exemplo de uma consulta dinâmica. O lado esquerdo da figura representa um display de pontos dentro do espaço salário-idade, onde cada ponto UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 34 representa um empregado com seu correspondente salário e idade. O formato de cada ponto representa o departamento do empregado. O lado direito da figura é ocupado por sliders, um slider para cada atributo (os atributos são idade, salário, nome e departamento). Os extremos dos sliders representam o valor mínimo e o valor máximo do atributo. EMPREGADOS 100 19 IDADE IDADE 60 27 950 SALÁRIO Ana Zélia NOME Arte Treinamento SALÁRIO 0 0 SALARIO 1000 Figura 02. Representação de uma Consulta Visual A cada manipulação do slider, o resultado da consulta se modifica dinamicamente e rapidamente, ou seja, os pontos desaparecem ou reaparecem, dependendo da mudança de valor dos atributos. Aplicativos que utilizam consultas dinâmicas começaram a surgir somente na década de 90. Aplicações geográficas são perfeitamente adequadas para consultas dinâmicas. Algumas interfaces mais recentes utilizam o conceito de consultas dinâmicas, por exemplo, HIBROWSE [EFP95] e TVQL [HR95], esta ultima utiliza sliders para uma análise temporal. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 35 ALGUMAS INTERFACES VISUAIS A seguir faremos uma breve descrição de algumas interfaces visuais de consulta existentes. - G-OQL é uma interface visual para linguagens de consulta orientada a objeto OQL. Uma consulta OQL é considerado uma função, que aplicada ao BD, retorna um sub-BD com o mesma estrutura do BD original. A estrutura de um esquema de BD em OQL consiste basicamente de classes e associações entre estas classes dentro de um diagrama, e na entrada de operadores de associações entre as classes relacionadas; - O sistema PICASSO apresenta uma linguagem de consulta visual para BD’s sob o modelo de Relação Universal. A formulação da consulta é feita sobre hipergrafos utilizando o mouse com três botões, o botão da esquerda é usado para seleção de atributos, o do centro para elaboração de predicados, e o da direita para escolha de opções no menu de processamento de consultas. Uma ferramenta de apoio permite a navegação sobre o resultado da consulta e a construção de consultas complexas a partir do resultado de consultas simples; - A interface do sistema GOOD apresenta três componentes básicos: esquema conceitual, esquema de consulta e instância de BD’s. Os três componentes estão dentro de uma mesma representação visual, denominados de grafos de esquema, grafo de consulta e grafo de instância, respectivamente. O grafo de consulta é abstraído a partir da aplicação de uma primitiva sobre o grafo de esquema, através da duplicação e identificação de nodos e ligações componentes deste grafo; - A interface IQL é uma proposta de interface visual para banco de dados relacional. Além de fornecer uma interação visual durante a formulação da consulta SQL, fornece mecanismos de otimização das mesmas. Usuários têm a seu dispor uma variedade de mecanismos de abstração, tais como, denominação de consultas e uso de parâmetros, permitindo uma reutilização modular e genérica, possibilitando, desta forma, uma abordagem de orientação a objetos; - O sistema GOODIES vem com uma abordagem inteiramente nova para o desenvolvimento de interfaces para BD’s. Tal sistema não vem acoplado a um SGBDOO específico, ele se fundamente nas principais características de um modelo de dados orientado a objetos e foi construído de modo independente de uma implementação específica destas características. As informações sobre esquemas e dados em GOODIES, são apresentadas UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 36 textualmente, em janelas padronizadas, com facilidades de organização, navegação e consulta sobre as mesmas. - ConTOM (Consultas TOM) é um sistema gráfico de consultas sob o modelo de dados orientado a objetos TOM (Temporal Object Model ). ConTOM é constituído de operadores gráficos, de forma a expressar as consultas, e uma variedade de funcionalidades que facilitam a interação com o usuário. A especificação a nível de representação visual de um esquema conceitual, utilizando o modelo TOM, é denominada de Esquema Conceitual Gráfico (ECG). Uma consulta em ConTOM é expressa visualmente através da manipulação direta sobre qualquer componente de um ECG. A elaboração de uma consulta implica na criação de esquemas intermediários, obtidos pelos operadores gráficos sobre as classes componentes do esquema, denominados Operadores Gráficos de Consultas (OGC), até a formulação completa da consulta, gerando um sub-esquema do ECG, denominado de Esquema de Resposta (ER). O ER especifica qual a porção do BD a ser recuperada pela consulta e possui a mesma estrutura do EG original, podendo ser salvo como uma visão e reutizaá-lo para consultas posteriores. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 37 CONCLUSÃO 8 Através deste estudo sobre consultas e seus processamentos percebemos que esta é uma área onde pesquisas são feitas buscando melhorar a interação usuário-BD. Este fato fica bem claro em tratando-se de interfaces visuais de consultas. Em tratando-se de Datalog e Datalog1s, é usado todo o poder expressivo da lógica para construir sistemas de bancos de dados. Uma das características de maior expressividade neste tipo de sistema é a capacidade de efetuar consultas recursivas sobre os dados. Outro aspecto que merece destaque, é a tentativa de estender linguagens procedurais convencionais em linguagens procedurais com persistência e capacidade de consultas a dados (objetos). Este caminho deve-se ao fato de linguagens procedurais oferecem sistemas de tipos bem mais sofisticados que as linguagens puramente de consulta, por exemplo SQL. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 38 REFERÊNCIAS BIBLIOGRÁFICAS 9 [AC93] Ahad, R., and Cheng, T. 1993, OpenODB – An Object-Oriented Database Management System for Commercial Applications, HP Journal, Vol 44 No. 3, 20-30. [ACS90] M.Angelaccio, T. Catarci, and G. Santucci. QBD*: A graphical query language with recursion. IEEE Transaction on Software Engineering, 16(10):11501163,1990. [AD92] Ahad, R., and Dedo, D. 1992. OpenODB from Hewlett-Packard: A Commercial OODBMS. Journal of Object Oriented Programming, Vol. 4 No. 9 [BMR96] F. Benzi, D. Maio and R Rizzi. Visionary: Visual query language based on the user viewpoint approach. In KennedyJ., editor, Third Internacional Workshop on User Interfaces to Database Systems – Endinburgh, 1996. [Cea97] T. Catarci et al. Visual query systems: Analysis and comparison. Journal of Visual Languages and Computing,(8):215-260, 1997. [CMW88] I.F. Cruz, A.O.Mendelzon, and P.T. Wood. G+: Recursive queries without recursion. In Proc. Of the 2nd int. Conference on Expert Database Systems, pages 355-368, 1998. [DW91] S.W. Draper and K.W. Waite. Iconographer as a visual programming system. In Diaper D. and Hammond N., editors, HCI 91 People and Computers VI: Usability Now !, Cambridge University Press, pages 171-185, 1991. [EFP95] G.P.Ellis, G.E. Finlay, and A.S. Pollitt. Hibrowser for hotels: Bridging the gap between user and system views of a database. In Sawier P., editor, Interface to Datadase Sysyems, Lancaster 1994, Workshop in Computing, Springer-Verlag, London, pages 46-92, 1995. [EN94] R. Elmasri & S.B.Navathe, “ Fundamentals of Database Systems”, 1994. [ES90] Ellis, M. A. and Stroustrup, B. 1980. The Annotated C++ Reference Manual, Addison-Wesley, Reading, Mass. [ES94] H. Korth & Silberschatz, “ Sistemas de Bancos de Dados” , Makron Books, 1994. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 39 [FEA89] Fishman, D.H. et. Al. 1989. Overview of the Iris DBMS. In: Object Oriented Concepts, Databases and Applications. W.Kim and F.H. Lochovsky, eds. ACM, New York. [Fog84] D. Fogg. Lessons from a “living in a database”graphical query interface. In ACM SIGMOD Conf. On the Management of Data, pages 100-106, 1984. [FS95] S.L.Fernandes-Silva, “ConTOM – Um Sistema de Consultas Gráficas a um Banco de Dados Temporal Orientado a Objetos”, Dissertação de mestrado, COPIN/UFPB, 1995. S.L. Fernandes-Silva, “Integrando Aspectos Temporais no Acesso e na Usabilidade de Interfaces Visuais Adaptativas a Bancos de Dados Históricos” , 1997. [FS97] [GN88] I.P. Groette and E.G. Nilsson. Sicon: An icon presentation module for an e-r database. In Proc. Of the 7th Conf. On Entity-Relationship Approach, Roma, Italy, pages 271-289, 1998. [GPT93] M. Gemis, J. Paredaens, and I. Thyssens. A visual database management interface based on good. In Cooper R., editor, Interface to Database System, Glasgow 1992, Workshop in Computing, Spriner-Verlag, London, pages 155175, 1993. [HN93] P. Hietala and J. Nummenmaa. A multimodal database user interface and framework supporting user learning and user interface evaluation. In Cooper R., editor, Intefaces to Database System , Glasgow 1992, Workshop in Computing, Springer-Verlag. London, pages 392-405, 1993. [HP92] Hewlett-Packard. 1992. OpenODB Reference Manual B3185A. [HR95] S. Hibino and E. Rundensteiner. Visual query language for identifying temporal trends in video data. In Int. Workshop on Multimedia Database Management System, New York, pages 74-81, 1995. [Kim95] W. Kim , “Modern Database Systems”, Assison Weslwy, 1995. [KKS88] H. J. Kim, H. F Korth, and A Silberschatz. Picasso: A graphical query language. Software Practice and Experience, 18(3)169-203, 1998. [KM89] M. Kuntz and R. Melchert. Pasta-3’s graphical query language; Direct manipulation, cooperative queries, full expressive power. In. Proc. Of the 15th Int. Conf. On Very large Databases, Amsterdam, Holland, 1989. [KMS96] A. Kadyamatimba, J. Mariani, and P. Sawyer. Desktop objects: Directly manipulating data and metadata. In Kennedy J., editor., Third International Workshop on User-Interfaces to Database Systems, Edinburgh, 1996. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 40 [LH93] [Lyn91] J. Littlehales and P. Hancox. The problems of integrating to publicity available databases. In Cooper R., editor, Interfaces to Database System, Glasgow 1992, Workshop in Computing, Springer-Verlag, London, pages41-55, 1993. Lyngbaek, P. 1991. OSQL: A Language for Object Databases. Hewlett-Packard Laboratories technical report HPL-DTD-91-4. [MBW80] Mylopoulos, J., Bernstein, P.A.. and Wong, H.K.T. 1980. A Language Facility for Designing Database-Intensive Applications. Proceedings of ACM Transactions on DatabaseSystems, Vol 5 No.2. [MC95] A. Massari and P.K. Chrysanthis. Visual query ofencapsulated objects. In Proc. Of the 5th Int. Workshop on Research Issues on Data Engineering, Taipei, Taiwan, pages18-25, 1995. [MS75] N. McDonald and M Stonebraker. Cupid- the friendly query language. In Proc. ACM Pacific 75 Conf., pages 271-131, 1975. [Nor93] M.C. Norrie. Specification of Database Systems. Workshop in Computing Series, Springer-Verlag, 1992. [RK95] M. Rapley and J. Kennedy. Three dimensional interface for an object-oriented database. In Cooper R., editor, Interface to Database System, Lancaster 1994, Workshop in Computing, Springer-Verlag, London, pages 143-167, 1995. [Shi80] Shipman, D. 1981. The Functional Data Model and the Data Language DAPLEX. ACM Trans. On Database Systems, Vol 6 No. 1 [Tea90] K. Tsuda et al. Iconic browser: An iconic retrieval system for object-oriented databases. Journal of Visual Languages Computing, 1(1):59-76, 1990. [Ty88] F. Ty. G-opl: Graphical interface to the object-oriented query language oql. Master’s thesis, University of Florida, 1998. [WLH90] Wilkinson, K., Lynbaek, P.,and Hasan, W. 1990. The Iris Architecture and Implementation . IEEE Transactions on Knowledge and Data Engineering, Vol 2. No.1. [ZCF97] C. Zaniolo, S. Ceri, C.Faloutsos, R. Snodgrass, V. Subrahmanian & R Zicari, “Advanced Database Systems” , Morgan Kaufmann, 1997. [Zlo77] M. Zloof. Query-by-example. IBM Systems Journal, 21(3):324-343, 1977. UFPB/CCT/DSC/COPIN – BDs AVANÇADOS - CONSULTAS E SEUS PROCESSAMENTOS 41