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.