Projeto e Implementação do Sistema BDR
B. Nm_Atributo_Virtual = 'Nm_Departamento' AND
5.5.2 Coletor de Fontes
Objetivo:
Informar a(s) fonte(s) que pode(m) atender a cada item da estrutura de dados
Consulta. Tabelas e atributos virtuais que participam de junções, somente podem ser mapeadas em tabelas e campos, respectivamente, pertencentes a uma mesma fonte de dados. Por exemplo, dada a eqüijunção Professor.Código = Disciplina.Código do Professor, onde Professor.Código pode ser mapeado para tabelas e atributos pertencentes às fontes de dados hipotéticas 1 e 2, e Disciplina.Código do Professor para uma tabela e campo pertencente à fonte 1, então, pelo que mencionamos acima, o Coletor de Fontes escolhe a fonte 1 para atender a ambos.
Entrada:
• Estrutura de dados Consulta.
Saída:
• Preenchimento do campo total de fontes, pertencente à estrutura de dados
Consulta;
• Preenchimento dos campos fonte, tabela e atributo, referentes à estrutura de dados Fontes.
Algoritmo:
Algoritmo de Coleta de Fontes de Dados
Para cada Atributo Virtual da Estrutura de Dados Consulta Faça
Procure no Metabanco de Dados a(s) Fonte(s) que pode(m) atender ao Atributo Virtual (Consulta.Tabela Virtual, Consulta.Atributo Virtual) (Tabela 5.45)
Insira o nome das Fontes, Tabelas e Atributos que podem atender ao atributo virtual no Conjunto A
Se Consulta.Junção = Então
Procure no Metabanco de Dados a(s) Fonte(s) que pode(m) atender ao Atributo Virtual de Junção (Consulta.Tabela Virtual de Junção, Consulta.Atributo Virtual de Junção) (Tabela 5.47)
Insira o nome das Fontes, Tabelas e Atributos que podem atender ao atributo virtual de junção no Conjunto B
Faça a interseção dos conjuntos A e B pelo nome das fontes, inserindo o resultado no conjunto C
Para cada Fonte do Conjunto C Faça
Crie um registro na Estrutura de Dados Fontes Consulta.Fontes.Fonte = nome da fonte Consulta.Fontes.Tabela = nome da tabela Consulta.Fontes.Atributo = nome do campo
Consulta.Total de Fontes = Consulta.Total de Fontes + 1
Fim Para Fim Se Senão
Para cada Fonte do Conjunto A que atenda ao atributo Faça Crie um registro na Estrutura de Dados Fontes
Consulta.Fontes.Fonte = nome da fonte Consulta.Fontes.Tabela = nome da tabela Consulta.Fontes.Atributo = nome do campo
Consulta.Total de Fontes = Consulta.Total de Fontes + 1
Fim Para Fim Senão Fim Para
Para o nosso exemplo, precisamos encontrar as fontes de dados que atendem ao atributo Departamento.Cd_Departamento. Para tal, a seguinte consulta ao Metabanco de Dados é criada pelo Seletor de Fontes:
SELECT DISTINCT B.Nm_Banco, T.Nm_Tabela, A.Nm_Atributo
FROM Banco B, Tabela T, Atributo A, Tabela_Virtual TV, Atributo_Virtual AV,
Tab_Virt_Mapeada_Tabela TVMT, Atrib_Virt_Mapeado_Atributo AVMA, Esquema_Global EG, Esq_Glob_Possui_Tab_Virt EGPTV
WHERE T.Cd_Banco = B.Cd_Banco AND A.Cd_Tabela = T.Cd_Tabela AND
TV.Nm_Tabela_Virtual = 'Departamento' AND AV.Nm_Atributo_Virtual = 'Cd_Departamento' AND TVMT.Cd_Tabela = T.Cd_Tabela AND TVMT.Cd_Tabela_Virtual =
TV.Cd_Tabela_Virtual AND A.Cd_Atributo = AVMA.Cd_Atributo AND
AV.Cd_Atributo_Virtual = AVMA.Cd_Atributo_Virtual AND EG.Nm_Esquema_Global = 'Organização' AND EG.Cd_Esquema_Global = EGPTV.Cd_Esquema_Global AND
EGPTV.Cd_Tabela_Virtual = TV.Cd_Tabela_Virtual
ORDER BY B.Nm_Banco
Tabela 5.45 - Recupera as Fontes de Dados que Atendem ao Atributo Virtual
Departamento.Cd_Departamento
Pelo resultado retornado pelo Metabanco de Dados (ver Tabela 5.46), podemos concluir que o atributo Departamento.Cd_Departamento é atendido pelas fontes Companhia e Empresa.
Banco de Dados Tabela Atributo
Companhia Departamento Cd_Departamento Empresa Departamento Cd_Departamento
Tabela 5.46 - Resultado da Consulta Recupera as Fontes de Dados que Atendem ao Atributo Virtual Departamento.Cd_Departamento
De forma semelhante, é necessário encontrar as fontes de dados que atendem ao atributo DepartamentoControlaProjeto.Cd_Departamento. Portanto, a seguinte consulta ao Metabanco de Dados é elaborada pelo Seletor de Fontes:
SELECT DISTINCT B.Nm_Banco, T.Nm_Tabela, A.Nm_Atributo
FROM Banco B, Tabela T, Atributo A, Tabela_Virtual TV, Atributo_Virtual AV,
Tab_Virt_Mapeada_Tabela TVMT, Atrib_Virt_Mapeado_Atributo AVMA, Esquema_Global EG, Esq_Glob_Possui_Tab_Virt EGPTV
WHERE T.Cd_Banco = B.Cd_Banco AND A.Cd_Tabela = T.Cd_Tabela AND
TV.Nm_Tabela_Virtual = 'DepartamentoControlaProjeto' AND AV.Nm_Atributo_Virtual = 'Cd_Departamento' AND TVMT.Cd_Tabela = T.Cd_Tabela AND
TVMT.Cd_Tabela_Virtual = TV.Cd_Tabela_Virtual AND A.Cd_Atributo = AVMA.Cd_Atributo
AND AV.Cd_Atributo_Virtual = AVMA.Cd_Atributo_Virtual AND EG.Nm_Esquema_Global = 'Organização' AND EG.Cd_Esquema_Global = EGPTV.Cd_Esquema_Global AND
EGPTV.Cd_Tabela_Virtual = TV.Cd_Tabela_Virtual
ORDER BY B.Nm_Banco
Tabela 5.47 - Recupera as Fontes de Dados que Atendem ao Atributo Virtual
DepartamentoControlaProjeto.Cd_Departamento
Pelo que podemos observar na Tabela 5.48, que mostra o resultado retornado pelo Metabanco de Dados para a consulta da Tabela 5.47, o atributo virtual
DepartamentoControlaProjeto.Cd_Departamento somente é atendido pela fonte de dados
Empresa.
Banco de Dados Tabela Atributo
Empresa DepartamentoControlaProjeto Cd_Departamento
Tabela 5.48 - Resultado da Consulta Recupera as Fontes de Dados que Atendem ao Atributo Virtual DepartamentoControlaProjeto.Cd_Departamento
Conforme dissemos no início da seção, as tabelas e atributos virtuais participantes de junções, somente podem ser mapeadas em tabelas e campos, respectivamente, pertencentes a uma mesma fonte de dados. Portanto, os atributos virtuais Departamento.Cd_Departamento e DepartamentoControlaProjeto.Cd_Departamento devem necessariamente ser atendidos por fontes de dados idênticas, visto que participam de uma junção. Em resumo, só podem ser atendidos pela fonte de dados
Empresa. O processo é o mesmo para todos os outros atributos virtuais inseridos na consulta.
Para o nosso exemplo o resultado final produzido pelo Algoritmo de Coleta de Fontes de Dados é: Consulta Índice do Atributo Virtual
Nome da Tabela Virtual Nome do Atributo
Virtual Selecionado
Função de
Agregação Filtro Junção OrderBy Total de Filtros Total de Junções Total de Fontes 1 Empregado Nm_Empregado 2 2 Empregado Cargo 1 3 Projeto Nm_Projeto 1 4 Departamento Nm_Departamento 1 2 5 Departamento Cd_Departamento 2 2 6 Empregado Cd_Departamento 1 2 7 Empregado Cd_Empregado 1 2 8 EmpregadoTrabalhaProjeto Cd_Empregado 1 1 9 Projeto Cd_Projeto 2 1 10 EmpregadoTrabalhaProjeto Cd_Projeto 1 1 11 DepartamentoControlaProjeto Cd_Projeto 1 1 12 DepartamentoControlaProjeto Cd_Departamento 1 1
Tabela 5.49 - Consulta: Resultado Produzido pelo Algoritmo de Coleta de Fontes de Dados
Fontes
Índice do Atributo Virtual
Fonte de
Dados Tabela Atributo
1 Companhia Empregado Nm_Empregado 1 Empresa Funcionario Nm_Funcionário 2 Companhia Empregado Cargo
3 Empresa Projeto Nm_Projeto 4 Companhia Departamento Nm_Departamento 4 Empresa Departamento Nm_Departamento 5 Companhia Departamento Cd_Departamento 5 Empresa Departamento Cd_Departamento 6 Companhia Empregado Cd_Departamento 6 Empresa Funcionario Cd_Departamento 7 Companhia Empregado Cd_Empregado 7 Empresa Funcionario Cd_Funcionario 8 Empresa FuncionarioTrabalhaProjeto Cd_Funcionario 9 Empresa Projeto Cd_Projeto 10 Empresa FuncionarioTrabalhaProjeto Cd_Projeto 11 Empresa DepartamentoControlaProjeto Cd_Projeto 12 Empresa DepartamentoControlaProjeto Cd_Departamento Tabela 5.50 - Fontes: Resultado Produzido pelo Algoritmo de Coleta de Fontes de Dados