• Nenhum resultado encontrado

Projeto e Implementação do Sistema BDR

B. Nm_Atributo_Virtual = 'Nm_Departamento' AND

5.5.1 Analisador de Consulta

Objetivo:

Receber conjuntos1 de tabelas virtuais, atributos virtuais, filtros, ordenações e

agrupamentos, e estrutura-los, para que possam vir a ser utilizados por outros componentes do Integrador.

Entrada:

• Lista de Tabelas Virtuais - composta por "strings" do tipo

Nome_da_Tabela_Virtual. Exemplos: Empregado, Aluno, Funcionário, Tese, etc;

• Lista de Atributos Virtuais - composta por "strings" do tipo

Nome_da_Tabela_Virtual.Nome_do_Atributo_Virtual. Exemplos:

Empregado.Nm_Empregado, Aluno.Matrícula, Tese.Título, etc;

• Lista de Junções - formada por "strings" do tipo

Nome_da_Tabela_Virtual1.Nome_do_Atributo1 Operador Nome_da_Tabela_Virtual2.Nome_do_Atributo2. Exemplo:

Empregado.Cd_Departamento = Departamento.Cd_Departamento;

• Lista de Filtros - formada por "strings" do tipo

Nome_da_Tabela_Virtual.Nome_do_Atributo Operador Constante. Exemplos:

Empregado.Nome = 'Sheyla Yonara', Aluno.Matrícula = 93110492, etc;

• Lista de Ordenações - formada por "strings" do tipo

Nome_da_Tabela_Virtual.Nome_do_Atributo. Exemplos: Empregado.Nome,

Aluno.Bairro, Tese.Título, etc;

1 O formato de cada conjunto pode ser visualizado na Tabela 5.31. Para o nosso exemplo, utilizaremos os conjuntos da

• Lista de Agrupamentos: formada por "strings" do tipo

Nome_da_Tabela_Virtual.Nome_do_Atributo. Exemplos: Empregado.Área,

Aluno.Período, etc.

Saída:

Preenchimento dos seguintes campos, referentes à estrutura de dados Consulta: índice do atributo virtual, nome do atributo virtual, nome da tabela virtual, selecionado, granularidade, filtro, junção, orderby, groupby, total de filtros e total de junções;

Preenchimento dos campos, referentes à estrutura de dados Filtros: operador e constante;

Preenchimento dos campos, referentes à estrutura de dados Junções: operador, tabela virtual de junção e atributo virtual de junção.

Algoritmos:

Algoritmo de Coleta de Atributos e Tabelas Virtuais Para cada Atributo da Lista de Atributos Virtuais Faça

Crie um registro na Estrutura de Dados Consulta Consulta.Nome do Atributo Virtual = nome do atributo Consulta.Nome da Tabela Virtual = nome da tabela virtual Consulta.Selecionado = 

Se existir função de agregação aplicada ao atributo Então Consulta.Função de Agregação = função de agregação

Fim Se Fim Para

Seguindo o nosso exemplo, o resultado produzido pelo algoritmo anterior é:

Consulta Índice do

Atributo Virtual Nome da Tabela Virtual Nome do Atributo Virtual Selecionado Função de Agregação 1 Empregado Nm_Empregado 

2 Empregado Cargo 

3 Projeto Nm_Projeto 

Tabela 5.39 - Resultado Produzido pelo Algoritmo de coleta de atributos e tabelas virtuais

Algoritmo de Coleta de Filtros Para cada Atributo da Lista de Filtros Faça

Se atributo já existe na Estrutura de Dados Consulta Então Crie um registro na Estrutura de Dados Filtros Consulta.Filtros.Operador = operador

Consulta.Filtros.Constante = constante

Consulta.Total de Filtros = Consulta.Total de Filtros + 1

Fim Se Senão

Crie um registro na Estrutura de Dados Consulta Consulta.Nome do Atributo = nome do atributo

Consulta.Nome da Tabela Virtual = nome da tabela virtual Crie um registro na Estrutura de Dados Filtros

Consulta.Filtros.Operador = operador Consulta.Filtros.Constante = constante

Consulta.Total de Filtros = Consulta.Total de Filtros + 1

Fim Senão Fim Para

O resultado produzido pelo algoritmo com relação ao nosso pode ser visto nas tabelas a seguir:

Consulta Índice do Atributo Virtual Nome da Tabela Virtual Nome do Atributo Virtual Selecionado Função de Agregação Filtro Total de Filtros 1 Empregado Nm_Empregado  2 Empregado Cargo  3 Projeto Nm_Projeto  4 Departamento Nm_Departamento  1

Tabela 5.40 - Consulta: Resultado Produzido Pelo Algoritmo de Coleta de Filtros

Filtro

Índice do Atributo Virtual Operador Constante 4 = Informática

Algoritmo de Coleta de Junções

Conjunto A (Tabela Virtual, Atributo Virtual, Tabela Virtual de Junção, Atributo Virtual de Junção)

Para cada Tabela Virtual da Lista de Tabelas Virtuais Faça

Procure no Metabanco de Dados as tabelas e atributos virtuais que fazem junção com a tabela virtual inserindo no conjunto A (consulta da Tabela 5.27)

Para cada Atributo Virtual do conjunto A Faça

Se Atributo Virtual já existe na Estrutura de Dados Consulta Então Crie um registro na Estrutura de Dados Junções

Consulta.Junções.Operador = operador '='

Consulta.Junções.Tabela Virtual de Junção = Tabela Virtual de Junção Consulta.Junções.Atributo Virtual de Junção = Atributo de Junção Consulta.Total de Junções = Consulta.Total de Junções + 1

Fim Se Senão

Crie um registro na Estrutura de Dados Consulta Consulta.Nome do Atributo = nome do atributo

Consulta.Nome da Tabela Virtual = nome da tabela virtual Crie um registro na Estrutura de Dados Junções

Consulta.Junções.Operador = operador '='

Consulta.Junções.Tabela Virtual de Junção = Tabela Virtual de Junção Consulta.Junções.Atributo Virtual de Junção = Atributo de Junção Consulta.Total de Junções = Consulta.Total de Junções + 1

Fim Senão

Se Atributo Virtual de Junção já existe na Estrutura de Dados Consulta Então Crie um registro na Estrutura de Dados Junções

Consulta.Junções.Operador = operador '='

Consulta.Junções.Tabela Virtual de Junção = Tabela Virtual Consulta.Junções.Atributo Virtual de Junção = Atributo Virtual Consulta.Total de Junções = Consulta.Total de Junções + 1

Fim Se Senão

Consulta.Nome do Atributo = nome do atributo de junção

Consulta.Nome da Tabela Virtual = nome da tabela virtual de junção Crie um registro na Estrutura de Dados Junções

Consulta.Junções.Operador = operador '='

Consulta.Junções.Tabela Virtual de Junção = Tabela Virtual Consulta.Junções.Atributo Virtual de Junção = Atributo Virtual Consulta.Total de Junções = Consulta.Total de Junções + 1

Fim Senão Fim Para Fim Para

Para o nosso exemplo, o resultado gerado pelo Algoritmo de Coleta de Junções é o seguinte: Consulta Índice do Atributo Virtual

Nome da Tabela Virtual Nome do Atributo Virtual Selecionado Função de Agregação Filtro Total de Filtros Junção Total de Junções 1 Empregado Nm_Empregado  2 Empregado Cargo  3 Projeto Nm_Projeto  4 Departamento Nm_Departamento  1 5 Departamento Cd_Departamento  2 6 Empregado Cd_Departamento  1 7 Empregado Cd_Empregado  1 8 EmpregadoTrabalhaProjeto Cd_Empregado  1 9 Projeto Cd_Projeto  2 10 EmpregadoTrabalhaProjeto Cd_Projeto  1 11 DepartamentoControlaProjeto Cd_Projeto  1 12 DepartamentoControlaProjeto Cd_Departamento  1

Tabela 5.42 - Consulta: Resultado Produzido pelo Algoritmo de Coleta de Junções

Junções

Índice do Atributo

Virtual Operador Tabela Virtual de Junção Atributo Virtual de Junção 5 = Empregado Cd_Departamento 6 = Departamento Cd_Departamento 7 = EmpregadoTrabalhaProjeto Cd_Empregado 8 = Empregado Cd_Empregado 9 = EmpregadoTrabalhaProjeto Cd_Projeto 10 = Projeto Cd_Projeto 9 = DepartamentoControlaProjeto Cd_Projeto 11 = Projeto Cd_Projeto 12 = Departamento Cd_Departamento 5 = DepartamentoControlaProjeto Cd_Departamento Tabela 5.43 - Junções: Resultado Produzido pelo Algoritmo de Coleta de Junções

Algoritmo de Coleta de Ordenações Para cada Atributo da Lista de Ordenações Faça

Se atributo já existe na Estrutura de Dados Consulta Então Consulta.OrderBy = 

Fim Se Senão

Crie um registro na Estrutura de Dados Consulta Consulta.Nome do Atributo = nome do atributo

Consulta.Nome da Tabela Virtual = nome da tabela virtual Consulta.OrderBy = 

Fim Senão Fim Para

Após a execução do Algoritmo de Coleta de Ordenações, o resultado produzido para o exemplo é: Consulta Índice do Atributo Virtual

Nome da Tabela Virtual Nome do Atributo

Virtual Selecionado Função de Agregação Filtro Total de Filtros

Junção OrderBy Total de Junções 1 Empregado Nm_Empregado   2 Empregado Cargo  3 Projeto Nm_Projeto   4 Departamento Nm_Departamento  1 5 Departamento Cd_Departamento  2 6 Empregado Cd_Departamento  1 7 Empregado Cd_Empregado  1 8 EmpregadoTrabalhaProjeto Cd_Empregado  1 9 Projeto Cd_Projeto  2 10 EmpregadoTrabalhaProjeto Cd_Projeto  1 11 DepartamentoControlaProjeto Cd_Projeto  1 12 DepartamentoControlaProjeto Cd_Departamento  1

Algoritmo de Coleta de Agrupamentos Para cada Atributo da Lista de Agrupamentos Faça

Se atributo já existe na Estrutura de Dados Consulta Então Consulta.GroupBy = 

Fim Se Senão

Crie um registro na Estrutura de Dados Consulta Consulta.Nome do Atributo = nome do atributo

Consulta.Nome da Tabela Virtual = nome da tabela virtual Consulta.GroupBy = 

Fim Senão Fim Para

Como não foi definido nenhum agrupamento em nosso exemplo, o Algoritmo de Coleta de Agrupamentos não será utilizado. Contudo, seu funcionamento é semelhante aos do Algoritmo de Coleta de Ordenação.